【发布时间】:2015-01-02 00:41:28
【问题描述】:
我正在我的应用程序上尝试新的MultiDex Support,到目前为止,我已经成功地编译了我的应用程序,但是在运行它时,我得到了以下异常:
java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newApplication(Instrumentation.java:998)
at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
这是我的 gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:21.0.0'
compile 'com.android.support:support-v13:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
}
还有我的 AndroidManifest.xml:
<application
android:name="android.support.multidex.MultiDexApplication">
我不明白问题出在哪里。我想我正在根据文档做所有事情。还有什么我想念的吗?我确保从 SDK 管理器安装了最新的支持库和 repo。
【问题讨论】:
-
您是否还确保您拥有最新的构建工具版本?您能否还指定堆栈跟踪是来自调试版本还是发布版本?
-
@PaulR 我有 21.1 Build Tools 版本,堆栈跟踪属于调试版本。
-
@dustedrob 奇怪。首先验证 MultiDexApplication 是 maindexlist 的一部分。这个文本文件可以在 /app/build/intermediates/multi-dex/{debug/release}/maindexlist.txt 下找到
-
@AlexLipov MultiDexApplication 在 maindexlist.txt 文件中。
-
@dustedrob 太好了。你能反编译你的主 dex 文件(从你的输出 apk 中提取它)来验证 MultiDexApplication 类确实存在吗?你可以在这个答案中找到如何做到这一点:stackoverflow.com/a/4177581/1233652
标签: android gradle dex android-multidex