仅在运行测试时抛出DexIndexOverflow异常

仅在运行测试时抛出DexIndexOverflow异常

我可以在我的调试和发布变体中成功地构建和运行我的Android应用程序,没有问题。然而,当我尝试运行我的新单元测试时(我以前从来没有过它们),我就会感到恐惧。DexIndexOverflow异常..我怀疑ProGuard不是与我的单元测试一起运行,而是与我的正常调试和发布BuildTypes一起运行。

我该怎么办才能跑ProGuard在我的单元测试运行配置中?我搜遍了梯度文件ProGuard文档,以及AndroidStudio文档来解决这个问题,但是我什么也没找到。


PIPIONE
浏览 369回答 3
3回答

森林海

com.android.dex.DexIndexOverflowException:&nbsp;method&nbsp;ID&nbsp;not&nbsp;in&nbsp;[0,&nbsp;0xffff]:&nbsp;65536Android应用程序(APK)文件以Dalvik Executable(DEX)文件的形式包含可执行字节码文件,其中包含用于运行应用程序的编译代码。Dalvik Executable规范将单个DEX文件中可引用的方法总数限制为65,536个,包括您自己代码中的Android框架方法、库方法和方法。要克服这个限制,需要将应用程序构建过程配置为生成多个DEX文件,称为Multidex配置。AndroidSDK构建工具21.1及更高版本中提供的用于Gradle的Android插件支持Multidex作为构建配置的一部分。在尝试为Multidex配置应用程序之前,请确保使用SDKManager将AndroidSDK、BuildTools和AndroidSupportRepository更新为最新版本。将应用程序开发项目设置为使用Multidex配置需要对应用程序开发项目进行一些修改。特别是,您需要执行以下步骤:更改分级生成配置以启用Multidex修改清单以引用MultiDexApplication类修改您的应用程序Gradle构建文件配置,以包括支持库,并启用Multidex输出。&nbsp;&nbsp;&nbsp;&nbsp;android&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;compileSdkVersion&nbsp;25 &nbsp;&nbsp;&nbsp;&nbsp;buildToolsVersion&nbsp;"25.0.2" &nbsp;&nbsp;&nbsp;&nbsp;defaultConfig&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minSdkVersion&nbsp;14 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetSdkVersion&nbsp;25 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enabling&nbsp;multidex&nbsp;support. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiDexEnabled&nbsp;true &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;...}dependencies&nbsp;{ &nbsp;&nbsp;compile&nbsp;'com.android.support:multidex:1.0.3'&nbsp;}在您的清单中添加MultiDexApplication类的多氨纶支持应用程序元素的库。<?xml&nbsp;version="1.0"&nbsp;encoding="utf-8"?><manifest&nbsp;xmlns:android="http://schemas.android.com/apk/res/android" &nbsp;&nbsp;&nbsp;&nbsp;package="com.example.android.multidex.myapplication"> &nbsp;&nbsp;&nbsp;&nbsp;<application &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:name="android.support.multidex.MultiDexApplication"> &nbsp;&nbsp;&nbsp;&nbsp;</application></manifest>阅读关于多重Dex如果您的Application类正在扩展其他类,而您不想或不能更改它,override attachBaseContext()如下所示:public&nbsp;class&nbsp;MyApplication&nbsp;extends&nbsp;MultiDexApplication&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;@Override&nbsp; &nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;attachBaseContext(Context&nbsp;base)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.attachBaseContext(base);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MultiDex.install(this);&nbsp; &nbsp;&nbsp;&nbsp;}&nbsp;}然后<?xml&nbsp;version="1.0"&nbsp;encoding="utf-8"?><manifest&nbsp;xmlns:android="http://schemas.android.com/apk/res/android" &nbsp;&nbsp;&nbsp;&nbsp;package="com.example.android.multidex.myapplication"> &nbsp;&nbsp;&nbsp;&nbsp;<application &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:name=".MyApplication"> &nbsp;&nbsp;&nbsp;&nbsp;</application></manifest>结语虽然图书馆在大多数情况下解决了DEX 64K问题,但它应该被视为最后的手段。在尝试使用它之前,您应该检查项目中不需要的依赖项,并使用ProGuard尽可能多地删除未使用的代码。

斯蒂芬大帝

升级到Gradle插件3.1.1为我解决了这个问题,如建议在这个答案中
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android