尝试在我的应用中使用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上进行编译。
有没有人让这个工作?
答案 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位置,然后单击“确定”