《android 高级进阶》读书笔记
Gradle是Android Studio标配的构建系统,想要熟练使用Android Studio进行Android开发,必须对Gradle有一定程度的认知。这里主要是说一下关于Gradle的使用技巧
共享变量的定义
Gradle开发中会涉及到很多配置,比如不同module中都要配置compileSdkVersion、buildToolsVersion等变量值,我们把这些公共的配置项称为共享变量。一般情况下他们的取值都是保持一致的,如果每个module自己管理自己的这些配置,则可能会导致不同module取值不同,也可能会导致修改某个配置项时需要到每个module中都修改一遍。为了解决这个问题,我们定义一个名为common_config.gradle的文件,并放在工程根目录中,文件内容如下:
project.ext{
// Java 相关
javaVersion = 8
javaMaxHeapSize = '4G'
// Android 编译版本相关
compileSdkVersion = 25
buildToolsVersion = "25.0.2"
minSdkVersion = 16
targetSdkVersion = 25
//混淆相关
minifyEnable = true
shrinkResEnable = minifyEnable
// JDK版本兼容
sourceCompatibility = this.&getJavaVersion()
targetCompatibility = this.&getJavaVersion()
}
def getJavaVersion(){
switch (project.ext.javaVersion){
case "6":
return JavaVersion.VERSION_1_6
case "7":
return JavaVersion.VERSION_1_7
case "8":
return JavaVersion.VERSION_1_8
default:
return JavaVersion.VERSION_1_6
}
}
工程中各个module 的build.gradle文件引用全局配置项如下:
apply from: "${project.rootDir}/common_config.gradle"
android {
compileSdkVersion project.ext.compileSdkVersion
buildToolsVersion project.ext.buildToolsVersion
defaultConfig {
minSdkVersion project.ext.minSdkVersion
targetSdkVersion project.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions{
sourceCompatibility project.ext.sourceCompatibility
targetCompatibility project.ext.targetCompatibility
}
}
通用配置
在多Module项目中,不同Module除了共享一些变量值以外,还会共享一些通用的配置,例如项目中有8个Module,那么我们需要为每个Module的build.gradle文件中添加对common_config.gradle的引用。
apply from: "${project.rootDir}/common_config.gradle"
这显然是可以解决的,比较常见的就是在工程的根目录的build.gradle文件中配置subprojects,语句如下:
subprojects{
apply from: "${project.rootDir}/common_config.gradle"
}
aar函数库的引用
要输出 aar 文件,必须将 Module 配置为 library,在 gradle 文件中如下:
输出 aar :apply plugin: 'com.android.library'
输出 apk :apply plugin: 'com.android.application'
aar它的本质上是一个压缩包,里面包含了jar文件和Android相关的资源,如图解压后的aar包:
为了在库中正常引用aar文件中的类,可以在该库的build.gradle文件中添加如下配置:
...
// 为了能够在工程的libs目录中找到其中的aar文件
repositories{
flatDir{
dirs 'libs'
}
}
dependencies{
...
// aar 文件的依赖配置
compile(name: 'xxx', ext: 'aar')
compile(name: 'xxx', ext: 'aar')
...
}
但是如果其他模块依赖该库,只有上面的配置是不够的,Android Studio会提示找不到aar文件的错误。为了子其他模块使用该库提供的API,以及引用到其中的aar文件,我们需要在项目根目录中的build.gradle文件中增加如下配置:
allprojects{
repositories {
...
flatDir {
dirs '../xxx/libs'
}
}
}
签名和混淆的配置
APK在发布时需要进行签名和代码混淆,在项目的Application Module中的build.gradle文件中进行少量配置即可实现自动签名和混淆,
android {
signingConfigs{
// *** 需要替换成项目自己的值,其中***.keystore 文件和build.gradle位于同级目录
myConfig{
storeFile file("***.keystore")
storePassword "***"
keyAlias "***"
keyPassword "***"
}
}
buildTypes {
// debug 版本可签名也可不签名
debug{
signingConfig signingConfig.myConfig
// debug 版本可以不进行代码混淆,以便于调试
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
// 签名配置
signingConfig signingConfig.myConfig
// release版本一定要进行代码混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
这些都是Gradle在Android Studio中的一些技巧,有什么错误欢迎指出,有什么不清楚留言给我。