Android build.gradle 解析
外层 build.gradle
buildscript {
ext.kotlin_version = '1.3.71'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
google() 和 jcenter() 分别对应了一个代码仓库, google() 仓库中包含的主要是 Google 自家的扩展依赖库, jcenter() 仓库中包含的大多是一些第三方的开源库。
dependencies 闭包中使用 classpath 声明了两个插件,com.android.tools.build:gradle:3.6.3 用来构建 Android 项目,版本号通常与 Android Studio 是对应的。org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version 表示当前项目由 Kotlin 开发。
app 目录下的 build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.helloworld"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
插件 com.android.application 表示这是一个应用程序模块,可替换成 com.android.library, 表示这是一个库模块。应用程序模块可以直接运行,库模块只能作为代码库依附于别的应用程序模块来运行。
如果要使用 Kotlin 开发,必须应用 kotlin-android 插件。
插件 kotlin-android-extensions 帮助我们实现了一些非常好用的 Kotlin 扩展功能。
紧接着是一个大的android 闭包,在这个闭包中我们可以配置项目构建的各种属性:
compileSdkVersion 用于指定项目的编译版本
buildToolsVersion 指定项目构建工具的版本
android 闭包中的 defaultConfig 闭包,可以配置项目的更多细节:
applicationId 应用的唯一标识符,默认会使用创建项目时使用的包名
minSdkVersion 最低兼容的 Android 系统版本
targetSdkVersion 指定的值表示你在该目标版本上已经做过了充分的测试,系统会为你的应用程序启用一些新的功能和特性。比如 Android 6.0 系统中引入了运行时权限功能,如果 targetSdkVersion 指定成23或者更高,那么系统就会为你的程序启用运行时权限功能,如果低于23,则不会启用。
versionCode 版本号
versionName 版本名
testInstrumentationRunner 用于在当前项目中启用 JUnit 测试,你可以为当前项目编写测试用例,以保证功能的正确性和稳定性。
android 闭包中的 buildTypes 闭包,用于指定生成正式版安装文件的配置,通常有两个子闭包,一个 debug,一个 release :
minifyEnabled 是否混淆
proguardFiles 用于指定混淆时使用的规则文件,这里指定了两个文件,第一个 proguard-android-optimize.txt 是在 < Android SDK >/tools/proguard 目录下的,里面是所有项目通用的混淆规则;第二个proguard-rules.pro 是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。
最后是 dependencies 闭包,可以指定当前项目所以的依赖关系,一般有三种依赖关系:
implementation fileTree 本地依赖声明,可以对本地的 jar 包或目录添加依赖关系
implementation project 库依赖声明,可以对项目中的库模块添加依赖关系
implementation 远程依赖声明, 可以对 jcenter 仓库上的开源项目添加依赖关系
推荐阅读
-
Android build.gradle 解析
-
Android动画之View(补间)动画和帧动画
-
iOS网络——NSURLSession详解及SDWebImage源码解析
-
搬好小板凳看SDWebImage源码解析(二)
-
Android Activity调整改变成Dialog
-
Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
-
Android 更新PopupWindow里ContentView中具体的控件【显示,隐藏】
-
在android中配置 slf4j + log4j 日志记录框架
-
Android面试题及答案
-
iOS源码解析:runtime isa,class底层结构窥探