Multidex无法找到课程

时间:2018-03-16 10:48:04

标签: android multidex android-multidex

当我达到64K方法限制时,我已经在我的应用程序中激活了Multidex。

我在两个不同的设备上进行测试:

  • 三星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

我跟着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'

1 个答案:

答案 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.而崩溃