android.enableD8.desugaring?=?false引發(fā)問(wèn)題解決
問(wèn)題:
Kotlin升級(jí)引起的類找不到情況[其實(shí)跟Kotlin版本無(wú)關(guān)]
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleRegistry; androidx.lifecycle.ProcessLifecycleOwner.<init>(ProcessLifecycleOwner.java:62) androidx.lifecycle.ProcessLifecycleOwner.<clinit>(ProcessLifecycleOwner.java:89) androidx.lifecycle.ProcessLifecycleOwner.init(ProcessLifecycleOwner.java:103) androidx.lifecycle.ProcessLifecycleOwnerInitializer.onCreate(ProcessLifecycleOwnerInitializer.java:38) android.content.ContentProvider.attachInfo(ContentProvider.java:2121) android.content.ContentProvider.attachInfo(ContentProvider.java:2094) android.app.ActivityThread.installProvider(ActivityThread.java:7900) android.app.ActivityThread.installContentProviders(ActivityThread.java:7441) android.app.ActivityThread.handleBindApplication(ActivityThread.java:7334) android.app.ActivityThread.access$2400(ActivityThread.java:308) android.app.ActivityThread$H.handleMessage(ActivityThread.java:2295) ndroid.os.Handler.dispatchMessage(Handler.java:110) android.os.Looper.loop(Looper.java:219) android.app.ActivityThread.main(ActivityThread.java:8347) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleRegistry" on path: DexPathList[[dex file "InMemoryDexFile[cookie=[0, 3991625136]]", zip file "/data/app/com.secoo-4gTkhUPR4gWOZn_7R-7U9A==/base.apk"],nativeLibraryDirectories=[/data/app/com.secoo-4gTkhUPR4gWOZn_7R-7U9A==/lib/arm, /data/app/com.secoo-4gTkhUPR4gWOZn_7R-7U9A==/base.apk!/lib/armeabi-v7a, /system/lib, /hw_product/lib]]
最近公司項(xiàng)目打算升級(jí)kotlin至1.4.10版本, 興致沖沖的修改了版本,緊接著就是兩天的折磨期,程序一直出現(xiàn)ClassNotFoundException或NoClassDefFoundError,而且?guī)缀趺看螆?bào)的不是同一個(gè)類找不到,而是隨機(jī)的。后來(lái)反編譯代碼,查找找不到的類,果然在編譯生成的classs.jar中找不到對(duì)應(yīng)的類,所以懷疑是分包引起的異常。
開始逛國(guó)內(nèi)外各大網(wǎng)站,還是沒找到原因。最后使用最原始的方案,注掉一段段代碼試,果然在堅(jiān)持下,發(fā)現(xiàn)了貓膩,最終找到是因?yàn)轫?xiàng)目根目錄下gradle.properties中的android.enableD8.desugaring = false搞的鬼。
既然找到原因了,那么就開始找扒一扒為什么看似八竿子打不著的兩處修改會(huì)有關(guān)聯(lián)呢?
大致的原因:
kotlin升級(jí)導(dǎo)致引入了大量代碼,這些代碼使得項(xiàng)目達(dá)到一個(gè)臨界值【猜想】,此時(shí)又關(guān)閉了dex包的脫糖處理,導(dǎo)致編譯會(huì)在transforms生成desugar目錄,desugar先進(jìn)行脫糖,然后再通過(guò)D8的編譯器進(jìn)行編譯,此時(shí)會(huì)在desugar目錄中生成大量的jar文件,而如果開啟了android.enableD8.desugaring = true,那么就會(huì)省略了desugar脫糖操作,將脫糖步驟集成進(jìn)D8編譯器,這樣會(huì)省去了desugar目錄中的大量文件。
接下來(lái)我們看看開啟脫糖和關(guān)閉脫糖transforms文件下生成的文件具體信息。
關(guān)閉脫糖的操作

開啟脫糖的操作

如上我們所說(shuō),當(dāng)開啟脫糖時(shí),編譯器生成的編譯文件中沒有desugar及其下的大量文件,直接將脫糖步驟集成進(jìn)了D8編譯器。
另外一點(diǎn):在Android Studio3.1之后版本,gradle默認(rèn)是開啟了脫糖操作的,也就是:
android:enableD8=true android.enableD8.desugaring = true
參考自:
http://www.fzitv.net/article/143221.htm
stackoverflow.com/questions/4…
以上就是android.enableD8.desugaring = false引發(fā)問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于android enableD8解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Could not find com.android.tools.build:gradle:3.0.0
這篇文章主要介紹了在Android Studio升級(jí)時(shí)碰到Could not find com.android.tools.build:gradle:3.0.0問(wèn)題的解決方法,需要的朋友跟隨小編一起看看吧2021-08-08
Android程序報(bào)錯(cuò)程序包org.apache.http不存在問(wèn)題的解決方法
這篇文章主要介紹了Android程序報(bào)錯(cuò)"程序包org.apache.http不存在——Android 6.0已經(jīng)不支持HttpClient" 問(wèn)題的解決方法,感興趣的小伙伴們可以參考一下2016-06-06
Android仿QQ微信實(shí)時(shí)監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài)
這篇文章主要為大家詳細(xì)介紹了Android仿QQ微信實(shí)時(shí)監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android使用第三方庫(kù)實(shí)現(xiàn)日期選擇器
這篇文章主要為大家詳細(xì)介紹了Android使用第三方庫(kù)實(shí)現(xiàn)日期選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
Android 編譯出錯(cuò)版本匹配問(wèn)題解決辦法
這篇文章主要介紹了Android 編譯出錯(cuò) app\build\intermediates\res\merged\debug\values-v23\values-v23.xml 的問(wèn)題解決辦法,需要的朋友可以參考下2017-07-07
Android?自定義來(lái)電秀實(shí)現(xiàn)總結(jié)
這篇文章主要為大家介紹了Android?自定義來(lái)電秀實(shí)現(xiàn)總結(jié)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android實(shí)現(xiàn)文件下載進(jìn)度顯示功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)文件下載進(jìn)度顯示功能,檢測(cè)Android文件下載進(jìn)度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02

