【问题标题】:Android Multidex support library is disabledAndroid Multidex 支持库已禁用
【发布时间】:2017-04-05 10:11:40
【问题描述】:

我的应用程序中的 multidex 支持出现了一些问题,实际上应用程序安装正常,但在此过程中,一些活动崩溃了,应用程序重新启动了主要活动。在 logcat 中我发现了这个:

I/MultiDex: install
I/MultiDex: VM has multidex support, MultiDex support library is disabled.

但我遵循了启用 Multidex 支持的建议:

分级:

compileSdkVersion 25
buildToolsVersion '25.0.2'

defaultConfig {
    applicationId "com..company.package"
    minSdkVersion 15
    targetSdkVersion 25
    multiDexEnabled true
    versionCode 21
    versionName "2.1.3"

}

dexOptions {
    javaMaxHeapSize "4g"
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//compile project(':rangebar')
compile('com.github.afollestad.material-dialogs:core:0.8.5.3@aar') { transitive = true }
compile('com.weiwangcn.betterspinner:library-material:1.1.0') {
    exclude group: 'com.android.support', module: 'appcompat-v7'
}
compile files('libs/itextpdf-5.5.9.jar')
compile 'com.android.support:multidex:1.0.1'
...

应用程序类扩展了 Multidex:

public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
}

我不知道我究竟缺少什么来摆脱这件事

提前致谢。

【问题讨论】:

  • 你要么在 attachBaseContext 方法中使用 multidex 安装,要么使用两者扩展 MultidexApplication 都是没有意义的,因为两者都做同样的事情
  • @M.Ashish 是的,谢谢,成功了

标签: android android-multidex


【解决方案1】:

I/MultiDex:安装 I/MultiDex:VM 支持 multidex,MultiDex 支持库已禁用。

你应该设置

public class MyApplication extends Application {

清单

<application
    android:name=".MyApplication"
   ....>

然后清理-重建-运行

【讨论】:

  • 是的,这也是 M.Ashish 的回答
  • @Houssem 由extends MultiDexApplication 引起的冲突
  • 但第一次遇到这个问题。上升了我没有将我的课程扩展到 MultidexApplication,现在问题已解决,但消息“VM 具有 multidex 支持,MultiDex 支持库已禁用”。仍在显示
  • 你认为为什么每个人都有一个扩展Application的类?
【解决方案2】:

还要补充到上面的答案^

在 Android 文档中它说,如果您的 minSdkVersion 为 21 或更高,则不需要 multidex 支持库。所以,我明白你为什么在那里这样做了https://developer.android.com/studio/build/multidex.html#mdex-on-l

您的选项如下: https://developer.android.com/studio/build/multidex.html#mdex-gradle

别忘了在你的 build.gradle(app) 中添加

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 28
        multiDexEnabled true
   }
    ...
}

选项 1) 如果您不覆盖 Application 类,请编辑清单文件以在标记中设置 android:name,如下所示: 这将是您的条目:android.support.multidex.MultiDexApplication

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
            <activity
                    android:name=".MainActivity"
                    android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
    </application>
</manifest>

选项 2) 如果您确实重写了 Application 类,请将其更改为扩展 MultiDexApplication(如果可能),如下所示:

public class MyApplication extends MultiDexApplication { ... }

选项 3) 或者,如果您确实覆盖了 Application 类但无法更改基类,那么您可以改为覆盖 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用 multidex:您添加下面的代码而不扩展 MultiDexApplication

public class MyApplication extends **SomeOtherApplication** {

  //You add the code below without extending **MultiDexApplication**
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

注意:在 MultiDex.install() 完成之前,请勿通过反射或 JNI 执行 MultiDex.install() 或任何其他代码。 Multidex 跟踪不会跟踪这些调用,导致 ClassNotFoundException 或由于 DEX 文件之间的错误类分区而导致验证错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多