Android Gradle 問題總結(jié)

Android D8 DEX 編譯器

Android Studio 3.1(++) 版本中,將 D8 作為新版本開發(fā)工具默認(rèn)的 Dex 編譯器。那么什么是 D8 呢,D8 與之前的 Dex 打包器有何區(qū)別呢?

安卓項(xiàng)目在打包生成 Apk 安裝文件的過程中,最重要的一步便是將我們所寫的 java 代碼編譯過成 .class 字節(jié)文件再打包轉(zhuǎn)化成一個(gè)或多個(gè) .dex 格式的代碼壓縮文件。這種 dex 文件便是 Android 虛擬機(jī)所能識別、解析并運(yùn)行的程序。

Google 一直在致力于提升 Dex 文件的編譯和運(yùn)行優(yōu)化工作,并開發(fā)出稱之為下一代 dex 編譯器:D8。其實(shí)早在 AS 3.0 Beta 版本中,Google 已經(jīng)引入 D8 的測試使用。直到當(dāng)前 3.1 新版本的發(fā)布,才正式將其作為默認(rèn) Dex 編譯器。

Android Studio 3.1 版本起 gradle 默認(rèn)采用 D8 進(jìn)行編譯, AS 3.1之前版本可以采用 android.enableD8=true 來開啟 D8 編譯,如 3.1 版本或后續(xù)版本禁止 D8 編譯,可以通過在 android.enableD8=false 來禁止 D8

*Google 官網(wǎng)地址

*R8


Android enableAapt2

上線前產(chǎn)品要求替換 啟動(dòng)頁圖片,這是甩過來一張 jpg 格式的圖片,由于整個(gè)工程都是采用 png 格式,所以就在 AS 中動(dòng)態(tài)的修改了圖片的的后綴名稱, 這時(shí)再去編譯就會(huì)甩一個(gè)異常信息給你

Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details

這是需要在 gradle.properties 文件中申明

android.enableAapt2=false

或者在 build.gradle 文件中 buildTypes 節(jié)點(diǎn)中添加

aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false

禁止 Gradle 檢查 png 的合法性

*stackoverflow stackoverflow


android multi dex 64k

隨著產(chǎn)品的不斷完善,代碼量的不斷增加,最后在打包時(shí) android multi dex 64k 方法數(shù)限制就映入眼前了, 關(guān)于解決方法 網(wǎng)上有很多做法,這里列出 Google 官方對 64K 限制的解決方法

*Google 官方對 dex 64k 介紹 {"自備梯子"}

當(dāng)然可以添加混淆來剔除無用的函數(shù),也可以通過 dexOptions 來設(shè)置

dexOptions {
            javaMaxHeapSize "2g"

            additionalParameters += '--multi-dex'

            additionalParameters += '--set-max-idx-number=62000'

            additionalParameters += '--minimal-main-dex'
        }

// 方法超出后生成多個(gè) dex 文件
additionalParameters += '--multi-dex'
// 改變 dex 方法數(shù)上限 這里設(shè)置 62000
additionalParameters += '--set-max-idx-number=62000'
// -main-dex-list指定的所有class會(huì)打包到主dex中

{

這里也可以通過 multidex-config 文件 keep 某一個(gè)類文件到主 dex 文件中

如: multiDexKeepProguard file('multidex-config.txt')

}

additionalParameters += '--minimal-main-dex'

這里可以采用 useDexArchive 來禁用增量dexing

如:

android.useDexArchive=false

最后可以使用 FaceBook redex 來進(jìn)行壓縮, 關(guān)于 redex 優(yōu)化 facebook 文檔上有詳細(xì)的介紹

*FaceBook develop

*Github 地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • 這一章主要針對項(xiàng)目中可以用到的一些實(shí)用功能來介紹Android Gradle,比如如何隱藏我們的證書文件,降低風(fēng)險(xiǎn)...
    acc8226閱讀 7,969評論 3 25
  • 說明 本文主要介紹和Gradle關(guān)系密切、相對不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,157評論 1 62
  • maybe cause u, i will not be love in anyone.I want to see...
    風(fēng)狼芊兒閱讀 279評論 0 0
  • .清晨,當(dāng)陽光照射進(jìn)屋里的第一縷日光輕撫過我的雙眼,舒服的伸個(gè)懶腰,像是慵懶的貓兒一樣。揉一揉惺忪的雙眼,開啟了一...
    林姝邇閱讀 225評論 0 2

友情鏈接更多精彩內(nèi)容