Dex エラーのはじめの一歩の対処法 - Android


 

以下の様なメッセージが出た時、どう対処すればよいかわからないと思います。

Unable to execute dex: method ID not in [0, 0xffff]: 65536


multi dex対応すれば良いんでしょ となる前に、
それ必要なくないですか?というケースも有ると思うので
ちょっと一旦落ち着いて整理しようと思います。


その時の対処法を考える前に始めにちょっと、

dexとは?

実質はJavaのバイトコードです。 それを レジスタ型に変換(モバイルデバイス用にカスタマイズし、容量を減らし、高速化)させたものです。  

dxを JavaCodeにし、Java -p で 逆コンパイルもできます。

アプリのパッケージ(apk)も jarなどのパッケージも 実質それをzip圧縮したものです。


Android徹底解説---内部構造,移植,開発 - Androidの仕組みを知る(2):ITpro -

 

エラーの直接的な意味は


上記のエラーの示すところは、1dexあたり、約65Kのメソッドエントリしかもてません。
という仕様になっています。

つまりメソッド数が 6万以上ありすぎや~~という警告です。

直接的な対処は

multi dex に対応すればその上限をクリアできます。


multi dexの設定

 

でも少し待ってください!! ほんとうに multi dex化することが正しい選択でしょうか?

multi dex のデメリット

サイズが大きい。

また、multi dex は最近出来た仕様なため、 min sdk もあげないといけません。

つまり、対応可能な携帯が減ってしまうことになります。

 

よくある対処として

内部で作成した メソッド数が6万を超えるのは、相当ありえないです。

1メソッド50行として、 6.5万メソッドは  325万行です。


確かに、multi dex すれば対応できるようになりますが、
直接的にはメソッド数を減らせばクリアできます。

 

おそらく、殆どの人は 広めに拡張ライブラリを入れている可能性があるので、

ライブラリの過不足を確かめると、その上限を超えないで済むと思います。

 

あとは admob などで gms をまるごと入れている場合、必要最低限(ad部分のみ)を入れるだけで対処できます。

例) gms-ad のみ だけにする。

 

参考資料にその懸念点の注意点も書いてあります。 参考にしてください。

Configure Apps with Over 64K Methods | Android Studio


Setting Up Google Play Services  

 

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

134 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です