在创建HelloAndroid项目时,自动创建了该项目的目录结构,如图2-2所示。
下面将分别介绍图中的各级目录结构。
该目录中的AndroidManifest.xml文件是项目的系统配置文件,或称为清单文件,位于项目的根目录下。每个Android程序都必须拥有该文件。它为Android系统提供了启动和运行该项目时所必需要了解的基本信息,有关内容将在2.3节中详细介绍。
图2-2 HelloAndroid项目的
该目录是源代码目录,所有用户自己添加的或者允许用户修改的 java文件全部存放于该目录下。该目录下的 java文件以用户所声明的包自动组织。如果在创建项目时,设定的包为neusoft.edu.cn,那么自动建立的MainActivity.java文件就存放在该包内。程序开发人员可以根据需要,在java目录下添加包或者添加java文件。
该目录是资源目录,包含本项目中所使用的全部资源文件。新建一个项目,res目录下会有4类子目录:drawable、layout、mipmap和values。
drawable:主要存放一些用户自定义形状和背景选择器(Android Selector)。这些资源文件都是.xml类型。背景选择器用于改变ListView或者Button等控件的背景颜色。
layout:存放界面布局文件,文件类型为.xml。新建项目时,已经在该目录下存放了activity_main.xml文件。与Web应用中所使用的HTML文件一样,Android使用XML元素设定屏幕的布局。每个布局文件包含整个屏幕或部分屏幕的视图资源。
mipmap:包含一些应用程序可以用的原生图标文件(*.png、*.gif、*.jpg),Google公司强烈建议使用mipmap存放图片文件。把图片放到mipmap可以提高系统渲染图片的速度,提高图片质量,减轻CPU的压力。
values:存放xml类型的资源描述文件,默认包含颜色(colors.xml)、尺寸(dimens.xml)、字符串(string.xml)和样式(styles.xml)。
Android对资源名称有约束,命名只能使用字母、数字、下画线(_)和点(.),而且不能以数字开头,否则编译会报错。
使用Android Studio开发环境创建项目工程时,会在Gradle Scripts目录下面自动创建几个.gradle文件,如图2-3所示。项目工程需要使用.gradle文件来配置,是一个脚本化的工程构建,而非原先ADT中那种Eclipse的可视化构建。gradle的依赖管理能力极其强大,几乎所有的开源项目都可以简单地通过一条compile指令完成依赖的配置。
图2-3 Gradle Scripts目录结构
(1)build.gradle(Project: MyApplication)
这是Android项目根目录下的build.gradle,此文件名是一个约定名字,gradle将依赖它来构建项目。一个项目可以包括多个工程,gradle可以构建多个工程,每个工程子目录都可以有build.gradle文件,如同make构建工具与Makefile文件的关系。
build.gradle(Project:HelloAndroid)文件内容如下:
//Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
//NOTE: Do not place your application dependencies here; they belong
//in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete){
delete rootProject.buildDir
}
buildscript :用于设置驱动构建过程的代码。
jcenter():声明使用maven仓库。在旧版本中,此处为mavenCentral()。
dependencies:声明使用了Android Studio gradle插件版本。一般升级AS或者导入从Eclipse中生成的项目时需要修改下面gradle版本。
allprojects :设置每一个module的构建过程。在此例中,设置了每一个module使用maven仓库依赖。
(2)build.gradle(Module:app)
该文件位于Android项目根目录下,app是一个gradle工程,该文件用来描述如何构建app工程。gradle可以支持构建多个工程,并设置工程之间的依赖关系。
build.gradle(Module:app)文件内容如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "cn.edu.neusoft.helloandroid"
minSdkVersion 21
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs',include:['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
}
apply plugin: 'com.android.application':表示使用com.android.application插件。Gradle以module(模块)方式管理项目,在Gradle构建的Gradle project中通常包含application module(com.android.application)与library module(com.android.library)两种module。“com.android.application”标识是一个android application module,“com.android.library”标识是一个android library module。
android:配置所有android构建过程需要的参数。
compileSdkVersion:用于编译的SDK版本。
buildToolsVersion:用于Gradle编译项目的工具版本。
defaultConfig:Android项目默认设置。
applicationId:应用程序包名。
minSdkVersion:最低支持Android版本。
targetSdkVersion:目标版本,实际上应为测试环境下测试机的Android版本。
versionCode:版本号。
versionName:版本名称。
buildTypes :编译类型,默认有 release和 debug两种类型。可以在此处添加自己的buildTypes。
minifyEnabled :是否使用混淆。在旧版本中为runProguard,新版本之所以换名称,是因为新版本支持去掉没使用到的资源文件,而runProguard这个名称已不合适了。
proguardFiles :使用的混淆文件,可以使用多个混淆文件。此例中,使用了SDK中的proguard-android.txt文件以及当前module目录下的proguard-rules.pro文件。
dependencies :用于配置引用的依赖。
compile fileTree(dir: 'libs',include:['*.jar']):引用当前module目录下的libs文件夹中的所有.jar文件。
compile 'com.android.support:appcompat-v7:23.1.1' :引用23.1.1版本的appcompat-v7(也就是常用的v7 Library项目)。
(3)settings.gradle文件
这个文件也是gradle约定命名的,默认只有一行代码include ':app',表示当前工程只有一个模块,app是目录名,同时也作为工程名。当有多个工程的时候,可以在此添加。