.Javaファイルを変更してビルドすると、コンパイルに16秒かかります。なぜこんなに遅いのかわからない!?
Andoroidの詳細出力を有効にしました。
Window > Preferences > Android > Build output > Verbose.
結果の出力(コンソール> Android)は次のとおりです。
[19:46:10] Refreshing resource folders.
[19:46:10] Starting incremental Pre Compiler: Checking resource changes.
[19:46:10] Nothing to pre compile!
[19:46:10] Starting incremental Package build: Checking resource changes.
[19:46:10] ignored resource ...\bin\.\classes.dex
[19:46:10] processing ...\A.class
[19:46:10] processing ...\B.class
...
[19:46:21] processing com/google/inject/util/Providers.class...
[19:46:21] processing com/google/inject/util/Types.class...
[19:46:24] Using default debug key to sign package
[19:46:24] Packaging ...\bin\resources.ap_
[19:46:24] Packaging classes.dex
...
[19:46:25] Packaging ...\annotations.jar
[19:46:25] Build Success!
[19:46:25] Refreshing resource folders.
[19:46:25] Starting incremental Pre Compiler: Checking resource changes.
[19:46:26] Nothing to pre compile!
.classファイルの「処理」には14秒かかりました。そして、リンクされたすべての.jarファイルからであっても、すべてのファイルを「処理」しました。変更された.Javaファイルは1つだけなので、ここで問題が発生したと思います。
コンパイル速度を向上させるために何ができますか?
ここには誤解があると思います。あなたが言うように、変更されたクラスだけが再コンパイルされます(数ミリ秒でEclipseによって)。ただし、その後、ADTプラグインはコンパイルされたすべてのクラスを受け取り、それをdxツールを介してDalvikのバイトコード形式に変換します。このプロセスの出力は、参照されたライブラリからのクラスを含む、アプリケーション内のすべてのクラスを含む単一ファイルclasses.dexです。この最後の「変換」ステップは、最適化が非常に不十分であるため、時間がかかるステップです。ADTプラグインは何もキャッシュせず、ビルドごとにすべてのクラスを再変換するだけです(非常に遅いです)。中規模から大規模のプロジェクトの場合、これは非常に苛立たしいものになります... Googleが将来のADT/SDKリリースでそれを改善することを願っています。
もう1つの回避策は次のとおりです。
詳細については、 Android-workaround-for-slow-building-workspace-problem-in-Eclipse を参照してください。
ADT 21pre-dexすべてのライブラリ。つまり、通常のコンパイルでは、プロジェクトの出力を再デキシングするだけで(高速)、結果を事前にデキシングされたライブラリとマージします(かなり高速)。
Eclipseで使用できるメモリを増やすと、大きな効果があるようです。次のように起動してみてください。
Eclipse -vmargs -Xms1024m -Xmx2048m
保存するたびに、Eclipseパッケージとすべてのファイルをデクシングします。ただし、保存するたびにapkでアプリをデプロイする必要がないため、これは必要ありません。
とにかく、この問題の鍵はオプションのチェックを外すことです:
「エクスポートまたは起動するまで、パッケージ化とデキシングをスキップします。(ファイル保存時の自動ビルドを高速化します。)」
内部"ウィンドウ->設定-> Android->ビルド"
これで問題が解決します。
乾杯
Alex2k8が言及したように、私は詳細出力を有効にしました。犯人はAdMobjarファイルでした。
ADT22.0を使用しています。私のアプリケーションにはAdMobが含まれており、実行中またはデバッグ中のステップで、admobjar内のクラスファイルがdexファイルに変換されます。これは非常に低速でした。
Admobコードとjarをプロジェクトから一時的に削除しましたが、ビルドプロセスは正常に戻りました。