当我达到64K方法限制时,我已经在我的应用程序中激活了Multidex。
我在两个不同的设备上进行测试:
在第一个上找到了所有可行的东西,但在第二个上我发现了这些错误并且整个应用程序冻结了(不会崩溃)。
错误
E/dalvikvm: Could not find class 'android.app.job.JobScheduler', referenced from method com.google.android.gms.internal.zzcfr.zzazv
E/dalvikvm: Could not find class 'android.app.job.JobScheduler', referenced from method com.google.android.gms.internal.zzcfr.zzs
E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
我跟着the documentation所以:
在我的gradle中,我添加了:
multiDexEnabled true
compile 'com.android.support:multidex:1.0.1'
因为我将API 16定位为minSDKVersion 在我的自定义应用程序类
中 @Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
要尝试解决此问题,我创建了一个multidex-config.txt
文件,该文件与build.gradle位于同一文件夹中。
multidex-config.txt(已编辑)
android/app/job/JobScheduler.class
android/support/v4/widget/DrawerLayout.class
android/graphics/drawable/RippleDrawable.class
然后在gradle中:
buildTypes {
debug {
multiDexKeepFile file('multidex-config.txt')
//...
}
debugStaging {
initWith(buildTypes.debug)
//...
}
release {
multiDexKeepFile file('multidex-config.txt')
minifyEnabled false
//...
}
}
我想我错过了什么。任何线索?
Gradle文件
android {
compileSdkVersion 26
defaultConfig {
//...
minSdkVersion 16
targetSdkVersion 25
multiDexEnabled true
versionCode 10
//...
}
buildTypes {
//...
debug {
//...
multiDexKeepFile file('multidex-config.txt')
}
debugStaging {
initWith(buildTypes.debug)
//...
}
release {
//...
multiDexKeepFile file('multidex-config.txt')
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//...
}
}
dexOptions {
maxProcessCount 6
javaMaxHeapSize "2g"
jumboMode true
}
//...
}
ext {
//...
}
dependencies {
//...
implementation 'com.android.support:multidex:1.0.2'
//...
}
// Required by Firebase
apply plugin: 'com.google.gms.google-services'
答案 0 :(得分:1)
multidex-config.txt的格式似乎与Android Documentation中描述的格式不同。
似乎 -keep 不应该在这里。它的一部分 multiDexKeepProguard 不是 multiDexKeepFile
格式应为
com/example/MyClass.class
com/example/MyOtherClass.class
由于阿尔卑斯山A733的 API 19 (任何API级别低于20的应用),您的应用都会因错误java.lang.NoClassDefFoundError.
而崩溃