Project目录如下:
一.整体目录
01. .gradle和.idea
这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不要去手动编辑
02.app
项目中的代码、资源等内容都是放置在这个目录下的,我们后面的开发工作也基本是在这 个目录下进行的,待会儿还会对这个目录单独展开讲解。
03.build
这个目录主要包含了一些在编译时自动生成的文件,你也不需要过多关心
04.gradle
这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前 将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。 Android Studio默认就是启用gradle wrapper方式的,如果需要更改成离线模式,可以 点击Android Studio导航栏→File→Settings→Build, Execution, Deployment→Gradle,进行配置更改。
05. .gitignore
这个文件是用来将指定的目录或文件排除在版本控制之外的
06.build.gradle
这是项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的
07.gradle.properties
这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
08.gradlew和gradlew.bat
这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
09.local.properties
这个文件用于指定本机中的Android SDK路径,通常内容是自动生成的,我们并不需要修 改。除非你本机中的Android SDK位置发生了变化,那么就将这个文件中的路径改成新的位置即可
10.settings.gradle
这个文件用于指定项目中所有引入的模块。由于HelloWorld项目中只有一个app模块,因 此该文件中也就只引入了app这一个模块。通常情况下,模块的引入是自动完成的,需要我 们手动修改这个文件的场景可能比较少。
二.app目录
01.build
这个目录和外层的build目录类似,也包含了一些在编译时自动生成的文件,不过它里面的内容会更加复杂,我们不需要过多关心。
02.libs
如果你的项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包会被自动添加到项目的构建路径里。
03.src-androidTest
此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
04.src-main-java
毫无疑问,java目录是放置我们所有Java代码的地方(Kotlin代码也放在这里),展开该 目录,你将看到系统帮我们自动生成了一个MainActivity文件。
05.src-main-res
这个目录下的内容就有点多了。简单点说,就是你在项目中使用到的所有图片、布局、字 符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在drawable 目录下,布局放在layout目录下,字符串放在values目录下,所以你不用担心会把整个res 目录弄得乱糟糟的。
06.src-main-AndroidManifest.xml
这是整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注 册,另外还可以在这个文件中给应用程序添加权限声明
07.src-test
此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
08..gitignore
这个文件用于将app模块内指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
09.build.gradle
这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置,我们稍后 将会详细分析gradle构建脚本中的具体内容
10.proguard-rules.pro
这个文件用于指定项目代码的混淆规则,当代码开发完成后打包成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。
三.res目录
所有 以“drawable”开头的目录都是用来放图片的,所有以“mipmap”开头的目录都是用来放应用图 标的,所有以“values”开头的目录都是用来放字符串、样式、颜色等配置的,所有 以“layout”开头的目录都是用来放布局文件的
四.build.gradle
01最外层的build.gradle文件
首先,两处repositories的闭包中都声明了google()和jcenter()这两行配置,那么它们 是什么意思呢?其实它们分别对应了一个代码仓库,google仓库中包含的主要是Google自家的扩展依赖库,而jcenter仓库中包含的大多是一些第三方的开源库。声明了这两行配置之后,我 们就可以在项目中轻松引用任何google和jcenter仓库中的依赖库了
接下来dependencies闭包中使用classpath声明了两个插件:一个Gradle插件和一个 Kotlin插件,则需要声明com.android.tools.build:gradle:3.5.2这个插件。其中,最后面 的部分是插件的版本号,它通常和当前Android Studio的版本是对应的,比如我现在使用的是 Android Studio 3.5.2版本,那么这里的插件版本号就应该是3.5.2。而另外一个Kotlin插件则 表示当前项目是使用Kotlin进行开发的,如果是Java版的Android项目,则不需要声明这个插 件。
02.app层的build.gradle文件
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdk 33
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.helloworld"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
逐个分析
1.com.android.application表示这是一个应用程序模块
2.kotlin-android和kotlin-android-extensions,如果你想要使 用Kotlin来开发Android项目,那么第一个插件就是必须应用的。而第二个插件帮助我们实现了 一些非常好用的Kotlin扩展功能
3.andorid闭包
3.1包含defaultConfig闭包,在defaultConfig闭包中,
applicationId:是每一个应用的唯一标识符,不可重复,
minSdkVersion:用于指定项目最低兼容的Android系统版本,
targetSdkVersion:指定的值表示你在该目标版本上已经 做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性
versionCode:用于指定项目的版本号
versionName:用于指定项目的版本名
testInstrumentationRunner:用于在当前项 目中启用JUnit测试,你可以为当前项目编写测试用例,以保证功能的正确性和稳定性
3.2包含buildTypes闭包
用于指定生成安装文件的相关配置,通常会有两个子闭包:一个是debug,一个是release
debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件 的配置
minifyEnabled:用于指定是否 对项目的代码进行混淆,true表示混淆,false表示不混淆
proguardFiles:用于指定混淆 时使用的规则文件,这里指定了两个文件:第一个proguard-android-optimize.txt是在 <Android SDK>/tools/proguard目录下的,里面是所有项目通用的混淆规则;第二个 proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则
4.dependencies闭包
implementation fileTree就是一个本 地依赖声明,它表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径中
implementation则是远程依赖声明,比如implementation 'androidx.core:core-ktx:1.9.0'
库依赖声明:基本格式是implementation project后面加上要 依赖的库的名称