切换项目结构模式

Project模式的项目结构

我们将项目切换成Project模式,这就是真实的目录结构。

  1. .gradle和.idea

    这两个目下放置的都是Android Studio自动生成的一些文件,我们无须关系,也不要去手动编辑。
  2. app

    项目中的代码、资源等内容几乎都是放置在这个目录下的。
  3. build

    它主要包含了一些在编译时自动生成的文件,不需要过多关心。
  4. gradle

    这个目录下包含了gradle wrapper的配置文件。
  5. .gitignore

    这个文件是用来指定的目录或文件排除在版本控制之外的。
  6. build.gradle

    这是项目全局的gradle构建脚本,通常不需要修改。
  7. gradle.properties

    这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
  8. gradlew和gradlew.bat

    这两个文件是用来在命令行界面执行gradle命令的,其中gradlew是在Linux或者Mac系统中使用的。gradlew.bathi在Windows系统中使用的。
  9. HelloWorld.iml

    iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,我们不需要修改这个文件中的任何内容。
  10. local.properties

    这个文件用于指定本机中的Android SDK路径的,通常内容都是自动生成的。
  11. settings.gradle

    这个文件用于指定项目中所有引入的模块。由于HelloWorld项目中只有一个app模块,因此该文件中也就只引入了app这一个模块。通常情况下引入都是自动完成的。

这个项目的目录介绍完毕了,除了app目录之外的,大多数的文件和目录都是自动生成的,app目录才是我们的重点。

  1. build

    这个目录和外层的build目录类似,主要也是包含了一些编译时自动生成的文件,不过它里面的内容会更多更复杂,我们不需要过多关心。
  2. libs

    如果你的项目中使用到了第三方jar包,就需要把这些jar包都放到libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
  3. androidTest

    此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
  4. java

    是放置我们所有java代码的地方。
  5. res

    这个目录下内容就有点多了,简单说就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。
  • 图片放在drawable目录下
  • 布局存放到layout目录下
  • 字符串放到values目录下
  1. AndroidMainfest.xml

    这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都要在这个文件夹里注册,另外还可以在这个文件夹中给应用程序添加权限声明。
  2. test

    此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
  3. .gitignore

    这个文件用于将app模块内的指定的目录或文件排除在版本控制器之外,作用和外层的.gitignore文件类似。
  4. app.iml

    IntelliJ IDEA项目自动生成的文件,我们不需要关心或修改这个文件中的内容。
  5. build.gradle

    这个app模块的gradle构建脚本,在这个文件中会指定很多项目构建相关的配置。
  6. proguard-rules.pro

    这个文件用于指定项目代码的混淆规格,当代码开发完成后打包成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。

这样整个项目的目录结构就介绍完了。

接下来我们一起分析一下HelloWorld项目究竟是怎么运行起来的吧。首先打开AndroidManifest.xml文件,从中可以看到如下代码。

  1. <activity android:name=".HelloWorldActivity">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN" />
  4. <category android:name="android.intent.category.LAUNCHER" />
  5. </intent-filter>
  6. </activity>

这段代码标示对HelloWorldActivity这个活动进行注册,没有在AndroidManifest.xml里注册的活动是不能使用的

其中intent-filter里的两行代码非常重要,

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />标示HelloWorldActivity是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。

我们来看下HelloWorldActivity这个活动。代码如下所示:

  1. public class HelloWorldActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.hello_world_activity);
  6. }
  7. }

首先我们可以看到,HelloWorldActivity是继承自AppCompatActivity的,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android2.1系统。Activity是Android系统提供的一个活动的基类,我们项目中所有的活动都必须继承它或者他的子类才能拥有活动的特性(AppCompatActivity是Activity的子类)。然后可以看到HelloWorldActivity中拥有一个onCreate()方法,这个方法是一个活动呗创建时必定要执行的方法。其中两行代码并没有Hello World!字样,那么程序中显示的Hello World!是在哪里定义的呢?

其实Android程序的设计讲究逻辑与视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。可以看到,在onCreate()方法的第二行调用了setContentView()方法,就是这个方法给当前的活动引入了一个hello_world_layout布局。

布局文件都定义在res/layout目录下的,打开hello_world_layout.xml文件并切换到Test视图,代码如下所示

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".HelloWorldActivity">
  8. <TextView
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="Hello World!"
  12. app:layout_constraintBottom_toBottomOf="parent"
  13. app:layout_constraintLeft_toLeftOf="parent"
  14. app:layout_constraintRight_toRightOf="parent"
  15. app:layout_constraintTop_toTopOf="parent" />
  16. </android.support.constraint.ConstraintLayout>

你看到就可以了,后面我们会对布局进行详细讲解的。

这样我们就将HelloWorld项目的目录结构以及基本的执行过程都分析完了。

本文由博客一文多发平台 OpenWrite 发布!

