深入淺出Android Gradle構建系統(五:build type)
預設情況下,Android外掛自動為專案構建一個debug和一個release版本的應用。這兩個版本的不同主要體現在在非開發機上的除錯功能以及APK的簽名方式。debug版本使用一個用公開的name/password建立的key來簽名(這樣構建的時候就不需要提示輸入密碼了)。release版本在構建的時候不會進行簽名,而是稍後在做。
這個可以使用gradle中的BuildType物件來進行配置。預設情況下,2個BuildType的例項會被建立,一個debug,一個release。Android外掛允許自定義這兩個例項,當然你也可以建立其他的build type。配置由buildTypes這個DSL來完成:
上面的程式碼完成了下列配置:
1.配置預設的debug Build Type
設定debug版本的報名為<應用id>.debug,這樣就可以在裝置上同時安裝debug和release版本了。
2.建立一個新的BuildType,名字是jnidebug,同時配置它是複製自debug Build Type。
配置jnidebug開啟debug版本的JNI元件,新增一個不同的包名字尾。
建立一個新的的Build Types非常簡單,只需要在buildTypes下面通過呼叫initWith或者使用閉包新增一個新的元素。下表是可以配置的屬性以及預設值:
屬性明 debug版本預設值 release或其他版本 預設值
debuggable true false
jniDebuggable false false
renderscriptDebuggable false false
renderscriptOptimLevel 3 3
applicationIdSuffix null null
versionNameSuffix null null
signingConfig android.signingConfigs.debug null
zipAlignEnabled false true
minifyEnabled false false
proguardFile N/A (set only) N/A (set only)
proguardFiles N/A (set only) N/A (set only)
出了這些屬性,Build Types還可以用來配置程式碼和資原始檔。針對每一個Build Type,一個新的對應的sourceSet會被建立,這個sourceSet使用一個預設的路徑src/<buildtype名字>/。這就意味著Build Type的名字不能是main或者androidTest(這是由外掛強制的),同時每個Build Type的名字必須是唯一的。
和其他的source sets一樣,Build Type中的source set路徑也是可以配置
另外,對每一個Build Type,一個新的assemble<BuildType名字>任務會被建立.前面我已經講過assembleDebug和assembleRelease任務了,這裡就可解釋這兩個任務的來源了.當debug和release Build Types被預先建立的時候,他們對應的assemble任務也會被一起建立.
上面的build.gradle程式碼片段還會建立一個assembleJnidebug任務,assemble任務也會新增對assembleJniDebug任務的依賴,正如它對assembleDebug和assembleRelease任務的依賴一樣。
小提示:你可以使用 gradle aJ命令來執行assembleJnidebug任務。
可能是使用場景:
僅在debug模式下使用的許可權,release模式不使用。
debug時使用不同的實現
debug模式使用不同的資源(比如當一個資源的值依賴於簽名的時候)
BuildType中的 程式碼/資原始檔 將會被按照下列方式處理:
manifest配置會被merge到app manifest中
程式碼不會被merge,會被當做另一個程式碼目錄(source folder)來使用
資原始檔會覆蓋同名的main中的資原始檔
這個可以使用gradle中的BuildType物件來進行配置。預設情況下,2個BuildType的例項會被建立,一個debug,一個release。Android外掛允許自定義這兩個例項,當然你也可以建立其他的build type。配置由buildTypes這個DSL來完成:
- android {
- buildTypes {
- debug {
- applicationIdSuffix ".debug"
- }
- jnidebug.initWith(buildTypes.debug)
- jnidebug {
- packageNameSuffix ".jnidebug"
- jniDebuggable true
- }
- }
- }
1.配置預設的debug Build Type
設定debug版本的報名為<應用id>.debug,這樣就可以在裝置上同時安裝debug和release版本了。
2.建立一個新的BuildType,名字是jnidebug,同時配置它是複製自debug Build Type。
配置jnidebug開啟debug版本的JNI元件,新增一個不同的包名字尾。
建立一個新的的Build Types非常簡單,只需要在buildTypes下面通過呼叫initWith或者使用閉包新增一個新的元素。下表是可以配置的屬性以及預設值:
屬性明 debug版本預設值 release或其他版本 預設值
debuggable true false
jniDebuggable false false
renderscriptDebuggable false false
renderscriptOptimLevel 3 3
applicationIdSuffix null null
versionNameSuffix null null
signingConfig android.signingConfigs.debug null
zipAlignEnabled false true
minifyEnabled false false
proguardFile N/A (set only) N/A (set only)
proguardFiles N/A (set only) N/A (set only)
出了這些屬性,Build Types還可以用來配置程式碼和資原始檔。針對每一個Build Type,一個新的對應的sourceSet會被建立,這個sourceSet使用一個預設的路徑src/<buildtype名字>/。這就意味著Build Type的名字不能是main或者androidTest(這是由外掛強制的),同時每個Build Type的名字必須是唯一的。
和其他的source sets一樣,Build Type中的source set路徑也是可以配置
- android {
- sourceSets.jnidebug.setRoot('foo/jnidebug')
- }
另外,對每一個Build Type,一個新的assemble<BuildType名字>任務會被建立.前面我已經講過assembleDebug和assembleRelease任務了,這裡就可解釋這兩個任務的來源了.當debug和release Build Types被預先建立的時候,他們對應的assemble任務也會被一起建立.
上面的build.gradle程式碼片段還會建立一個assembleJnidebug任務,assemble任務也會新增對assembleJniDebug任務的依賴,正如它對assembleDebug和assembleRelease任務的依賴一樣。
小提示:你可以使用 gradle aJ命令來執行assembleJnidebug任務。
可能是使用場景:
僅在debug模式下使用的許可權,release模式不使用。
debug時使用不同的實現
debug模式使用不同的資源(比如當一個資源的值依賴於簽名的時候)
BuildType中的 程式碼/資原始檔 將會被按照下列方式處理:
manifest配置會被merge到app manifest中
程式碼不會被merge,會被當做另一個程式碼目錄(source folder)來使用
資原始檔會覆蓋同名的main中的資原始檔
相關文章
- Gradle for Android ( 構建變體 )GradleAndroid
- Android小知識-深入淺出Android系統啟動流程(上)Android
- Android小知識-深入淺出Android系統啟動流程(下)Android
- 深入淺出的webpack構建工具---PostCss(五)WebCSS
- 用Gradle 構建你的android程式GradleAndroid
- 華為雲釋出分散式編譯構建系統CodeArts Build分散式編譯UI
- Android開發:build.gradle 配置指南AndroidUIGradle
- gradle升級到4.1後出現的Could not resolve com.android.tools.build:gradle:3.0.1GradleAndroidUI
- 深入淺出的webpack構建工具---HappyPack優化構建(九)WebAPP優化
- 深入淺出Android BufferQueue-上Android
- Gradle For Android(2)--基礎的定製構建GradleAndroid
- Tomcat深入淺出——Filter與Listener(五)TomcatFilter
- 用Android SDK Build Tools手動構建APKAndroidUIAPK
- 深入淺出的webpack構建工具---DllPlugin DllReferencePlugin提高構建速度(七)WebPlugin
- Android中的Gradle之配置及構建優化AndroidGradle優化
- Android 應用構建速度提升Gradle配置優化AndroidGradle優化
- Android Gradle Groovy自動化構建進階篇AndroidGradle
- Android Build系統要點總結AndroidUI
- 唯快不破!華為雲釋出分散式編譯構建系統CodeArts Build分散式編譯UI
- Android啟動過程剖析-深入淺出Android
- gradle的build.gradle詳解GradleUI
- Android學習筆記之build.gradle檔案Android筆記UIGradle
- 深入淺出FE(十四)深入淺出websocketWeb
- Gradle自動實現Android元件化模組構建GradleAndroid元件化
- Redis雲端架構深入淺出Redis架構
- 【深入淺出ES6】解構
- 前端筆記之React(五)Redux深入淺出前端筆記ReactRedux
- Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.3/gradle-3HTTPGoAndroidMavenUIGradle
- 使用新 Android Gradle 外掛加速您的應用構建AndroidGradle
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (五)GoReactJS
- 深入淺出 Runtime(二):資料結構資料結構
- 深入淺出Nginx實戰與架構Nginx架構
- Android高階進階之路【五】深入剖析Android系統Binder通訊機制Android
- 深入淺出的webpack4構建工具--webpack4+react構建環境(二十)WebReact
- 分散式系統關注點(19)——深入淺出「非同步」分散式非同步
- Gradle之多專案構建Gradle
- gradle構建spring原始碼GradleSpring原始碼
- Gradle構建SpringBoot專案GradleSpring Boot
- gradle中的增量構建Gradle