1. ホーム
  2. android

[解決済み] GradleとAndroid Studioを使ったアプリのビルドと実行は、Eclipseを使った場合よりも遅い

2022-03-20 16:11:47

質問

複数のプロジェクト(~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にアップグレードし、大量のメモリを搭載することは、おそらく以下のポイントを合わせたよりも大きな影響を与えるでしょう。

ツールバージョン

ビルドのパフォーマンスを上げることは、開発チームにとって重要な課題です。 グラドル Android Gradle プラグイン .

設定ファイル

という名前のファイルを作成します。 gradle.properties を任意のディレクトリに配置します。

  • /home/<username>/.gradle/ (リナックス)
  • /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の設定

IDEの設定GUIからGradleとIntelliJの統合を微調整することが可能です。オフライン作業(quot;offline work")を有効にする(quot;の答えを確認する) ヤヴァ を使用すると、すべてのquot;sync gradle file"で実際のネットワーク要求を無効にすることができます。

ネイティブマルチデックス

アプリのビルドで最も時間がかかるステップの1つは、Javaバイトコードを1つのdexファイルに変換することです。ネイティブのマルチデックス(デバッグビルドのみのminSdk 21)を有効にすると、ツールの作業量を減らすのに役立ちます(以下の回答を確認してください)。 アクセル・ウィルゲルト 以下同じ)。

依存関係

参考 @aar ライブラリのサブプロジェクトよりも依存性が高い。

aar パッケージを検索 メイヴンセントラル , jCenter または jitpack.io でgithubから任意のライブラリをビルドすることができます。依存ライブラリのソースを編集していない場合は、プロジェクトのソースで毎回ビルドするべきではありません。

アンチウイルス

プロジェクトファイルやキャッシュファイルをアンチウイルススキャンの対象から外すことを検討してください。これは明らかにセキュリティとトレードオフの関係にあります(自宅でこれを試さないでください!)。しかし、ブランチ間を頻繁に切り替える場合、アンチウィルスはgradleプロセスに使用を許可する前にファイルを再スキャンし、ビルド時間を遅くします(特にAndroidStudio sync project with gradle files and indexing tasks)。アンチウイルスが有効な場合と無効な場合でビルド時間とプロセスのCPUを測定し、関連性を確認します。

ビルドのプロファイリング

Gradle には、以下のサポートが組み込まれています。 プロファイリング・プロジェクト . プロジェクトによって、プラグインとカスタムスクリプトの組み合わせは異なります。使用方法 --profile は、ボトルネックを見つけるのに役立ちます。