目錄
1、前言
2、dexOptions 的結構簡析
3、dexOptions的屬性
4、寫在最後
java
今天分享 dexOptions 配置,這個配置用於控制咱們代碼編譯打包成dex的細節。android
dexOptions 會映射爲 com.android.build.gradle.internal.dsl.DexOptions
類,繼承結構以下:git
dexOptions 用於打包時的代碼分包,因此咱們須要的是進行apk的打包編譯。github
// app:clean 爲了先清空以前的文件
// app:aR 進行編譯 release 包
// mac 使用 ./gradlew
// window 使用 gradlew
./gradlew app:clean app:aR
複製代碼
dx --help
查看支持的命令和描述。咱們都知道 64k 的問題,解決的方案就是將代碼分紅多個dex包,在 buildTypes 一篇中已經有介紹過如何來實現這一方案。但在這裏又涉及到一個問題,由於apk在啓動的時候,會先加載主dex(即 classes.dex),如今只想將咱們須要的文件放在主dex中,其他的放在次dex中,就能夠藉助 dexOptions 來完成。bash
buildTypes {
debug {
// 開啓 dex 分包
multiDexEnabled true
// 設置將須要保存至主dex的文件
multiDexKeepFile file('keep/keep_in_main_dex.txt')
}
}
dexOptions {
additionalParameters '--minimal-main-dex'
}
複製代碼
keep/keep_in_main_dex.txt 內容併發
com/zinc/gradlestudy/MainActivity.class
複製代碼
效果圖 app
dexOptions {
// 設置了 2G
javaMaxHeapSize '2048m'
}
複製代碼
2^16
個。但開啓jumboMode 模式,能夠支持到 2^32
。可是值得注意的是,這個並非 64K方法數量限制問題的一種方案。dexOptions {
jumboMode true
}
複製代碼
java.lang.reflect.Field.getDeclaredAnnotations
致使沒法獲取崩潰問題。dexOptions {
keepRuntimeAnnotatedClasses false
}
複製代碼
maxProcessCount*javaMaxHeapSize
。dexOptions {
maxProcessCount 4
}
複製代碼
dexOptions {
preDexLibraries true
}
複製代碼
dexOptions {
threadCount 4
}
複製代碼
Gradle項目地址:Github傳送門 (若是對你有所幫助或喜歡的話,賞個star吧,碼字不易,請多多支持)ide
本篇博文的 dexOptions 配置,請進傳送門post
若是以爲本篇博文對你有所啓發或是解決了困惑,給個贊或關注我呀,小盆友會繼續分享更多的優質文章。gradle
或是請我喝杯咖啡吧,小盆友會更加信心百倍的寫下去 zincPay.jpg