私はマルチプロジェクト(〜10モジュール)を持っていて、その構築は毎回約20-30秒かかります。 Android StudioでRunを押すと、毎回アプリを再構築するのを待つ必要がありますが、これは非常に遅いです。
Android Studioで構築プロセスを自動化することは可能ですか?それとも、このプロセスを速くする方法について何かアドバイスがありますか?
Eclipseでは、自動ビルドのおかげで、エミュレータ上で同じプロジェクトを実行するのに約3-5秒かかります。
これは私のbuild.gradleファイル(appモジュール)です。
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.4'
}
}
apply plugin: 'Android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':libraries:SharedLibs')
compile project(':libraries:actionbarsherlock')
compile project(':libraries:FacebookSDK')
compile project(':libraries:GooglePlayServices')
compile project(':libraries:HorizontalGridView')
compile project(':libraries:ImageViewTouch')
compile project(':libraries:SlidingMenu')
}
Android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 8
targetSdkVersion 16
}
}
申し訳ありませんが、開発ステーションをSSDと大量のRAMにアップグレードすることは、以下の点を組み合わせた場合よりもおそらく大きな影響があります。
ビルドパフォーマンスの向上は開発チームにとって最優先事項ですので、最新の Gradle および Android Gradle Plugin を使用していることを確認してください。
該当するディレクトリにgradle.properties
という名前のファイルを作成します。
/home/<username>/.gradle/
(Linux)/Users/<username>/.gradle/
(Mac)C:\Users\<username>\.gradle
(Windows)追加:
# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# https://medium.com/google-developers/faster-Android-studio-builds-with-dex-in-process-5988ed8aa37e#.krd1mm27v
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true
# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true
# Set to true or false to enable or disable the build cache.
# If this parameter is not set, the build cache is disabled by default.
# http://tools.Android.com/tech-docs/build-cache
Android.enableBuildCache=true
Gradleプロパティは、projectRoot\gradle.properties
に配置するとローカルに、user_home\.gradle\gradle.properties
に配置するとグローバルに機能します。 Gradleタスクをコンソールから実行する場合、またはアイデアから直接実行する場合に適用されるプロパティ。
IDE設定GUIからGradle-IntelliJ統合を微調整することが可能です。 "オフライン作業"( yava からの回答を確認)を有効にすると、すべての "同期グラドルファイル"で実際のネットワーク要求が無効になります。
Apkビルドの最も遅いステップの1つは、Javaバイトコードを単一のdexファイルに変換することです。ネイティブのマルチインデックスを有効にすると(デバッグビルドの場合のみminSdk 21)、ツールで作業量を減らすことができます( Aksel Willgert の回答を確認してください)。
ライブラリサブプロジェクトよりも@aar
の依存関係を優先します。
mavenCentral 、 jCenter でaarパッケージを検索するか、 jitpack.io を使用してgithubからライブラリを構築してください。依存関係ライブラリのソースを編集していないのであれば、プロジェクトソースで毎回それを構築するべきではありません。
ウイルス対策スキャンからプロジェクトファイルとキャッシュファイルを除外することを検討してください。これは明らかにセキュリティとのトレードオフです(自宅では試しないでください)。しかし、ブランチを頻繁に切り替えると、ウイルス対策プログラムが使用する前にファイルを再スキャンするため、ビルド時間が遅くなります(特に、AndroidStudioのプロジェクトとインデックスファイルの同期タスク)。アンチウイルスが有効か無効かに関係なく、ビルド時間とプロセスCPUを測定します。
Gradleには プロファイリングプロジェクト のサポートが組み込まれています。プロジェクトによって、プラグインとカスタムスクリプトの組み合わせが異なります。 --profile
を使用すると、ボトルネックを見つけるのに役立ちます。
段階的な更新日チェックを無視することができます。
Android Studio 1.5を実行しているWindowsの場合:File -> Settings -> Build, Execution, Deployment -> Build tools -> Gradle -> Check Offline work (as shown in image)
に移動します。
〜30 +秒から〜3秒にダウン
これを至る所で検索し、最終的に私達のために働く解決策を見つけました。並列ビルドを有効にし(OSX:preferences -> compiler -> gradle -> "Compile independent modules in parallel"
)、 'make project automatically'を有効にすると、最短1分から最長20秒になりました。/u/Covalenceに感謝します。
http://www.reddit.com/r/androiddev/comments/1k3nb3/gradle_and_Android_studio_way_slower_to_build/
私は最近、新しいSSDを購入し、WindowsからLinuxに移行しました。私のビルド時間は今や桁違いに速くなり、もはや煩わしくありません。
なぜEclipseより遅いのかというあなたの質問に直接答えることはできませんが、それはプロセスがディスクバウンドであり、SSDへのアップグレードは(やや高価な)解決策かもしれないことを示しています。私はこの問題にグーグルしていて、ここで終わる人々がいると思います。
Google Playサービスを使用している場合、blob全体ではなく、必要なライブラリのみに応じて、処理を高速化できます。
マップのみが必要な場合は、次を使用します。
compile 'com.google.Android.gms:play-services-maps:6.5.+'
の代わりに:
compile 'com.google.Android.gms:play-services:6.5.+'
後者は、クラスパスに20kのメソッド (ブログを参照) をもたらします。これにより、メソッドの総数が64kを超える可能性があります。
これにより、デバッグビルドに対してもproguardまたは multidex の使用が強制されます。私のプロジェクトの1つでは、次のビルド時間がありました
SDK 21+で開発する場合、前述のようにmultidexビルドを最適化できます Androidのドキュメント
Android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
}
GradleビルドのスピードアップAndroid Studio 3.2.1
Android Studioでビルドが数分間完了するのを待っているように感じたことはありませんか?私も。そして、それはかなり面倒です。幸いなことに、これを改善するために使用できる方法がいくつかあります。 Androidは、Gradleを使用して構築します。最新バージョンは4.6で、以前のバージョンよりも大幅にパフォーマンスが向上しています(詳細についてはリリースノートを参照)。
ステップ1:Gradleバージョンを更新するこれを実現する簡単な方法は、次の場所に行くことです:モジュール設定(プロジェクト)を開く>プロジェクト構造
更新
Gradleバージョン:4.6に変更し、Androidプラグインバージョン:3.2.1に変更します
https://services.gradle.org/distributions/gradle-4.6-all.Zip から配布されているGradleリリースをダウンロードして、Gradleフォルダーにコピーします。
最後のステップは、設定> Gradleで差別を追加することです
[適用]をクリックして変更を保存することを忘れないでください。
ステップ2:オフラインモードを有効にする、プロジェクトのGradleデーモンと並列ビルドオフラインモードは、最新の更新チェックを無視するようGradleに指示します。 Gradleは毎回依存関係を要求し、このオプションを使用すると、依存関係のためにマシン上にすでにあるものを使用します。 Android studio設定からGradleに移動し、[オフライン]作業ボックスをクリックします。
次のステップは、プロジェクトのGradleデーモンと並列ビルドを有効にすることです。並列ビルドは、複数のモジュールを備えたプロジェクト(Gradleのマルチプロジェクトビルド)を並列にビルドします。これにより、大規模またはモジュラープロジェクトのビルドが高速化されます。
これらの設定は、Gradleスクリプトディレクトリ(つまり〜/ .gradle/gradle.properties)のgradle.propertiesという名前のファイルを変更することで有効にできます。これらのオプションの一部(たとえば、Complieモジュールを並行して)はAndroidから利用できますStudioはデフォルトで有効になっていますが、それらをgradle.propertiesファイルに入れると、ターミナルからビルドするときに有効になり、同僚が同じ設定を使用するようになります。ただし、チームで作業している場合は、この作業をコミットできない場合があります。
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit org.gradle.parallel=true
# When set to true the Gradle daemon is used to run the build. For local developer builds this is our favorite property.
# The developer environment is optimized for speed and feedback so we nearly always run Gradle jobs with the daemon.
org.gradle.daemon=true
デーモンを使用すると、毎回Gradleアプリケーション全体を起動する必要がないため、ビルドの起動が高速になります。 Gradle Daemonはデフォルトでは有効になっていませんが、開発者のマシンでは常に有効にすることをお勧めします(ただし、継続的統合サーバーでは無効のままにしておくことをお勧めします)。 FAQこのモードについては、こちらをご覧ください https://docs.gradle.org/current/userguide/gradle_daemon.html 。並列ビルド設定は、一部のプロジェクトでは安全ではない可能性があります。要件は、すべてのモジュールを分離する必要があるか、ビルドが失敗する可能性があることです(詳細については http://gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects を参照してください)。
ステップ3:インクリメンタルデキシンとメモリ調整の有効化インクリメンタルデキシングをオンにすることで、ビルドを高速化できます。モジュールのビルドファイルで:
このオプションをAndroidブロックに追加します。
dexOptions {
incremental true
}
そのdexOptionsブロックでは、次のようにdexプロセスのヒープサイズを指定することもできます。
dexOptions {
incremental true
javaMaxHeapSize "12g"
}
「12g」は12GBのメモリです。これに関する追加情報はこちらgoogle.github.io/Android-gradle-dsl/current/にあります。また、設定ファイルでGradleパラメーターを構成することもできます。大規模なプロジェクトがある場合は、最大ヒープサイズを増やします。
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
パラメータのすべてのリストはこちらをご覧ください: https://docs.gradle.org/current/userguide/userguide_single.html#sec:gradle_configuration_properties .
ステップ4:ウイルス対策を無効にするプロジェクトおよびキャッシュファイルをウイルス対策スキャンから除外することを検討してください。これは明らかにセキュリティとのトレードオフです。ただし、ブランチを頻繁に切り替えると、ウイルス対策はファイルを再スキャンしてからgradleプロセスが使用できるようにします。これにより、ビルド時間が遅くなります(特にAndroid Studio同期プロジェクトとgradleファイルおよびインデックス作成タスク)。ビルド時間を測定し、アンチウイルスを有効または無効にしてCPUを処理して、関連するかどうかを確認します。これがお役に立てば幸いです。ビルドのパフォーマンスを改善するための質問やその他のヒントがある場合は、コメントを残してください。
承認された答えはAndroidスタジオの古いバージョンのためのものであり、それらのほとんどは現在まだ動作しています。 Androidスタジオを更新すると、少し速くなりました。 XmsとXmxの増加に伴って自動的に増加するので、ヒープサイズを指定しても構いません。これはVMオプションを使った修正です。
Binフォルダーには、環境設定を設定するためのstudio.vmoptionsファイルがあります。私の場合、これはstudio64.vmoptionsです。まだ追加されていない場合は、次の行を追加してファイルを保存します。私の場合は8GBのRAMです。
-Xms4096m
-Xmx4096m
-XX:MaxPermSize=2048m
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+HeapDumpOnOutOfMemoryError
-Dfile.encoding=utf-8`
Androidスタジオを起動します。 「ファイル」 - >「設定」 - >「ビルド」、「実行」、「デプロイメント」 - >「コンパイラー」に移動します。
Macを使用している場合、最初はvmoptionsが見つかりませんでした。とにかく、これが MAC OSXでvmoptionsを変更する方法についての素晴らしい記事です 。この記事から引用する。
端末を開き、次のコマンドを入力してMAC OSXでvmoptionsを開きます。
open -e /Applications/Android\ Studio.app/Contents/bin/studio.vmoptions
次のディレクトリにgradle.propertiesという名前のファイルを作成するだけです。
/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)
この行をファイルに追加します。
org.gradle.daemon=true
私にとっては、速度はEclipseと同等です。
コマンドラインからgradleを使用すれば、プロセスを早くすることができます。 IDE開発者のためにするべき多くの最適化があります。しかし、それはほんの初期のバージョンです。
詳細については このディスカッション g +の開発者と一緒に読んでください。
すべての答えは素晴らしいです、そして私はビルドスピードを向上させるためにこれとこれらの方法を使用することを勧めます。
2016年9月にAndroid 2.2がリリースされた後、Androidは実験的ビルドキャッシュ機能をリリースしてgradle
のビルドパフォーマンスを高速化しました。これは現在Android Studio 2.3 Canaryから正式なものです。 (オフィシャルリリースノート)
これはデフォルトで有効になっている新しいビルドキャッシュ機能を導入し、同じまたは異なるAndroidの以前のビルドで作成されたファイル/ディレクトリを保存して再利用することでビルド時間(フルビルド、インクリメンタルビルド、インスタントランを含む)を短縮できます。プロジェクト。
使い方:
gradle.properties
ファイルに次の行を追加してください
Android.enableBuildCache = true
# Set to true or false to enable or disable the build cache. If this parameter is not set, the build cache is enable by default.
キャッシュを消去します。
ビルドキャッシュを簡単にクリーンアップするためのcleanBuildCache
という新しいGradleタスクがあります。端末に次のように入力して使用できます。
./gradlew cleanBuildCache
またはlocationにあるすべてのファイルストアを削除して、Android Studio 2.2のキャッシュを消去できます。
C:\Users\<username>\.Android\build-cache
この設定を変更した後、私のコンパイル時間は10分から10秒に変更されました。
ステップ1:
設定(Ctrl + Alt + S) - >
ビルド、実行、配置 - >
コンパイラ - >
コマンドラインオプションボックスに「
--offline
」を入力します。
ステップ2:
「独立したモジュールを並列にコンパイルする」チェックボックスをチェックします。
適用 - > OKをクリック
リファレンス - https://www.sundoginteractive.com/blog/speed-up-gradle-in-Android-studio
デメリット:
Build.gradleファイルで識別されている依存関係の最新バージョンをプルダウンすることはできません。インポートされたライブラリのキャッシュスナップショットを使用するため、実行速度が速くなります。
重要な注意事項 :アプリケーションをデプロイするときにこの設定を削除し、最新バージョンの依存関係でビルドしてください。
と私の解決
File -> Settings -> Build, Execution, Deployment -> Build Tools ->
Gradle -> Offline work
Gradleのビルドは8分から3秒でした。
もう1つのパフォーマンス向上のヒント:
Android Studio 3.0 にはD8という新しいDEXコンパイラが含まれています。
「dexコンパイラは、日々のアプリケーション開発において基本的には機能しませんが、アプリケーションのビルド時間、.dexファイルサイズ、およびランタイムパフォーマンスに直接影響します。」
「また、新しいD8コンパイラと現在のDXコンパイラを比較すると、D8はより速くコンパイルされ、小さい.dexファイルを出力しますが、同じまたはそれ以上のアプリケーションランタイムパフォーマンスを実現します。」
D8はオプションです - プロジェクトのgradle.propertiesに入力する必要があります。
Android.enableD8=true
より詳しい情報: https://Android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
PS。それは私の構築時間を約30%改善します。
これが、Android Studio 2.2をスピードアップする上で、この最初のAndroidプログラマー(元プロのプログラマー、何年も前)の助けとなったものです。私はこれが再ハッシュであることを知っています、しかし、ただ一つの場所で 要約 。
初期ビルドはまだ残酷に遅くなることがありますが、実行中のアプリの再起動は通常非常に許容範囲内です。私は次善の策を講じているPCを使用しています:AMD Quad-Core A8-7410 CPU、8MB RAM、非SSD HD、Win 10(そして、これが私の最初のStack Overflow投稿です....;)
設定で - >グレード:
"オフライン作業"の場合ははい(これはおそらく最もインポートされる設定です)。
設定で - >コンパイラ:
「独立したモジュールを並列にコンパイルする」の場合は可能です(これが実際にマルチコアCPUの利用に役立つかどうかは不明です)。
GRADLE SCRIPTSでは 、 "build.gradle(Module:app)":
defaultConfig {
...
// keep min high so that restarted apps can be hotswapped...obviously, this is hugely faster.
minSdkVersion 14
...
// enabling multidex support...does make big difference for me.
multiDexEnabled true
GRADLE SCRIPTSの関連項目 、 "gradle.properties(プロジェクトのプロパティ)":
org.gradle.jvmargs = -Xmx3048m -XX:MaxPermSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8
org.gradle.parallel = true org.gradle.daemon = true
さらに 、エミュレータの代わりに物理的なデバイスでテストすることは私にとってはうまくいっています。立ち上がる小さなタブレットが便利です。
この設定は私にとっては非常に速くなります(ビルドの約2秒)
build.gradle
Android {
dexOptions {
incremental true
preDexLibraries = false
jumboMode = false
maxProcessCount 4
javaMaxHeapSize "6g"
}
}
gradle.properties
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx8192M
私のPC:
プロジェクトファイル
- すべてローカルHDにあります
以下の手順に従ってください。
オフラインモードを有効にする:印刷画面の下を確認してください。
インスタントランを有効にする:印刷画面の下を確認してください。
https://i.stack.imgur.com/mvHKJ.png
あなたがインスタントランについての詳細を知りたい場合は、Android開発者サイトをご覧ください。
あなたはスタジオの右側にあるgradleメニューを開いてみて、あなたが変更したモジュールだけをアセンブルしてからinstallコマンドを実行することができます。プレスランを実行すると、アセンブル中のコードに加えた変更に関係なく、すべてがアセンブルされます。
特定のケースでは、問題は retrolambda pluginが原因で、コアモジュールのコードが変更されていなくても、アプリケーションを起動しようとするたびにすべてのプロジェクトとサブプロジェクトが再コンパイルされることでした。
retrolambaを削除 私たちのためにそれを修正しました。誰かに役立つことを願っています。
Androidのドキュメントによれば 、これをappモジュールのgradleファイルに追加してください。
Android {
...
dexOptions {
preDexLibraries true
maxProcessCount 8
}
}
最初に試してみてください。それは私の個人的な経験です。
私は同じ問題を抱えていました。私がしたことはただ永久にアンチウイルスを無効にすることです(MineはAvast Security 2015でした)。ウイルス対策を無効にした直後に、事はうまくいった。グラドルは正常に終了しました。今から数秒以内にグラドルは終了しています(たった5-10秒かかります)。
私はGradleのエキスパートではありませんが、私の環境では.gradle/init.gradleに次の行があります。
gradle.projectsLoaded {
rootProject.allprojects {
repositories {
mavenRepo name: 'libs-repo', url: 'http://guest-vm/artifactory/repo'
}
}
}
それでも、その行が表示された理由はわかりませんが、次のように変更してみます。
gradle.projectsLoaded {
rootProject.allprojects {
repositories {
mavenCentral()
}
}
}
そして今、私はついにAndroid Studio&Gradle buildindスキームに誓うことなく仕事をすることができます。
低設定のマシンでAndroidの環境を実行する。
Androidスタジオのデフォルトヒープは1.2 Gbで、512 MBに減らすことができます。ヘルプ>カスタムVMオプションの編集studio.vmoptions -Xmx512mレイアウトのパフォーマンスが向上します。
Android Studio Mkaeのコアコンポーネントの1つであるGradleには、今のところ確かに3.0betaが最新のものです。
以下のヒントはコードの品質に影響する可能性があるので注意して使用してください。
オンにするとStudioはパワーセーフモードを含みます。
必要に応じて手動でlintcheckを実行することができます。/gradlewlint
ほとんどのAndroidエミュレータは平均して2 GBのRAMを消費するため、実際のAndroidデバイスを使用すると、コンピュータのリソース負荷が軽減されます。または、エミュレータのRAMを減らすと、コンピュータの仮想メモリの消費量が自動的に減少します。これは仮想デバイスの設定と事前設定にあります。
Gradleオフラインモードは、帯域幅が制限されているユーザーがビルド依存関係のダウンロードを無効にするための機能です。それはAndroidのスタジオの性能を向上させるのに役立ちますバックグラウンド操作を減らすでしょう。
Androidスタジオは、複数のモジュールを並行してコンパイルするための最適化を提供します。 RAMが低いマシンでは、この機能がパフォーマンスに悪影響を及ぼす可能性があります。コンパイラ設定ダイアログで無効にできます。
こんにちは私はこれが非常に非常に遅い答えであることを知っていますが多分誰かを助けます
私の場合私は使っていた
compile 'com.Android.support:support-v4:23.1.1'
私のアプリではGradle依存関係
しかし私の図書館の一つでは
compile 'com.Android.support:support-v4:23.0.1'
すべて最新バージョンに変更した後、私の問題は解決しました。
些細な (resoruce xmlへの)変更はまだ 10分かかりました 。 @rivare が彼の答えで言っているように、コマンドラインビルドはもっと速いです(これを 15 seconds にしました)。
これは、少なくともWindows用のコマンドラインから簡単なビルドを速くするための手順です。
Go あなたのプロジェクトのルート(gradlew.batがある場所)に:
cd c:\ Android\MaskActivity
build を実行します。
gradlew assembleDebug
アンインストール 直接電話からapk(アンインストールするためにそれをドラッグします)。
ビルドが完了したら、 kill Windowsタスクマネージャを使ったBIG Javaプロセス。
またはWindowsマシンにUNIXツールがある場合は、
ps
"pid"が表示されます。
kill -9 <pid>
今 インストール あなたのapk:
adb -dインストールC:\ Android\MaskActivity\app\build \出力\ apk\app-debug.apk
このSudoを使用してくださいdpkg --add-architecture i386 Sudo apt-getアップデートSudo apt-getインストールlibncurses5:i386 libstdc ++ 6:i386 zlib1g:i386