Help us understand the problem. What is going on with this article?

DexIndexOverflowExceptionと戦った話

More than 5 years have passed since last update.

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
}

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

所感

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした