這次出現的問題是
Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
在Android開發的我們
相信很多人都會遇到這個問題
出現的原因是 app 中包含的 method 數量超過 65k (65535 )
這時我們就必需要開啟multiDexEnabled的功能
不過Build的時間就會拉長
開發起來真的很麻煩
//點我看 Android Studio Build 加速
以下為開啟步驟
1. multiDexEnabled 參數設定為 true
android {
defaultConfig {
//method bigger than 65k
multiDexEnabled true
}
2. dependencies 設定
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3. AndroidManifest.xml
第3點有三個方案
我們就依照情況選擇最適合自己的來用吧
3.1 如果你沒有寫自己的 Application class
<application
。。。。。。
android:name
="android.support.multidex.MultiDexApplication">
</application>
3.2 如果你有寫自己的 Application class,Application必需繼承自 MultiDexApplication
public class MyApplication
extends MultiDexApplication {
}
在 AndroidManifest.xml 中套用你自己的 Application
<application
。。。。。。
android:name=".Application.MyApplication">
</application>
3.3或是在任何我們 extends Application 的 class 底下加入這行
Multidex.install(this);
補充:
點我看官方解法Configure Apps with Over 64K Methods
==================================================
這裡分享一個祕密
那就是Google就是這次事件的罪魁禍首啦!!
有加入以下這行的人看過來
compile 'com.google.android.gms:play-services:XX.XX.XX'
在使用 Google Play Service 的時候
絕對不能直接在 gradle 加上上面那行
而是要依照你所需要的功能
來選擇要加入的 Google Service API
這樣可以避免載入過多沒用到的Library造成專案的肥大
此外,如果瘦身之後還是大於65k呢?
那麼就要介紹Dynamic Load apk的概念啦!!!
點我看Dynamic Load apk
P.S.
這裡有二個番外篇
是使用 MultiDex 所引發的問題
有興趣的點標題進去看看吧
Willy's Fish教學筆記』Android Error: java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider:
Willy's Fish教學筆記』Android 錯誤 android.support.multidex不存在
參考資料:
https://developers.google.com/android/guides/setup
https://developer.android.com/studio/build/multidex.html
http://blog.darkwing.co/2016/02/%E9%96%8B%E5%95%9Fmultidexenabled%E6%89%80%E9%80%A0%E6%88%90%E7%9A%84crash/
留言列表