23

尝试在我的应用程序中使用 MultiDexApplication,但是当我尝试使用它扩展我的应用程序活动时,无法识别该类。

这是我的 build.gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion '21.0.1'
    defaultConfig {
        applicationId 'com.myapp'
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 115
        versionName '4.8'
    }

    buildTypes {
        debug {
            debuggable true
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            debuggable false
            runProguard true
            zipAlign true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    lintOptions {
        checkReleaseBuilds false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.google.android.gms:play-services:6.1.11'

    compile 'com.android.support:appcompat-v7:21.0.0'

    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    compile project(':facebook')
}

你可以看到我在 21 日编译,使用最新的构建工具,以及最新的 google play 服务和支持库。

有没有人让这个工作?

4

4 回答 4

42

MultiDexApplication 类不是 appcompat-v7 库的一部分。它被装在一个单独的 jar 中(称为 android-support-multidex)。

在/sdk/extras/android/support/multidex/library/libs下找到android-support-multidex.jar(可从支持库的修订版 21 中获得)并将其复制到项目的libs文件夹中。

更新(2014 年 11 月 5 日)
该 jar 现在可在中央存储库中使用:

dependencies {
  ...
  compile 'com.android.support:multidex:1.0.0'
}

有关更多信息,请参见此处

更新 (27/9/2021)
Jetpack (AndroidX) 用户应将其添加为依赖项:

dependencies {
  ...
  implementation 'androidx.multidex:multidex:2.0.1'
}
于 2014-10-27T11:52:40.347 回答
25

尽管这个问题已经很老了,但是当我尝试将不同的模块一起构建为 API < 21 的一个 APK 时,我在多模块设置中遇到了这个错误。我已经重构为 AndroidX,但 multidex 文档还没有提到 AndroidX。

如果您使用的是 AndroidX,请确保替换旧的 multidex 依赖项

compile 'com.android.support:multidex:1.0.3'

与新的

implementation 'androidx.multidex:multidex:2.0.0'
于 2018-08-28T11:33:27.323 回答
2

我已经关注了这篇博文,其中 MultiDexApplication 应该包含在支持库的 r21 中。

我的 IDE 也无法解决它。

我现在在MULTIDEX github 项目的帮助下通过添加(您可以在项目页面上查看更多详细信息)使其工作:

android {
    dexOptions {
        preDexLibraries = false
    }
}

repositories {
  jcenter()
}

dependencies {
  compile 'com.google.android:multidex:0.1'
}

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex' // enable multidex

        dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
    }
}

并添加具有以下内容的 $project_dir/multidex.keep 文件:

android/support/multidex/BuildConfig.class
android/support/multidex/MultiDex$V14.class
android/support/multidex/MultiDex$V19.class
android/support/multidex/MultiDex$V4.class
android/support/multidex/MultiDex.class
android/support/multidex/MultiDexApplication.class
android/support/multidex/MultiDexExtractor$1.class
android/support/multidex/MultiDexExtractor.class
android/support/multidex/ZipUtil$CentralDirectory.class
android/support/multidex/ZipUtil.class

github 项目页面还提到了对 MultiDexApplication 类的实现内容的一些考虑:

  • 应用程序类中的静态字段将在调用 MultiDex#install 之前加载!所以建议避免使用可以放在主 classes.dex 文件之外的类型的静态字段。
  • 您的应用程序类的方法可能无法访问在您的应用程序类之后加载的其他类。作为解决方法,您可以创建另一个类(任何类,在上面的示例中,我使用 Runnable)并执行其中的方法内容。
于 2014-10-26T23:19:17.077 回答
0

我得到了解决方案:)

升级到 jdk 8 并在 Android Studio 中更改 JDK 位置

文件 > 项目结构 > SDK 位置

查找并更改 JDK 位置,然后单击确定

于 2016-07-22T13:22:57.767 回答