LoginSignup
22

More than 5 years have passed since last update.

DexIndexOverflowExceptionと戦った話

Last updated at Posted at 2014-11-16

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
}

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

所感

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22