深入淺出Android Gradle構建系統(四:自定義構建過程之配置manifest)
Android Gradle外掛提供了大量的DSL來自定義構建過程,這篇blog就來講解如何在gradle中配置manifest。
DSL提供了配置以下Manifest條目的功能:
minSdkVersion
targetSdkVersion
versionCode
versionName
applicationId (更加方便有效的包名 -- [參考](http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename))
測試app的包名
Instrumentation test runner
- android {
- compileSdkVersion 19
- buildToolsVersion "19.0.0"
- defaultConfig {
- versionCode 12
- versionName "2.0"
- minSdkVersion 16
- targetSdkVersion 16
- }
- }
android元素中的defaultConfig元素就是我們用來配置Manifest的地方。早期版本的Android外掛使用packageName來配置manifest中的packageName屬性,從0.11.0開始,使用applicationId來代替packageName。這樣可以消除應用的包名(其實就是應用的id)和java的包名之間的混淆。
更強大的是build檔案中描述的配置可以是動態的,比如可以從檔案或者自定義的邏輯中獲取版本名稱。
- def computeVersionName() {
- ...
- }
- android {
- compileSdkVersion 19
- buildToolsVersion "19.0.0"
- defaultConfig {
- versionCode 12
- versionName computeVersionName()
- minSdkVersion 16
- targetSdkVersion 16
- }
- }
注意:不要使用作用域中的getter方法名作為函式名,比如在defaultConfig{}作用域中呼叫getVersionName()將會自動呼叫defaultConfig.getVersionName(),而不會呼叫自定義的方法。
如果某個屬性的值沒有使用DSL設定,這個屬性將會使用某些預設值,下表展示了預設值的處理過程。
屬性名 DSL物件中的預設值 預設值
Property Name | Default value in DSL object | Default value |
versionCode | -1 | value from manifest if present |
versionName | null | value from manifest if present |
minSdkVersion | -1 | value from manifest if present |
targetSdkVersion | -1 | value from manifest if present |
applicationId | null | value from manifest if present |
testApplicationId | null | applicationId + “.test” |
testInstrumentationRunner | null | android.test.InstrumentationTestRunner |
signingConfig | null | null |
proguardFile | N/A (set only) | N/A (set only) |
proguardFiles | N/A (set only) | N/A (set only) |
如果你想在build指令碼中使用自定義的邏輯來查詢這些屬性,第二列中的值就很重要。比如,你可以編寫如下的程式碼:
- if (android.defaultConfig.testInstrumentationRunner == null) {
- // assign a better default...
- }
相關文章
- 深入淺出Android Gradle構建系統(二:專案結構)AndroidGradle
- 深入淺出Android Gradle構建系統(2):專案結構AndroidGradle
- 深入淺出Android Gradle構建系統(一:簡介)AndroidGradle
- 深入淺出Android Gradle構建系統(三:build task)AndroidGradleUI
- 深入淺出Android Gradle構建系統(五:build type)AndroidGradleUI
- 深入淺出Android Gradle構建系統(1):簡介AndroidGradle
- 深入淺出Android Gradle構建系統(3):build taskAndroidGradleUI
- Android 自定義構建型別 BuildTypeAndroid型別UI
- Gradle 與 AGP 構建 API: 配置您的構建檔案GradleAPI
- Gradle for Android ( 構建變體 )GradleAndroid
- [Android、Java]加快gradle構建AndroidJavaGradle
- Zepto自定義模組打包構建
- Android中的Gradle之配置及構建優化AndroidGradle優化
- Android 應用構建速度提升Gradle配置優化AndroidGradle優化
- 用Gradle 構建你的android程式GradleAndroid
- 深入淺出的webpack構建工具---HappyPack優化構建(九)WebAPP優化
- 深入淺出的webpack構建工具---DllPlugin DllReferencePlugin提高構建速度(七)WebPlugin
- vue基於Element構建自定義樹Vue
- 通過Gradle自動實現Android元件化模組構建GradleAndroid元件化
- gradle中的增量構建Gradle
- Gradle之多專案構建Gradle
- 使用CSS自定義屬性構建骨架屏CSS
- Java整合系列:高效構建自定義外掛Java
- 構建自定義元件元件
- Gradle For Android(2)--基礎的定製構建GradleAndroid
- Gradle for Android 第五篇( 多模組構建 )GradleAndroid
- 使用Gradle構建Android應用內測版本GradleAndroid
- Android Gradle基於引數化配置實現差異化構建AndroidGradle
- 深入淺出的webpack4構建工具--webpack4+react構建環境(二十)WebReact
- 面向模式構建系統架構 (轉)模式架構
- gradle構建spring原始碼GradleSpring原始碼
- 使用Gradle構建Java專案GradleJava
- Gradle構建多模組專案Gradle
- OpenHarmony自定義構建函式:@Builder裝飾器函式UI
- Android打包之配置構建變體Android
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (四)GoReactJS
- Android Gradle Groovy自動化構建進階篇AndroidGradle
- Gradle自動實現Android元件化模組構建GradleAndroid元件化