私のアプリケーションには不可欠なライブラリがたくさんあります。そのため、multidexサポートライブラリを使用せざるを得なくなり、うまく機能します。しかし、問題が示すのは、gradle buid speedです。ビルドに平均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
タスクの代わりに)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設定:
Preferences(Settingson Windows)に移動します->Build、Execution、Deployment->コンパイラ-> -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。
また、マルチデキシングを有効にしなくても機能します。
Android Studio 1.3(現在 プレビュー3の場合 )は、gradleビルド時間を改善した新しいビルドシステムを使用しています(実際には、10など) -30倍高速)。
マルチデキシングはより多くのメモリを使用します。 Javaで最大ヒープサイズに近づくと、Javaが実際の作業よりもGCの実行に多くの時間を費やすことになります。物事がたくさんダウン。
Multidexを使用する場合は、最大ヒープサイズを増やすことを強くお勧めします。次のコードをAndroid= build.gradleファイルのクロージャに追加して、最大ヒープサイズを4GBにします(必要に応じて小さくします):
dexOptions {
javaMaxHeapSize "4g"
}
これは最新のAndroid Studio 3.0では不要です。
MinSdkを21に変更すると、すべてが通常の状態に戻ります。すべてが6秒のようにコンパイルされます。