《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中的一些技巧,有什麼錯誤歡迎指出,有什麼不清楚留言給我。