MultiDexApplication无法识别

时间:2014-10-24 23:33:02

标签: android gradle multidex android-multidex

尝试在我的应用中使用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')
}

您可以看到我使用最新的构建工具以及最新的Google Play服务和支持库在21上进行编译。

有没有人让这个工作?

4 个答案:

答案 0 :(得分:37)

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'
}

有关详细信息,请参阅here

答案 1 :(得分:13)

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

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

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

使用新的

implementation 'androidx.multidex:multidex:2.0.0'

答案 2 :(得分:2)

我已关注THIS博客帖子,根据哪个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#installbe!所以建议避免使用静态字段   可以放在主classes.dex文件之外的类型。
  •   
  • 您的应用程序类的方法可能无法访问其他类   在您的应用程序类之后加载。作为这方面的工作,   你可以创建另一个类(任何类,在上面的例子中,我使用   Runnable)并在其中执行方法内容。
  •   

答案 3 :(得分:-2)

我得到了解决方案:)

升级到jdk 8并在

中更改Android Studio中的JDK位置

档案&gt;项目结构&gt; SDK位置

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