android gradle配置詳解
阿新 • • 發佈:2019-01-14
AppExtension類及其屬性
可能大部分人看到AppExtension類會感覺到非常的陌生,其實我們在app中的build.gradle中填寫配置資訊的時候,經常看到它,它是什麼呢?
如果你按ctrl+滑鼠左鍵對著Android{},點選進去就知道了,其實android{…}表示的就是AppExtension這個類。
如圖:
我們再來看看AppExtension繼承關係:
除了AppExtension之外還有2個類與之相似,LibraryExtension和TestExtension
如果是module專案作為lib使用,那麼lib下的build.gradle中的android對應的是LibraryExtension
AppExtension的屬性
- aaptOptions:aapt是一個可以將資原始檔編譯成二進位制檔案的工具。aaptOptions表示aapt工具設定的可選項引數。
- adbExecutable:adb從編譯sdk時執行
- adbOptions:adb的可選項引數
- applicationVariants:應用變體列表
- ==buildToolsVersion==:構建工具版本(必要的)
- buildTypes:構建型別(一般是release和debug,還可以自定義)
- compileOptions:編譯可選項引數
- ==compileSdkVersion==:編譯sdk版本(必要的)
- dataBinding
- defualtConfig:預設配置,對於所有的打包專案
- defualtPublishConfig:預設是release。使用參考
- dexOptions:Dex可選項引數。
- externalNativeBuild:native編譯支援。參考
- flavorDimensionList:
- generatePureSplits:是否拆成多個APK
- jacoco:JaCoCo可選項引數
- lintOptions:Lint工具可選項引數
- ndkDirectory:ndk目錄(一般在local.properties中)
- packagingOptions:packaging的可選引數
- productFlavors:專案所有flavor
- publishNonDefualt:不僅僅使用預設的publish artifacts。可參考defualtPublishConfig。
- resourcePrefix:建立新資源時使用的字首。
- sdkDirectory:sdk目錄(一般在local.properties中)
- signingConfigs:簽名檔案的可選項引數
- sourceSets:資原始檔目錄指定(Android中有自己的AndroidSourceSets,這個一般用於assets,jin等目錄)
- splits:splits型別。
- testBuildType:測試構建型別
- testOptions:測試可選項引數
- testVariants:測試變體
- unitTestVariants:單元測試變體
- variantFilter:變體過濾器
加粗的表示DSL語言的閉包
如:
- 1
- 1
AppExtension的方法:
- flavorDimensions(dimension):指定flavor名稱
- useLibraray(name):請求使用一個lib庫
- useLibrary(name,required):與上面解釋一樣。
AppExtension的配置閉包(Configration blocks)
與app中build.gradle中android{}一樣,程式碼中由AppExtension類表示。其他的配置閉包也一樣。
- aaptOptions{}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- adbOption{}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- buildTypes{}
buildTypes{}對應的是BuildType類
buildTypes的屬性:
1.applicationIdSuffix:應用id字尾(給Applica)
2.consumerProguardFiles:混淆檔案包含在arr包中。
3.debuggable:是否生成一個debug的apk
4.embedMicroApp:可穿戴裝置app是否可以使用這個編譯型別
5.javaCompileOption:Java編譯配置引數
6.jniDebuggable:這個編譯型別的配置是否可以與debuggable的native程式碼生成一個apk
7.manifestPlaceholders:清單佔位符
8.minifyEnabled:是否縮小
9.multiDexEnabled:是否拆成多個Dex
10.multiDexKeepFile:指定文字檔案編譯進主Dex檔案中
11.multiDexKeepProguard:指定混淆檔案編譯進主Dex檔案中
12.name:build type的名字
13.proguardFiles:混淆檔案
14.pseudoLocalesEnabled:是否生成偽現場apk(如果沒有提供混淆規則檔案,則設定預設的混淆規則檔案(SDK/tools/proguard/proguard-android.txt))
15.renderscriptDebuggable:使用RenderScript編譯器的優化級別。
16.shrinkResources:是否去除未利用的資源,預設false,表示不去除。
17.signingConfig:簽名配置
18.testCoverageEnabled:測試覆蓋率是否被啟用。
19.useJack:過時
20.versionNameSuffix:版本名稱字尾
21.zipAlignEnable:是否使用zipalign工具壓縮。
------------------------------------------------------
buildType的方法:
1.buildConfigField(type,name,value):新增一個變數生成BuildConfig類。
2.consumeProguardFile(proguardFile):新增一個混淆檔案進arr包。
3.consumeProguardFile(proguardFiles):新增混淆檔案進arr包。
4.externalNativeBuild(action):配置本地的build選項。
5.initWith:複製這個build型別的所有屬性。
6.proguardFile(proguardFile):新增一個新的混淆配置檔案。
7.proguradFiles(files):新增新的混淆檔案
8.resValue(type,name,value):新增一個新的生成資源
9.setProguardFiles(proguardFileIterable):設定一個混淆配置檔案。
------------------------------------------------------------
buildType用法:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
zipAlignEnabled true
debuggable false
//...
}
debug{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
zipAlignEnabled true
debuggable true
//...
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- compileOptions{}
compileOptions{}對應的是CompileOptions
CompileOptions的屬性:
1.encoding:Java原始檔的編碼格式
2.incremental:是否應該使用Java編寫的Gradle新的增量模型
3.sourceCompatibility:指定編譯編譯.java檔案的jdk版本
4.targetCompatibility:確保class檔案與targetCompatibility指定版本,或者更新的java虛擬機器相容
不太常用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- dataBinding{}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- defualtConfig{}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
如果專案中包含多個Module,可以將共有的minSdkVersion和targetSdkVersion抽取到Project中的build.gradle檔案中。具體細節下一章節。
- dexOptions{}
dexOptions{}對應的是DexOptions
DexOptions屬性:
1.additionalParameters:給dx新增一系列附加的引數
2.javaMaxHeapSize:當呼叫dx時指定-Xmx值。
3.jumboMode:使用jumbo(龐大的)模式
4.keepRuntimeAnnotatedClasses:保持所有類中的執行時的註解在主Dex中。
5.maxProcessCount:可以使用Dex的最大併發程序數。預設為4。
6.optimize:執行在dx編譯器是否有optimize標記。
7.preDexLibraries:是否預先dex庫,它可以改善增量的生成,但是在clear build可能會變慢
8.threadCount:當dx執行時使用的執行緒的數量。預設4個。
dexOptions{}的用法:
dexOptions {
preDexLibraries false
javaMaxHeapSize "4g"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- externalNativeBuild{}
externalNativeBuild{}對應的是ExternalNativeBuild
ExternalNativeBuild的屬性:
1.cmake:CMake工具編譯選項。
2.ndkBuild:ndk-build選項。
在externalNativeBuild{}中有2個模組,cmake{}和ndkBuild{}模組
------------------------------------------------
cmake{}對應的是CmakeOptions
CmakeOption的屬性:
1.path:你的CmakeLists.txt編譯指令碼的相對路徑。
--------------------------------------------------
ndkBuild{}對應的是NdkBuildOptions
NdkBuildOptions的屬性:
1.path:你的Android.mk檔案的相對路徑。
--------------------------------------------------
externalNativeBuild{}的用法:
externalNativeBuild{
ndkBuild{
path file("src\\main\\jni\\Android.mk")
}
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- jacoco{}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- lintOptions{}
lintOptions{}對應於LintOptions
LintOptions的屬性:
1.abortOnError:如果發現錯誤,lint工具是否應該退出這個程式。true表示退出。
2.absolutePaths:是否在輸出錯誤的時候,lint應該展示出