深入淺出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中的資原始檔
相關文章
- 深入淺出Android Gradle構建系統(三:build task)AndroidGradleUI
- 深入淺出Android Gradle構建系統(3):build taskAndroidGradleUI
- 深入淺出Android Gradle構建系統(一:簡介)AndroidGradle
- 深入淺出Android Gradle構建系統(1):簡介AndroidGradle
- 深入淺出Android Gradle構建系統(二:專案結構)AndroidGradle
- 深入淺出Android Gradle構建系統(2):專案結構AndroidGradle
- 深入淺出Android Gradle構建系統(四:自定義構建過程之配置manifest)AndroidGradle
- 深入淺出Android訊息系統之一Android
- Gradle for Android 第五篇( 多模組構建 )GradleAndroid
- 深入淺出的webpack構建工具---PostCss(五)WebCSS
- 華為雲釋出分散式編譯構建系統CodeArts Build分散式編譯UI
- Android小知識-深入淺出Android系統啟動流程(上)Android
- Android小知識-深入淺出Android系統啟動流程(下)Android
- 深入淺出UML類圖(五)
- Gradle for Android ( 構建變體 )GradleAndroid
- [Android、Java]加快gradle構建AndroidJavaGradle
- 深入淺出Android Support AnnotationsAndroid
- 理解 Android Build 系統AndroidUI
- Tomcat深入淺出——Filter與Listener(五)TomcatFilter
- Redis雲端架構深入淺出Redis架構
- 深入淺出的webpack構建工具---HappyPack優化構建(九)WebAPP優化
- 深入淺出的webpack構建工具---DllPlugin DllReferencePlugin提高構建速度(七)WebPlugin
- 用Gradle 構建你的android程式GradleAndroid
- Gradle for Android系列之二 build.gradle檔案GradleAndroidUI
- 深入淺出Android BufferQueue-上Android
- android Binder機制深入淺出Android
- 唯快不破!華為雲釋出分散式編譯構建系統CodeArts Build分散式編譯UI
- 前端筆記之React(五)Redux深入淺出前端筆記ReactRedux
- 深入淺出FE(十四)深入淺出websocketWeb
- 【深入淺出ES6】解構
- Gradle for Android 第二篇( Build.gradle入門 )GradleAndroidUI
- 用Android SDK Build Tools手動構建APKAndroidUIAPK
- com.android.tools.build:gradle:2.0.0-alpha3 build errorsAndroidUIGradleError
- 每日構建 Daily buildAIUI
- Android開發:build.gradle 配置指南AndroidUIGradle
- Gradle For Android(2)--基礎的定製構建GradleAndroid
- 使用Gradle構建Android應用內測版本GradleAndroid
- 深入淺出Nginx實戰與架構Nginx架構