一.项目的总体结构
.gradle和.idea是AS自动生成的文件,不用编辑。
app中包含了代码和资源文件,开发是在这个目录下进行的。
gradle包含了gradle wrapper的配置文件。
.gitignore是用来将指定的目录或文件排除在版本控制外。
build.gradle是项目全局的gradle构建脚本。
gradle.properties是全局的gradle配置文件。
gradlew和gradlew.bat是用来在在命令行界面执行gradle命令的,前者用于Linux或Mac系统,后者用于Windows系统。
HelloWorld.iml是IDEA项目自动生成的文件,不需要更改。
local.properties用于指定本机Android SDK路径,通常不用更改,除非本机的Android SDK位置发生变化。
settings.gradle用于指定项目中所有引入的模块。
二.app目录下的结构
build包含编译时自动生成的文件。
libs用来存放第三方jar包。
androidTest用来编写Android Test测试用例,可以对项目进行一些自动化测试。
java存放编写的Java代码。
res存放资源文件,包括图片、布局、字符串等。图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。
AndroidManifest.xml是整个Android项目的配置文件,定义的四大组件都要在这里注册,权限的声明也在这里。
test用来编写Unit Test测试用例。
.gitignore将app模块中的指定目录或文件排除在版本控制外。
build.gradle指定很多项目构建相关的配置。
proguard-rules.pro用于指定项目代码的混淆规则。
三.对app目录下的build.gradle文件进行分析
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.helloworld"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
第一行应用了一个插件,有两种值可选:com.android.application和com.android.library,前者表示这是一个应用程序模块,后者表示这是一个库模块。
接下来是android闭包,其中的compileSdkVersion表示指定项目的编译版本。然后里面是一个defaultConfig闭包,其中applicationId表示指定项目的包名,minSdkVersion表示指定兼容项目的最低Sdk版本,targetSdkVersion表示我们在该目标版本的项目上已经做过充分的测试,versionCode指定项目版本号,versionName指定版本名,testInstrumentationRunner是单元测试。然后是buildTypes闭包,其中的release闭包下的minifyEnabled用于指定项目代码是否混淆,true表示混淆。proguardFiles表示指定混淆时使用的规则文件。
最后是dependencies闭包,这个闭包可以指定当前项目所有的依赖关系。AS项目共有3种依赖方式:本地依赖、库依赖和远程依赖。本地依赖是对本地的Jar包或目录添加依赖关系,库依赖是对项目中的库模块添加依赖关系,远程依赖是对jcenter库上的开源项目添加依赖关系。其中implementation fileTree是一个本地依赖的声明,它表示将libs目录下所有的.jar后缀文件添加到项目的构建路径当中。appcompat和constraint都属于远程依赖,其它的是测试相关内容。