VM 有 multidex 支持,MultiDex 支持库被禁用。问题
Posted
技术标签:
【中文标题】VM 有 multidex 支持,MultiDex 支持库被禁用。问题【英文标题】:VM has multidex support, MultiDex support library is disabled. issue 【发布时间】:2018-04-21 13:28:32 【问题描述】:我已经尝试了互联网上的所有解决方案,但其中任何一个都有效,这是我的 gradle:
android
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig
applicationId "com.rocketjourney"
minSdkVersion 21
targetSdkVersion 24
versionCode 68
versionName "4.41"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "com.rocketjourney.helpers.CustomTestRunner"
configurations.all
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
resolutionStrategy.force 'com.squareup.okio:okio:1.13.0'
resolutionStrategy.force 'com.squareup.okhttp3:okhttp:3.8.0'
dexOptions
javaMaxHeapSize "4g"
jumboMode = true
`
repositories
mavenCentral()
maven url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
maven url "https://jitpack.io"
flatDir dirs 'libs'
flatDir dirs '../aars'
maven url 'https://maven.fabric.io/public'
dependencies
compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') transitive = true;
etc...
`
我的清单如下所示:
<application
android:name="com.rocketjourney.RJApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
在我的RJApplication.class
我有这个代码:
public class RJApplication extends Application
@Override
protected void attachBaseContext(Context base)
super.attachBaseContext(base);
但我现在的错误是:
11-08 11:54:36.494 5743-5743/? E/AndroidRuntime: 致命异常: main 进程:com.rocketjourney,PID:5743 java.lang.NoClassDefFoundError:解析失败:Lio/fabric/sdk/android/services/common/FirebaseInfo; 在 com.crashlytics.android.CrashlyticsInitProvider.onCreate(CrashlyticsInitProvider.java:22) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1696) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1671) 在 android.app.ActivityThread.installProvider(ActivityThread.java:4999) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4594) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4534) 在 android.app.ActivityThread.access$1500(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:java.lang.ClassNotFoundException:在路径上找不到类“io.fabric.sdk.android.services.common.FirebaseInfo”:DexPathList [[zip file“/data/app/com.rocketjourney-2/base .apk"],nativeLibraryDirectories=[/data/app/com.rocketjourney-2/lib/x86, /vendor/lib, /system/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:469) 在 com.crashlytics.android.CrashlyticsInitProvider.onCreate(CrashlyticsInitProvider.java:22) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1696) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1671) 在 android.app.ActivityThread.installProvider(ActivityThread.java:4999) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4594) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4534) 在 android.app.ActivityThread.access$1500(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 抑制:java.lang.ClassNotFoundException:io.fabric.sdk.android.services.common.FirebaseInfo 在 java.lang.Class.classForName(本机方法) 在 java.lang.BootClassLoader.findClass(ClassLoader.java:781) 在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 16 更多 原因:java.lang.NoClassDefFoundError: Class not found using the boot class loader;没有可用的堆栈
希望你们能帮助我,我将非常感激!
【问题讨论】:
你收到什么 gradle 错误? 【参考方案1】:如果您的 minSdkVersion
为 21,则无需添加 multidex 支持。
来自documentation:
对 Android 5.0 及更高版本的 Multidex 支持
Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,它本机支持从 APK 文件加载多个 DEX 文件。 ART 在应用程序安装时执行预编译,扫描 classesN.dex 文件并将它们编译成单个 .oat 文件以供 Android 设备执行。因此,如果您的 minSdkVersion 为 21 或更高,则不需要 multidex 支持库。
因此,您需要从 build.gradle 中删除 compile 'com.android.support:multidex:1.0.1'
。然后您需要使用Application
扩展您的RJApplication。还要从您的attachBaseContext()
中删除MultiDex.install(this);
。
您需要做的就是通过添加multiDexEnabled true
将multiDexEnabled 设置为true。请参考Configure your app for multidex
【讨论】:
我怎么有这个:Error:Execution failed for task ':app:transformClassesWithDexForDevDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: field ID not in [0, 0xffff]: 65536
糟糕...抱歉,您只需在 build.gradle 中添加 multiDexEnabled true
。我会更新答案。
这可能是另一个问题。尝试将 crashlytic 更改为此 compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') transitive = true exclude group: 'com.android.support', module: 'support-annotations'
我已经尝试添加那行代码但仍然是同样的错误以上是关于VM 有 multidex 支持,MultiDex 支持库被禁用。问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用新的 Android Multidex 支持库启用多索引
如何使用新的 Android Multidex 支持库启用多索引
android MultiDex multidex原理下超出方法数的限制问题