升級SDK Build-tools 23.0.2之後會與Multidex發生衝突

當升級SDK Platform API 23之後,發現已經有Build-tools Version 23.0.2,想說就順便升級一下,結果就發生...
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/java'' finished with non-zero exit value 3

查詢的結果發現是與Multidex發生衝突了。由於之前在Build-tools 22.0.1就已經有使用了Multidex了,因此建議如果有要使用Multidex就先不要把Build-tools升級到23.0.2,就用Build-tools 22.0.1就好。在此提供升級SDK為23且可以使用Multidex在gradle的設定:
android {
    compileSdkVersion 23
    buildToolsVersion '22.0.1'

    defaultConfig {
        applicationId "com.ingree.cwwebsite"
        minSdkVersion 15
        targetSdkVersion 23

        // Enabling multidex support.
        multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.1'
}

雖然在Multidex的Google官方文件中提到把MultiDexApplication加到manifest的application裡:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>


但在實作過程,常常已經有自訂Application來存放資料了
public class MyApplication extends Application {
    
    @Override
    public void onCreate() {
        super.onCreate();
    }
}


於是將自訂的Application改成:
public class MyApplication extends MultiDexApplication {
    
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(getApplicationContext());
    }
}


再把Manifest改成:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name=".MyApplication">
        ...
    </application>
</manifest>

於是就可以繼續使用自訂的Application與MultiDex共存了

留言

這個網誌中的熱門文章

Mac安裝JDK後仍出現沒有runtime的錯誤 No Java runtime present, requesting install

Android使用Callback做為傳遞資料/通知的方法

如何實作從API抓取資料顯示在列表頁(ListView)上