由于我已经达到了64K方法的限制,因此我在我的应用中启用了Multidex。
我在两个不同的设备上进行测试:
- Samsung Galaxy S7(API 24)
- Alps A733(API 19,Google服务未更新)
第一个设备上一切正常,但在第二个设备上,我遇到了以下错误,并且整个应用程序会冻结(而不是崩溃)。
错误
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
我遵循文档的步骤:
在我的gradle文件中,我添加了以下内容:
multiDexEnabled true
compile 'com.android.support:multidex:1.0.1'
,因为我将minSDKVersion设置为API 16
在我的自定义Application类中:
@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'
MultiDexApplication
类或通过添加MultiDex.install(this);
。我选择了最后一种选项。 - Eselfar