web-dev-qa-db-ja.com

multidexアプリケーションでのGradleビルドの高速化

私のアプリケーションには不可欠なライブラリがたくさんあります。そのため、multidexサポートライブラリを使用せざるを得なくなり、うまく機能します。しかし、問題が示すのは、gradle buid speedです。ビルドに平均2分かかります。開発とテストをしているとき、これはかなり面倒です。

デバッグビルドを高速化する方法はありますか?

22
Tadej Vengust

最小SDKバージョン= 21を指定することで、開発ビルドを高速化できます。
公式ドキュメントには セクション全体 が含まれています。

例(ドキュメントから):

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
        }
    }
          ...
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
  compile 'com.Android.support:multidex:1.0.0'
}

製品フレーバーを追加したら、開発ビルドに(デフォルトのdevDebugタスクの代わりに)debugタスクを使用できます。
-コマンドラインから:./gradlew installDevDebugを実行します
-from Android Studio: open Build Variants window を選択し、devDebugビルドバリアントを選択します。

もちろん、SDKが21以上のデバイスに対して作業する必要があります。


フレーバーを使いたくない人のためのソリューションもあります。 this Gist で提案されているように、minSdkVersion値を動的に計算します。

int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14
apply plugin: 'com.Android.application'

Android {
    ...
    defaultConfig {
        minSdkVersion minSdk
        ...
    }
}

この例では、devMinSdkプロパティが定義されているかどうかを確認し、trueの場合はそれを使用しています。それ以外の場合、デフォルトは14です。

ビルドスクリプトにdevMinSdk値を渡すにはどうすればよいですか? 2つのオプション:

コマンドラインの使用:

./gradlew installDebug -PdevMinSdk=21

使用Android Studio設定:

PreferencesSettingson Windows)に移動します->Build、Execution、Deployment->コンパイラ-> -PdevMinSdk=21コマンドラインオプションテキストボックスに入力します。

Android Studio compiler options

60
Alex Lipov

最近ビルドキャッシュがチームによって導入されましたAndroid Gradleプラグイン。Android.enableBuildCache=truegradle.propertiesに追加することで有効にできます。

詳細はこちら http://tools.Android.com/tech-docs/build-cache

私にとっては、増分ビルド時間が30秒ほど増加しました。

サポートライブラリの一部として導入されたレガシーmultidex(com.Android.support:multidex)では機能しないため、minSDK> = 21の場合にのみ適しています。開発ビルドのみに設定でき、minSDK <でリリースビルドを実行できます21。

また、マルチデキシングを有効にしなくても機能します。

3
sealskej

Android Studio 1.3(現在 プレビュー3の場合 )は、gradleビルド時間を改善した新しいビルドシステムを使用しています(実際には、10など) -30倍高速)。

詳細情報 Google I/O 2015のライブセッション

1
Hugo Gresse

マルチデキシングはより多くのメモリを使用します。 Javaで最大ヒープサイズに近づくと、Javaが実際の作業よりもGCの実行に多くの時間を費やすことになります。物事がたくさんダウン。

Multidexを使用する場合は、最大ヒープサイズを増やすことを強くお勧めします。次のコードをAndroid= build.gradleファイルのクロージャに追加して、最大ヒープサイズを4GBにします(必要に応じて小さくします):

dexOptions {
    javaMaxHeapSize "4g"
}
1
Will Calderwood

これは最新のAndroid Studio 3.0では不要です。

0
N Jay

MinSdkを21に変更すると、すべてが通常の状態に戻ります。すべてが6秒のようにコンパイルされます。

0
Santhej Kallada