web-dev-qa-db-ja.com

スピードアップAndroid IntelliJでのプロジェクトビルド時間IDEA

IntelliJ IDEA EclipseやADTのようにskip packaging and dexingを設定する方法があるかどうか疑問に思っています。Android DXコンパイラセクションにAdditional VM OptionsフィールドがありますIntelliJ Preferencesでは、これが方法であり、設定方法である可能性があります。IntelliJAndroidプロジェクトビルドを高速化する方法についても、別のヒントをいただければ幸いです。

28
sealskej

Eclipseの設定では、参照している_skip packaging and dexing_の完全な名前はSkip packaging and dexing until export or launch. (Speeds up automatic builds on file save)です。これは、Eclipseのインクリメンタルコンパイルの問題(Eclipseでの開発が遅くなる)に対処するためにADT12以降に追加された機能です。詳細については、 リビジョン12.0.0(2011年7月) および このリンク を確認してください。プロジェクトをデバッグ/実行する場合、どちらに関係なく、パッケージ化とデキシングが基本的なステップであることに注意してください。 IDE(または非)を使用します。 enter image description here

CrazyCoderがコメントで述べたように、IntelliJは Eclipseのようなインクリメンタルコンパイルと問題ペイン をサポートしていません。別の言葉では、ファイルが変更されたときにプロジェクトを自動コンパイルしません。したがって、これはIntelliJの問題でも機能でもありません。

ビルドプロセスのボトルネックは、おそらく他の場所から発生します。中規模プロジェクトでのAFAIKでは、ビルドプロセスに費やされる時間のほとんどは、リソースのコンパイルです(AAPTコマンド、チェックアウト ビルドプロセス図 )。 xdadevelopersの賢い人々がボトルネックを見つけ、AAPTの修正バージョンを作成しました。

http://forum.xda-developers.com/showthread.php?t=1907281

私はそれを自分で使用していますが、Eclipseでは速度の向上が感じられると思います。これはAAPTステップを向上させるだけであり、パッケージング広告ではないことに注意してください。 InteliJを使用している場合は、プロジェクトを頻繁にコンパイルする必要がないため、おそらくあまり役​​に立ちません。

11
yorkw

IntelliJ 12を使用しています。Androidアプリをデプロイして実行し、IntelliJが「プロジェクトを自動的に作成」できるようにしました。有効にするには、設定-> コンパイラに移動し、[プロジェクトを自動的に作成する]をオンにします。同じウィンドウで、「独立したモジュールを並列にコンパイルする」をチェックします。

「プロジェクトを自動的に作成する」を有効にすると、Androidアプリケーションを起動する前に「作成」タスクをスキップできます。 「実行/デバッグ構成」で削除できます。Androidアプリケーションを選択し、「起動前」セクションで「作成」タスクを削除します。

31
Jake Andreu

解決策はありませんが、EclipseとIntelliJの間に大きなコンパイル時間の違いがある理由について説明しています。あるから。外部モジュールまたはライブラリに依存する場合は常に:IntellIJは常にDEXの依存モジュールです。 Eclipseはそれらをキャッシュしているようです。

私も自分のプロジェクトの1つでこの大きな違いを経験しました。いくつかの基本的なタイミングテストを行ったところ、IntellIJで40秒で構築されたプロジェクトは、Eclipseでは20秒しかかからなかったことがわかりました。 IntelliJのステータスExecuting DEXのプロセスに多くの時間が費やされたので、この質問を見つけました。それから私はより徹底的で再現性のある実験をしようとしました、そしてこれは私が見つけたものです。

プロジェクトの設定

  • EclipseのNew Android ApplicationテンプレートからのHelloWorldプロジェクト。
  • AndEngine オープンソースAndroidゲームエンジンプロジェクト*への依存。
  • Eclipse:AndEngineプロジェクトは「Androidライブラリ」として定義されています。 Androidタブの下に参照として追加され、Javaビルドパス/プロジェクトタブの下に必要なプロジェクトが追加されました。
  • IntelliJ:AndEngineは「モジュール」として定義されています。メインモジュールHelloWorldの依存関係として設定し、エクスポートチェックボックスnotをオンにします(重要だとは思いません)。

*)ここでは任意のモジュールを使用できますが、a)かなり大きく、b)Androidモジュールであるため、これは良い例でした。つまり、Androidとしてリンクする必要があります。 _プロジェクトであり、dbmが上記の投稿で示唆しているようにJARとしてだけではありません。

MainActivity.Java(HelloWorldの起動アクティビティ)のonCreateメソッドにログコードを追加しました。これは、AndEngineのメソッドも呼び出し、行もログに記録しました。 (私はSoundManagerのコンストラクターを変更して行を出力し、MainActivity.Javaからコンストラクターを呼び出しました)。これにより、アプリケーションのデプロイがいつ終了し、正しくデプロイされたかを確認できました。

次に、次の変更を行い、各IDEでそれぞれの時間を3回計りました。

  • A:メインモジュールのロギングラインのみを変更しました
  • A + B:メインモジュールとAndEngineモジュールの両方のログ行を変更しました。

標準のストップウォッチを使用して手動でタイミングを調整してから、最も近い秒に切り上げ/切り下げました。いずれの場合も3つのタイミングを実行し、算術平均を計算しました。

結果:

Graphs of IntellIJ vs Eclipse compile and deploy time

注:ビルドプロセス全体で「make」または「refreshingworkspace」を出力するだけなので、Eclipseに「ExecutingDEX」の個別のサブ列を含めませんでした。

Eclipseから実行している場合、メインモジュールを変更するだけで時間を節約できることが数字からわかります。これは予想どおりです。しかし、IntelliJでは、コンパイル時間はどちらの場合も同じです!

結論:

IntelliJは多くの不必要なDEXを行います。これが構成可能かどうかを誰かが知っていれば、[〜#〜] i [〜#〜]が問題の根本原因であると信じていることを解決できると思います。

11
Nilzor

大きな外部JARを(Eclipse)プロジェクトに追加すると、ビルドプロセスが大幅に遅くなるように見えることがあります。

しかし、いつものようにjarファイルを追加する代わりに(Project -> Properties -> Java Build Path -> Libraries -> Add External JARs...)代わりにユーザーライブラリを追加できます(Project -> Properties -> Java Build Path -> Libraries -> Add Library... -> User Library)代わりに、外部JARをこのライブラリに追加します。

これにより、これまでのところ、私の大きなJARのビルド時間の問題は常に解決されています。賢い人もなぜそうなのか説明してくれましたが、残念ながらその説明をよく覚えていません。私はIntelliJの経験がありません-これがあなたのケースにまったく当てはまるかどうかはわかりませんが、それでも、ここからさらにアイデアを得ることができます...

0
dbm