当前位置: 首页 > 知识库问答 >
问题:

DexIndex更新到最新的应用程序组件和支持库后的溢出异常问题

昝存
2023-03-14

我正在通过gradle使用以下设置:

compileSdkVersion 21
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.0.2
ANDROID_BUILD_SDK_VERSION=21

我的评分文件中也有以下设置:

compile 'com.android.support:support-annotations:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'

我总是得到错误UNEXPECTED TOP LEVEL EXCEPTION
但是当我将21.0.0设为20.0.0时,它工作正常...但是我无法访问任何Android API 21选项。我在这里做错了什么吗?我如何让它在没有此异常的情况下编译?除了其他等级项目(facebook等)之外,我没有其他任何地方的支持罐。

这是完整的堆栈跟踪:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
    at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:283)
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)

共有3个答案

湛联
2023-03-14

要么解决方案太大(使用MultiDex ),要么你编译并在你的项目中包含一些不需要的东西。我的小项目出了这个问题。以下是我解决这个问题的方法:

我从build.gradle中删除了这个:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

我手动从应用程序根目录中删除了我的构建文件夹。问题已修复。

卢毅
2023-03-14

1)将依赖项添加到应用程序build.gradle文件

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

2) 如果不重写应用程序类,请编辑清单文件以在 标记中设置 android:name,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>

如果确实重写了应用程序类,请将其更改为扩展MultiDexApplication(如果可能),如下所示:

public class MyApplication extends MultiDexApplication { ... }

或者,如果您确实重写了Application类,但无法更改基类,则可以重写attachBaseContext()方法并调用MultiDex.install(this)以启用multidex:

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

3) 将多索引支持添加到默认配置中

defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 26
        ...
        // Enabling multidex support.
        multiDexEnabled true
    }
...
周超英
2023-03-14

此消息听起来好像您的项目太大了。

你的方法太多了。dex只能有65536个方法。

从 gradle 插件 0.14.0 和构建工具 21.1.0 开始,您可以使用 multidex 支持。

只需在<code>build.gradle<code>中添加以下行:

android {

    defaultConfig {
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

另外,在您的< code>Manifest中,将来自multidex支持库的< code>MultiDexApplication类添加到Application元素中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication"> 
        ...
    </application>
</manifest>

如果您使用的是自己的应用程序类,请将父类从“应用程序”更改为“多索引应用程序”

 类似资料:
  • 我只是尝试在google play核心库API提供的应用程序更新服务中实现。 在发布了较新版本的应用程序后进行了内部测试。我在play store中获得了更新版本的应用程序,如图1所示。但是,我无法看到“更新”按钮在同一页上,正如屏幕上的-2。另外,应用程序是禁用的,以更新根据代码的实现。请帮我处理这件事。谢谢。屏幕肖像1屏幕肖像2 ` }`

  • 今天早上,我从谷歌的开发者控制台收到一封邮件,说我正在使用一个存在安全漏洞的OpenSSL版本。 实际上我只是在维护代码,我还没有开发它。但是,我应该解决这个问题。 我想知道如何在我的Android应用程序中将打开的SSL更新到最新的支持版本。 尝试了很多搜索,但没有如何在Android应用程序中执行此操作。 对于今天早上收到相同邮件的所有开发人员来说,这将是一个解决方案。 提前谢谢。

  • 我试图弄清楚如何从Play商店强制更新最新版本。 由于我的android应用程序的旧版本已经在play store中,我还没有执行检查,以获取应用程序的当前版本,并与链接中指定的play store应用程序版本进行比较,请强制更新android应用程序 当我想上传新版本的代码时,他才可以使用新版本。 你能帮帮我吗?

  • 嘿,伙计们,我最近将我的mac更新为最新的OS X 10.12.3以前我的rails项目运行良好,现在每当我启动rails服务器时,我的项目都会收到这个错误。我尝试了在stackoverflow中提供的很多不同的解决方案,但它仍然不起作用。 这里有一些我尝试过的 Postgres无法连接到服务器 PostgreSQL错误“无法连接到服务器:没有这样的文件或目录” 谢谢,请帮帮我

  • 本文列出了 Dreamweaver 中提供的所有应用程序内更新。有关什么是应用程序内更新以及如何启用自动或手动更新模式的信息,请参阅安装应用程序内更新。 应用程序内更新 Bootstrap 更新 - 2016 年 8 月 Bootstrap 更新 - 2015 年 12 月 Bootstrap 更新 - 2016 年 8 月 此更新可将 Dreamweaver 中的 Bootstrap 版本升级到