web-dev-qa-db-ja.com

Androidコンパイルが遅い(Eclipseを使用)

.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つだけなので、ここで問題が発生したと思います。

コンパイル速度を向上させるために何ができますか?

33
alex2k8

ここには誤解があると思います。あなたが言うように、変更されたクラスだけが再コンパイルされます(数ミリ秒でEclipseによって)。ただし、その後、ADTプラグインはコンパイルされたすべてのクラスを受け取り、それをdxツールを介してDalvikのバイトコード形式に変換します。このプロセスの出力は、参照されたライブラリからのクラスを含む、アプリケーション内のすべてのクラスを含む単一ファイルclasses.dexです。この最後の「変換」ステップは、最適化が非常に不十分であるため、時間がかかるステップです。ADTプラグインは何もキャッシュせず、ビルドごとにすべてのクラスを再変換するだけです(非常に遅いです)。中規模から大規模のプロジェクトの場合、これは非常に苛立たしいものになります... Googleが将来のADT/SDKリリースでそれを改善することを願っています。

55
lencinhaus

もう1つの回避策は次のとおりです。

  • Android Package Builder(project#Properties#Buildersを右クリック)を無効にします
  • aPKのビルドとデプロイにantを使用する

詳細については、 Android-workaround-for-slow-building-workspace-problem-in-Eclipse を参照してください。

9
oae

ADT 21pre-dexすべてのライブラリ。つまり、通常のコンパイルでは、プロジェクトの出力を再デキシングするだけで(高速)、結果を事前にデキシングされたライブラリとマージします(かなり高速)。

4
Xavier Ducrohet

Eclipseで使用できるメモリを増やすと、大きな効果があるようです。次のように起動してみてください。

Eclipse -vmargs -Xms1024m -Xmx2048m
0
iceheart

保存するたびに、Eclipseパッケージとすべてのファイルをデクシングします。ただし、保存するたびにapkでアプリをデプロイする必要がないため、これは必要ありません。

とにかく、この問題の鍵はオプションのチェックを外すことです:

「エクスポートまたは起動するまで、パッケージ化とデキシングをスキップします。(ファイル保存時の自動ビルドを高速化します。)」

内部"ウィンドウ->設定-> Android->ビルド"

これで問題が解決します。

乾杯

0
Marco HC

Alex2k8が言及したように、私は詳細出力を有効にしました。犯人はAdMobjarファイルでした。

ADT22.0を使用しています。私のアプリケーションにはAdMobが含まれており、実行中またはデバッグ中のステップで、admobjar内のクラスファイルがdexファイルに変換されます。これは非常に低速でした。

Admobコードとjarをプロジェクトから一時的に削除しましたが、ビルドプロセスは正常に戻りました。

0
Vysakh Prem