- 公開日: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 件のコメント:
コメントを投稿