Android Studioでビルドした時に、
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
っていうが出て困った。
なんとか解決したので、メモ
参考
- Building Apps with Over 65K Methods | Android Developers
- android - Unable to execute dex: method ID not in [0, 0xffff]: 65536 - Stack Overflow
- Version Compatibility - Android Tools Project Site
手順
Android Studioのアップデート
Canaryチャンネルから最新版をダウンロードする
ここでCanaryチャンネルを選択する
ここまで行ってから、再度「Check for Update」を選択するとAndroid Studioのアップデートが行えるようになる。
2014年11月16日の時点では0.9.3が最新版となる
Gradleのアップデート
Android Studioをアップデートすれば、勝手にGradle
はアップデートしてくれる
gradle-wrapper.propertiesのdistributionUrl
でgradle-2.1-all.zip
が指定してあれば良い
distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip
Android Gradle Pluginのアップデート
gradle-2.1
を使うためにはAndroid Gradle Plugin
をアップデートする必要がある
build.gradleで0.14.+
が指定してあれば良い
dependencies {
classpath 'com.android.tools.build:gradle:0.14.+'
}
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.Application
をandroid.support.multidex.MultiDexApplication
に変更し、
attachBaseContext
をOverride
する
public class App extends MultiDexApplication {
...
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
これでとりあえず出来た。
必要無さそう
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
}
としてみたり、いろいろやったが、最終的にこの辺りを削除しても問題なかった
所感
もっと良い解決策ありそう