![Android Studio开发实战:从零基础到App上线(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/515/26793515/b_26793515.jpg)
1.4 App的工程结构
上一节在模拟器上成功地运行了第一个App(Hello World),接下来好好研究一下它的工程结构。每个App的工程结构都差不多,只要掌握了基本结构,后面开发起来就会得心应手。
1.4.1 工程目录说明
Android Studio的工程创建分两个层级:第一个层级通过菜单File→New→New Project创建,这里的新项目是指新的工作空间,对应Eclipse的workspace;第二个层级通过菜单File→New→New Module创建,这里的新模块是指一个单独的App工程,对应Eclipse的project。第一次运行Android Studio都是选择New Project,表示先创建一个工作空间;后面还想创建新的App工程时,只需选择New Module,表示在当前工作空间下新建一个App工程。
例如,图1-26是之前HelloWorld工程的目录结构图。
![](https://epubservercos.yuewen.com/2EEE11/15253384705226606/epubprivate/OEBPS/Images/Figure-P29_2698.jpg?sign=1739238664-kZf0Dq7sFEG9sxyKyKIqTLlMwwauBdKj-0-e649c68a65304fc1312cedcb598e2f50)
图1-26 Hello World工程的目录结构图
从结构图中可以看到,该工程下面有两个目录:一个是app,另一个是Gradle Scripts。其中,app下面又有3个子目录,功能说明如下:
(1)manifests子目录,下面只有一个xml文件,即AndroidManifest.xml,是App的运行配置文件。
(2)java子目录,下面有3个com.example.hellorworld包,其中第一个包存放的是App工程的java源代码,后面两个包存放的是测试用的Java代码。
(3)res子目录,存放的是App工程的资源文件。res子目录下又有4个子目录:
- drawable目录存放的是图形描述文件与用户图片。
- layout目录存放的是App页面的布局文件。
- mipmap目录存放的是启动图标。
- values目录存放的是一些常量定义文件,比如字符串常量strings.xml、像素常量dimens.xml、颜色常量colors.xml、样式风格定义styles.xml等。
Gradle Scripts下面主要是工程的编译配置文件,主要有:
(1)build.gradle,该文件分为项目级与模块级两种,用于描述App工程的编译规则。
(2)proguard-rules.pro,该文件用于描述java文件的代码混淆规则。
(3)gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动。
(4)settings.gradle,配置哪些模块在一起编译。初始内容为include ':app',表示只编译App模块。
(5)local.properties,项目的本地配置,一般无须改动。该文件是在工程编译时自动生成的,用于描述开发者本机的环境配置,比如SDK的本地路径、NDK的本地路径等。
1.4.2 编译配置文件build.gradle
项目级别的build.gradle一般无须改动,读者只需关注模块级别的build.gradle。下面在初始的build.gradle文件中补充文字注释,方便读者更好地理解每个参数的用途。
![](https://epubservercos.yuewen.com/2EEE11/15253384705226606/epubprivate/OEBPS/Images/Figure-P30_103278.jpg?sign=1739238664-50rF4TXpVGAtPiK4uHiP7UXuO8NysGvb-0-6332eb293c398b2cc40c21fbd2cde652)
1.4.3 App运行配置AndroidManifest.xml
AndroidManifest.xml用于指定App内部的运行配置,是一个XML描述文件,根节点为manifest,根节点的package指定了该App的包名。manifest下面又有若干子节点,分别说明如下:
(1)uses-sdk,该节点有两个属性:android:minSdkVersion和android:targetSdkVersion。这两个属性是早期Eclipse开发App时使用的,现在这两个字段改成放到build.gradle文件中,故而Android Studio不配置uses-sdk也没有关系。
(2)uses-permission,该节点用于声明App运行过程中需要的权限名称。例如,访问网络需要上网权限,拍照需要摄像头权限,定位需要定位权限等。
(3)application,该节点用于指定App的自身属性,默认的属性说明如下:
- android:allowBackup,用于指定是否允许备份,开发阶段设置为true,上线时设置为false。
- android:icon,用于指定该App在手机屏幕上显示的图标。
- android:label,用于指定该App在手机屏幕上显示的名称。
- android:supportsRtl,设置为true表示支持阿拉伯语/波斯语这种从右往左的文字排列顺序。
- android:theme,用于指定该App的显示风格。
application节点下还有几个子节点,比如活动activity、服务service、广播接收器receiver、内容提供器provider等,这些子节点的详细属性会在后续章节详细说明。
1.4.4 在代码中操纵控件
在一开始创建Hello World工程时,Android Studio默认打开了两个文件,分别是布局文件activity_main.xml和代码文件MainActivity.java。下面先看布局文件activity_main.xml的内容:
![](https://epubservercos.yuewen.com/2EEE11/15253384705226606/epubprivate/OEBPS/Images/Figure-P32_103282.jpg?sign=1739238664-ugxxsv45ZvsMRwQX88pNQnU92PjDRopc-0-191f1dacdd3980257dcc4d3959f89596)
这里可以看到xml文件中只有两个节点,分别是RelativeLayout和TextView。再仔细看看,有没有发现熟悉的“Hello World”?没错,模拟器App界面显示的Hello World就来自于这里,也就是TextView控件的android:text属性值。可以把这里的Hello World改为其他文字,比如“你好、世界”或I Love Android,改完保存文件后再依次选择菜单Run→Run 'app',看看App界面上的文字是不是变成新的了?
当然,我们的目标并不仅限于在布局文件中修改文字,还要能够在代码中修改文字的内容。再次打开代码文件MainActivity.java,看看里面有什么内容。该java文件中MainActivity类的内容如下:
![](https://epubservercos.yuewen.com/2EEE11/15253384705226606/epubprivate/OEBPS/Images/Figure-P32_103283.jpg?sign=1739238664-aswRhTXxuFg2FPpapJ1tvfQTbO8ciuEU-0-4e886a57688cffc2e023b6cbf27ac2ed)
这里可以看出,MainActivity.java的代码内容很简单,只有一个MainActivity类,该类下面只有一个函数onCreate。注意onCreate内部的setContentView方法直接引用了布局文件的名字activity_main,该方法的意思是往App界面填充activity_main.xml的布局内容。现在我们要在这里改动改动,加点“绿叶红花”让它好看一些。首先打开activity_main.xml,在TextView节点下方补充一行android:id="@+id/tv_hello";然后回到MainActivity.java,在setContentView方法下面补充几行代码,具体如下:
![](https://epubservercos.yuewen.com/2EEE11/15253384705226606/epubprivate/OEBPS/Images/Figure-P33_103284.jpg?sign=1739238664-sLFRZJ5RE1m9oDHWUX598PiiKHbTRH4c-0-94641555bb956cd43bbaac752c393a97)
![](https://epubservercos.yuewen.com/2EEE11/15253384705226606/epubprivate/OEBPS/Images/Figure-P33_3184.jpg?sign=1739238664-VLxgZblZqcQgip97fMgX2fhdI1XorlDY-0-8207405db008ec4c58f3df340ae79b9a)
图1-27 修改文字后的HelloWorld界面
保存文件后依次选择菜单Run→Run 'app',模拟器上的App界面就变成了如图1-27所示的样子。
现在不但文字内容改变了,文字颜色和字体大小也发生了变化。怎么样,是不是很有成就感呢?好的开始是成功的一半,现在大家初步学会了在代码中操作控件,下一章进一步学习在App界面上人机交互。