私のアプリケーションには不可欠なライブラリがたくさんあるため、multidex サポート ライブラリの使用を余儀なくされ、うまく機能します。しかし、問題が示されているのは、gradle ビルドの速度です。ビルドには平均 2 分かかります。開発とテストを行っているとき、これは非常に面倒です。
デバッグ ビルドを高速化する方法はありますか?
私のアプリケーションには不可欠なライブラリがたくさんあるため、multidex サポート ライブラリの使用を余儀なくされ、うまく機能します。しかし、問題が示されているのは、gradle ビルドの速度です。ビルドには平均 2 分かかります。開発とテストを行っているとき、これは非常に面倒です。
デバッグ ビルドを高速化する方法はありますか?
最小 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
に (デフォルト タスクの代わりに) タスクを使用できます。
- コマンドラインから: 実行
- Android Studio から: [ビルド バリアント]ウィンドウを開き、ビルド バリアントを選択します。debug
./gradlew installDevDebug
devDebug
もちろん、SDK >= 21 のデバイスに対して作業する必要があります。
フレーバーを使いたくない人のための解決策もあります。この 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 設定の使用:
環境設定( Windows の設定) ->ビルド、実行、配置- >コンパイラ-> [コマンドライン オプション]テキスト ボックスに移動します。-PdevMinSdk=21
最近ビルド キャッシュは、Android Gradle プラグインに取り組んでいるチームによって導入されました。に追加することで有効にできandroid.enableBuildCache=true
ますgradle.properties
。
詳細はこちら http://tools.android.com/tech-docs/build-cache
私にとっては、増分ビルド時間が最大 30 秒増加しました。
サポート ライブラリの一部として導入された従来の multidex ( com.android.support:multidex
) では機能しないため、minSDK >= 21 の場合にのみ適しています。開発ビルドに対してのみ設定し、minSDK < 21 でリリース ビルドを実行できます。
また、マルチデックスを有効にしなくても機能します。
Multidexing はより多くのメモリを使用します。Java の最大ヒープ サイズに近づくと、Java が実際の作業よりも GC に多くの時間を費やしていることがわかります。これにより、処理が大幅に遅くなる可能性があります。
multidex を使用する場合は、最大ヒープ サイズを増やすことを強くお勧めします。build.gradle ファイルの android クロージャーに以下を追加して、最大ヒープ サイズを 4 GB にします (必要に応じて小さくしてください)。
dexOptions {
javaMaxHeapSize "4g"
}
Android Studio 1.3 (現在は Preview 3 ) は、gradle のビルド時間を改善する新しいビルド システムを使用しています (実際には、10 ~ 30 倍速くなります)。