プロジェクトに multidex:true を追加し、MultiDexApplication から拡張された Application クラスを作成すると、プロジェクトのビルド時間が 20 秒から約 90 秒に短縮されました。
4 に答える
すでに Vic Vu のソリューションを試したものの、multiDex を有効にすることを避けられない場合は、これを試すことができます (Android 5.0 以降のデバイスを使用している場合)。
注これは、開発ビルドを高速化するだけです。本番ビルドはまだ遅くなります。
dev
基本的に、 用と用の 2 つの製品フレーバーを導入する必要がありますprod
。
追加multiDexEnabled true
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'
}
defaultConfig {
applicationId "com.something.something"
targetSdkVersion 23
versionCode 1
versionName "1.0.0"
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
そして、拡張するクラスがあるApplication
ため、オーバーライドする必要がありましたattachBaseContext()
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
拡張しない場合は、タグでApplication
使用するだけです。MultiDexApplication
AndroidManifest.xml
application
Android StudioBuild Variants
で を指していることを確認しますdevDebug
。
ここで完全な手順をお読みください https://developer.android.com/studio/build/multidex.html#dev-build
これはフォーマットにより適しているため、回答として提供します。
あなたの質問に簡単に答えるには:いいえ、方法はありません。Multidex は、65k メソッド制限の負担を軽減するためのプロセスです。このプロセスは複雑で、ビルド時間が長くなるだけです。
できる最善の方法は、メソッド数を減らすことです。
あなたのbuild.gradle(ここで提供されています)では、次のものを使用しています:
`compile 'com.google.android.gms:play-services:8.3.0'`
しかし、最新のプレイ サービス API を見ると、実際に必要なサービスを選択できます。
このページの表 1 を見てください。
必要なものだけを使用してください。Google Play サービス全体では、約 30,000 のメソッドがあります。
それは役立つはずです。
Multidexing はより多くのメモリを使用します。Java の最大ヒープ サイズに近づくと、Java が実際の作業よりも GC に多くの時間を費やしていることがわかります。これにより、処理が大幅に遅くなる可能性があります。
multidex を使用する場合は、最大ヒープ サイズを増やすことを強くお勧めします。build.gradle ファイルの android クロージャーに以下を追加して、最大ヒープ サイズを 4GB にします (必要に応じて大きく/小さくしてください)。
dexOptions {
javaMaxHeapSize "4g"
}
場合によります。
質問で指定していませんが、開発ビルドを高速化したいだけであれば、余分な作業を避けることができます。公式ドキュメントには、それに関するセクション全体が含まれています。