1.3.4分析你的第一个Android程序——Android第一行代码(第二版)笔记的更多相关文章

  1. 第一行代码阅读笔记---AndroidMainfest.xml分析

    按照这本书的指引,我随作者一样创建了一个安卓应用,开始了安卓开发的启程. 找到AndroidMainfest.xml这个文件,打开后看到了我创建的Activity在这个文件里被成功注册,文件内容如下: ...

  2. 第一行代码阅读笔记---详解分析第一个Android程序

    以下是我根据作者的思路,创建的第一个Android应用程序,由于工具强大,代码都自动生成了,如下: package com.example.first_app; import android.os.B ...

  3. 在C#中调用另一个应用程序或命令行(.exe 带参数)<zz>

    在.net中使用system.diaglostics.Process可以用来调用另一个命令行或程序. using   System.Diagnostics;     如果是dos     Proces ...

  4. 关于我在17号“一个查询任意年份中任意月份的天数”程序编写中的代码&第二种方法!

    PS:下面的代码是我对于17号的练习题的一些新的看法(其实就是从另一个角度思考问题) package day20180917;import java.util.Scanner;//导包public c ...

  5. 在C++里一个类成员函数多少行代码才是最好呢?

    这个问题,很多同事以及学生都问我这个问题.其实这是一个比较实际的问题,因为设计一个类成员函数的好与坏,决定了一个类代码的质量. 为了回答这个问题,昨晚又重新看看斯坦福大学的编程视频,可以用下面这个截图 ...

  6. 1.3创建你的第一个Android项目——Android第一行代码(第二版)笔记

    创建HelloWorld项目 如果是第一次,会经过漫长的等待. 启动模拟器 可以用第三方模拟器,也可以用官方集成的 点击后出现如下界面,可创建多个模拟器,如图,我已经创建好了一个,如果你没有,就点击下 ...

  7. bash shell 合并多个文件内容到一个文件、查看多少行代码

    一.简单版: $ cat **/* > merge.fuck 二.结合find + xargs + cat版本: $ find ./ -iregex '.*\.\(js\|scss\|tpl\) ...

  8. 第一个python程序(2)

    输入和输出 输出 用print加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print 'hello, world' pr ...

  9. 分析你的第一个Android程序

    目录 分析你的第一个Android程序 Android模式的项目结构 切换项目结构模式 Project模式的项目结构 .gradle和idea app build(没有发现这个文件夹) gradle ...

随机推荐

  1. Redis 高可用之"持久化"

    Redis高可用概述 在Redis中,实现高可用的技术主要包括:持久化.复制(读写分离).哨兵.集群. 持久化: 持久化是最简单的高可用方法(有时甚至不被归为高可用手段),主要作用是数据备份,即将数据 ...

  2. 【JavaScript学习笔记】数据类型

    1.获取数据类型 typeof 用法: typeof variable  or  typeof(variable) JavaScript中总共有6种数据类型,string.number.boolean ...

  3. python继承简介

    继承 是面向对象的三大特性之一 作用: 通过继承可以使一个类获取其它类中的属性和方法 使用方法: 在定义类时,可以在类名后的括号中指定当前类的父类(超类.基类.super) 这样子类(衍生类)就可以直 ...

  4. Iaas/paas/saas 三种模式分别都是做什么?

    任何一个在互联网上提供其服务的公司都可以叫做云计算公司.其实云计算分几层的,分别是Infrastructure(基础设施)-as-a- Service,Platform(平台)-as-a-Servic ...

  5. 设置java启动项目

    1,

  6. Java8 新特性(三) - 日期时间对象以及一些其他特性

    日期时间对象 关于日期时间的操作可以分为两种: 转换:与字符串的互相转换,与时间戳的互相转换 计算:计算两个时间点之间的间隔.时间点与时间段的计算(计算下周N.下个月D日.去年M月D日等等) Java ...

  7. java 自增/减运算符

    注意:python中没有 一.自增运算符 1.单独使用时,目的获取变量的值,前++和后++没有区别,使用后值都会递增一. 2.混合使用时,才有区别.前++,先加后用.后++,先用后加 二.自减运算符 ...

  8. python专题文件操作

    一 前言 本篇文章主要对文件操作进行说明,知识追寻者创作必属精品,读完本篇你将获得基础的文件操作能力,深入理解文件操作API,基础真的很重要,不管学什么知识,故看知识追寻者的专题系列真的很不错. 二 ...

  9. 我的第一个 Kaggle 比赛学习 - Titanic

    背景 Titanic: Machine Learning from Disaster - Kaggle 2 年前就被推荐照着这个比赛做一下,结果我打开这个页面便蒙了,完全不知道该如何下手. 两年后,再 ...

  10. KD-tree 学习小记

    考 \(NOI\) 时不会,感觉很亏.于是学了一上午,写了一晚上. 感觉这东西就是个复杂度玄学的高级暴力 (大雾 KD-tree 基本信息 \(D\) 就是 \(Dimension\) ,维度的意思. ...