blog.petitviolet.net

DexIndexOverflowExceptionと戦った話

2014-11-16

QiitaJavaAndroidAndroidStudio

Android Studio でビルドした時に、 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 っていうが出て困った。

なんとか解決したので、メモ

参考

手順

Android Studio のアップデート

Canary チャンネルから最新版をダウンロードする

studio_update_1.png

studio_update_2.png

ここで Canary チャンネルを選択する

studio_update_3.png

ここまで行ってから、再度「Check for Update」を選択すると Android Studio のアップデートが行えるようになる。

2014 年 11 月 16 日の時点では 0.9.3 が最新版となる

studio_update_4.png

Gradle のアップデート

Android Studio をアップデートすれば、勝手にGradleはアップデートしてくれる

gradle-wrapper.properties のdistributionUrlgradle-2.1-all.zipが指定してあれば良い

gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip

Android Gradle Plugin のアップデート

gradle-2.1を使うためにはAndroid Gradle Pluginをアップデートする必要がある build.gradle で0.14.+が指定してあれば良い

build.gradle
dependencies {
    classpath 'com.android.tools.build:gradle:0.14.+'
}

build.gradle の変更

build.gradle
// 最新のbuildToolsを指定
buildToolsVersion '21.1.1'
defaultConfig {
    // 追加
    multiDexEnabled true
}
dependencies {
    // 追加
    compile 'com.android.support:multidex:1.0.0'
}

application の修正

例えば App.java などの

<application
    android:name=".App" ...

のように AndroidManifest.xml のapplicationに指定している java ファイルで 継承しているandroid.app.Applicationandroid.support.multidex.MultiDexApplicationに変更し、 attachBaseContextOverrideする

App.java
public class App extends MultiDexApplication {
    ...

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
}

これでとりあえず出来た。

必要無さそう

build.gradle
afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex'

        // this is optional
        // dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
    }
}
dexOptions {
    preDexLibraries = false
}

としてみたり、いろいろやったが、最終的にこの辺りを削除しても問題なかった

所感

もっと良い解決策ありそう

from: https://qiita.com/petitviolet/items/a1b5b2efea8e2163e1ba