- 公開日:2016年03月06日
記事概要
androidのアプリ開発で発生したError:Execution failed for task ':app:dexDebug'エラーの修正方法を記載した記事です。
(この記事はJavaプログラミングでもさらに詳しく掲載予定です。)
環境
- android sdk 23
- Build Tools, Revision 23.0.2
- com.google.android.gms:play-services:8.4.0
事象
Androidアプリで利用しているGoogle Play Servicesのバージョンを8.3.0から8.4.0に更新しました。その後、gradleでビルドした時にError:Execution failed for task ':app:dexDebug'が発生した。
変更前
{project_folder}/build.gradle
dependencies {
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.android.support:support-v4:23.1.0'
compile 'com.google.android.gms:play-services:8.3.0'
compile 'com.google.code.gson:gson:2.3'
compile files('libs/twitter4j-core-4.0.2.jar')
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
compile 'com.android.support:appcompat-v7:23.0.0'
compile project(':libraries:facebook')
compile 'com.android.support:cardview-v7:23.0.0'
compile 'com.android.support:recyclerview-v7:23.0.0'
compile 'com.android.support:design:23.0.0'
}
変更後
{project_folder}/build.gradle
dependencies {
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.android.support:support-v4:23.1.0'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.code.gson:gson:2.3'
compile files('libs/twitter4j-core-4.0.2.jar')
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
compile 'com.android.support:appcompat-v7:23.0.0'
compile project(':libraries:facebook')
compile 'com.android.support:cardview-v7:23.0.0'
compile 'com.android.support:recyclerview-v7:23.0.0'
compile 'com.android.support:design:23.0.0'
}
発生箇所
android studioを使ったgradleビルド時。
エラー原因
Androidアプリでメソッド数が64k(65536)を超えるとビルド時やインストール時にエラーになる。このメソッド数はライブラリも含めてカウントされる。
つまり、Google Play Servicesのバージョンを8.3.0から8.4.0にあげたことにより、Androidアプリ全体のメソッド数が64k(65536)を超えてしまったために発生した。
修正方法
修正方法は以下のように複数あります。
- メソッドを減らす。
- proguardを使用する
- multidex supportを利用する
ここではmultidex supportで解決する方法を選択します。
変更後
{project_folder}/build.gradle
defaultConfig {
// something
// Enabling multidex support.
multiDexEnabled true
}
上記の変更でgradleビルドが可能になります。
また、Google Play Servicesは利用するライブラリだけをビルドすることもできます。修正する時間があればその方が良い選択です。現在のGoogle Play Servicesは全てのライブラリを導入すると容量が増えるので、必要なライブラリだけに絞る方が良いです。
結論
dexについて理解が浅い場合は、簡易的な修正をするだけでなく、この機会に学んでおくことをオススメします。
以上です。
PICK UP
0 件のコメント:
コメントを投稿