這次出現的問題是

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

 

點我看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/


arrow
arrow
    全站熱搜

    顏澤偉 發表在 痞客邦 留言(0) 人氣()