こんばんは。
ビルドしているとある日突然、エラーとなりました。
Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
単一の DEX ファイル内で参照できるメソッドの総数が 65,536 に制限されているそうです。
このエラーに単純に対応するのなら、MultiDexについて書かれている、以下を参照してください。
https://developer.android.com/studio/build/multidex.html?hl=ja
しかし、ちょっと待ってください!!
本当にメソッドの総数が65,536を超えるほどに、コーディングしたのでしょうか。
私は、電卓を作成したときでさえ、上記エラーとなってしまいました。
そのときは、疑問を持ちつつ、MultiDexの対応をしました。
電卓ほどの簡単なプログラムでさえ、MultiDexの対応をする必要があることに疑問を持っていたのです。
そもそも、自分ではそんなにコーディングしていません。参照しているライブラリで、65,536を超えていたのです。
例えば、Google Play Serviceを以下のようにbuild.gradleに設定してしまうと、65,536を超えます。
使いたいライブラリだけ参照するようにすれば、参照メソッド数を抑えられます。
例えば、Google DRIVEを使いたい場合、以下のようにすればよいです。
Google Play Serviceは以前は分かれていなかったそうですが、今は、分かれています。
詳しくは、以下を参照してください。
https://developers.google.com/android/guides/setup
選別せずに、Google Play Serviceを丸ごと設定し、MultiDexを設定していると、当然、apkファイルが大きくなってしまいます。
ビルドに時間がかかり、Debug時等のInstallで時間がかかり、時間の無駄です。
いまのところ、本棚もMultiDex対応せずに済んでいます。
0 件のコメント:
コメントを投稿