私のチームと私は別のチームから大きなAndroidプロジェクトを継承しました。付属のライブラリを含むアプリケーション全体には、約35000のメソッドがあることが報告されています。ここで、プロトコルバッファを使用する必要があるアプリケーションに新しいサービスを実装する作業があります。64KメソッドのDalvikコンパイラ制限の問題を解決するにはどうすればよいですか?
問題は、必要なすべての.protoファイルを含む生成された.jarファイルが、もう1つの35000メソッドのカップル(70000メソッド)を作成することです。あなたが気づいていない場合、Androidコンパイラには.dexファイルごとに65536メソッドの制限があります。私たちは、その制限を超えて明確であり、私たちは、アプリケーションをコンパイルしようとすると、次のエラーを取得しています
Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
はい、アプリケーションアーキテクチャは、おそらく再構築する必要があるが、それには時間がかかります。今のところ、この問題を一時的に回避するための解決策を見つけようとしています。
提案がありますか?
周りの最も簡単な作業ですアプリにはその多くの方法が含まれています(そして、そのうちのいくつかを取り除くことはできません)。ソリューションはおそらく、アプリケーションを組み立てることができる小さな部分に分割する必要があります別々のdexファイルに変換します。これを行う方法の例については、[this blogpost](http://android-developers.blogspot.se/2011/07/custom-class-loading-in-dalvik.html)を参照してください。 – Michael
Facebookのチームは先日、この正確な問題に関するメッセージを投稿しました。 https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920 – Rawkode
@Rawkode:Facebookの問題は、サイズが「LinearAlloc」が小さかったためでした。古いバージョンのAndroid(froyo、gingerbread)のバッファー。 64Kメソッド参照制限は、Dalvik命令自体に組み込まれています。 – fadden