skip packaging and dexing
EclipseやADTのようにIntelliJIDEAで設定する方法があるかどうか疑問に思っています。Additional VM Options
IntelliJのAndroidDXコンパイラセクションにフィールドがありますPreferences
。おそらくこれが方法であり、設定方法です。IntelliJAndroidプロジェクトのビルドを高速化する方法という別のヒントもいただければ幸いです。
4 に答える
私は IntelliJ 12 を使用しています。IntelliJ が「プロジェクトを自動的に作成」できるようにする Android アプリをデプロイして実行することに成功しました。有効にするには、 [設定] -> [コンパイラ] に移動し、[プロジェクトを自動的に作成する] をオンにします。同じウィンドウで、「独立したモジュールを並行してコンパイルする」をチェックします。
「プロジェクトを自動的に作成する」を有効にすると、Android アプリケーションの起動前に「作成」タスクをスキップできます。「実行/デバッグ構成」で削除できます。Android アプリケーションを選択し、「起動前」セクションで「作成」タスクを削除します。
解決策はありませんが、Eclipse と IntelliJ でコンパイル時間に大きな違いがある理由について説明があります。あるから。外部モジュールまたはライブラリに依存するときはいつでも: IntelIJ は常に DEX の依存モジュールです。Eclipseはそれらをキャッシュしているようです。
私も、あるプロジェクトでこの大きな違いを経験しました。いくつかの基本的なタイミング テストを行ったところ、IntelIJ で 40 秒でビルドされたプロジェクトが、Eclipse では 20 秒しかかからないことがわかりました。IntelliJ のステータスがExecuting DEXであるプロセスに多くの時間が費やされたため、この質問を見つけた方法です。次に、より徹底的で再現性のある実験を行おうとしましたが、これが私が見つけたものです.
プロジェクトのセットアップ
- Eclipseの新しい Android アプリケーションテンプレートからの Hello World プロジェクト。
- AndEngineオープン ソース Android ゲーム エンジン プロジェクト*への依存。
- Eclipse:「Android ライブラリ」として定義された AndEngine プロジェクト。[Android] タブの下に参照として追加され、[Java ビルド パス/プロジェクト] タブの下に必要なプロジェクトが追加されました。
- IntelliJ: AndEngine は「モジュール」として定義されています。メイン モジュール HelloWorld の依存関係として設定し、エクスポート チェック ボックスをオフにします (重要ではないと思います)。
*) ここでは任意のモジュールを使用できますが、a) はかなり大きく、b) は Android モジュールであるため、これは良い例でした。つまり、 dbmが提案する JAR としてだけでなく、Android プロジェクトとしてリンクする必要があります。上の投稿。
onCreate
(HelloWorld のスタートアップ アクティビティ) のメソッドMainActivity.java
に、行をログに記録する AndEngine のメソッドも呼び出すログ コードを追加しました。( のコンストラクターをSoundManager
行を出力するように変更し、 からコンストラクターを呼び出しましたMainActivity.java
)。これにより、アプリケーションのデプロイがいつ完了し、正しくデプロイされたかを確認できました。
次に、次の変更を行い、各 IDE でそれぞれの時間を 3 回測定しました。
- A: メイン モジュールのログ行のみを変更しました。
- A+B: メイン モジュールと AndEngine モジュールの両方のログ行を変更しました。
標準のストップウォッチで手動でタイミングを計り、秒単位で切り上げ/切り捨てを行いました。それぞれのケースで 3 つのタイミングを実行し、算術平均を計算しました。
結果:
注:ビルド プロセス全体で単に「make」または「refreshing workspace」を出力するだけなので、Eclipse に「Executing DEX」の別のサブ列は含めませんでした。
Eclipse から実行する場合、メイン モジュールを変更するだけで時間を節約できることが数字からわかります。これは予想どおりです。しかし IntelliJ では、どちらの場合もコンパイル時間は同じです!
結論:
IntelliJ は多くの不必要な DEX を実行します。これが構成可能かどうかを誰かが知っていれば、問題の根本原因であると私が信じていることを解決できると思います.
Eclipse の設定では、skip packaging and dexing
あなたが参照している完全な名前は ですSkip packaging and dexing until export or launch. (Speeds up automatic builds on file save)
。これは、ADT 12 以降に追加された機能で、Eclipse の増分コンパイルの問題 (Eclipse での開発が遅くなる) に対処するためです。リビジョン 12.0.0 (2011 年 7 月)を確認してください。詳細については、このリンクを参照してください。使用するIDE(または非)に関係なく、プロジェクトをデバッグ/実行する場合、パッケージ化とdexingは基本的なステップであることに注意してください。
CrazyCoder がコメントで述べたように、IntelliJ はデフォルトでEclipse のようなインクリメンタル コンパイルと問題ペインをサポートしていません。つまり、ファイルが変更されたときにプロジェクトを自動コンパイルしません。したがって、これは IntelliJ の問題でも機能でもありません。
ビルド プロセスのボトルネックは、おそらく別の場所から来ています。私の知る限り、中規模のプロジェクトでは、ビルド プロセスに費やされるほとんどの時間は、リソースのコンパイルです (AAPT コマンド、ビルド プロセス図を確認してください)。xdadevelopers の賢い人たちがボトルネックを発見し、AAPT の修正バージョンを作成しました。
http://forum.xda-developers.com/showthread.php?t=1907281
私はそれを自分で使用していますが、速度の向上はEclipseで感じられると思います。パッケージ化されたad dexingではなく、AAPTステップを向上させるだけであることに注意してください。InteliJ を使用する場合、プロジェクトを頻繁にコンパイルする必要がないため、おそらくあまり役に立ちません。
(Eclipse) プロジェクトに大きな外部 JAR を追加すると、ビルド プロセスが大幅に遅くなることがあります。
Project -> Properties -> Java Build Path -> Libraries -> Add External JARs...
ただし、通常のように jar を追加する ( ) 代わりに、代わりにユーザー ライブラリをProject -> Properties -> Java Build Path -> Libraries -> Add Library... -> User Library
追加し ( )、代わりにこのライブラリに外部 JAR を追加できることに気付きました。
これまでのところ、これは私の大きな JAR のビルド時の問題を常に解決してきました。何人かの頭のいい人がなぜそうなのか説明してくれましたが、残念ながら私はその説明をあまり覚えていません。私はIntelliJの経験がありません-これがあなたの場合にまったく当てはまるかどうかはわかりませんが、ここからさらにアイデアが得られるかもしれません...