Java cordova运行android失败,com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]:65536中
在过去的几天里,我一直无法运行Java cordova运行android失败,com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]:65536中,java,cordova,Java,Cordova,在过去的几天里,我一直无法运行cordova run android(或者更确切地说,ionic run android)在我的本地设备上测试我的ionic应用程序。当我运行该命令时,我得到了通常的公吨输出,以及几个Java运行时进程100%的CPU使用率,然后构建最终失败,标题中说明了这一点。控制台显示了这一点(被截断,因为有大量的输出): :compiledBugndk最新:compiledBugSources :transformClassesWithDexForDebug意外的顶级异常:
cordova run android
(或者更确切地说,ionic run android
)在我的本地设备上测试我的ionic应用程序。当我运行该命令时,我得到了通常的公吨输出,以及几个Java运行时进程100%的CPU使用率,然后构建最终失败,标题中说明了这一点。控制台显示了这一点(被截断,因为有大量的输出):
:compiledBugndk最新:compiledBugSources
:transformClassesWithDexForDebug意外的顶级异常:
com.android.dex.DexIndexOverflowException:方法ID不在[0]中,
0xffff]:65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) FAILED
构建失败
总时间:1分钟40.116秒
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
失败:生成失败,出现异常
错误:任务:transformClassesWithDexForDebug的执行失败
com.android.build.api.transform.TransformException:
com.android.ide.common.process.ProcessException:
org.gradle.process.internal.exeception:
进程命令
“C:\Program Files\Java\jdk1.8.0\u 73\bin\Java.exe”已完成
非零出口值2
尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。错误:带有args的命令cmd的错误代码1:
/s、 /c,“E:\Documents\GitHub\app.auroras.live\platforms\android\gradlew
cdvBuildDebug-b
E:\Documents\GitHub\app.auroras.live\platforms\android\build.gradle
-PcdvBuildArch=arm-Dorg.gradle.daemon=true-Pandroid.UseDeprecatedNDDK=true”
我只是去更新了Android SDK中任何必要的工具和库,然后删除并重新添加了Android平台(cordova platform add Android
),确保检查所有相关的平台文件都已删除,并且项目仍然无法构建
编辑:我还运行了cordova clean
,但这不起作用。看起来Google Play服务库让我的应用程序达到了64000个方法的限制,但除了手动调整我的gradle文件(我还不太熟悉),我不确定如何缩小它
编辑2:我试图调整build.gradle文件以删除对“com.google.android.gms:play services:+”的引用(我认为这将我的应用程序推高到65535方法限制之上),但它总是回来
我还尝试了一个build-extras.gradle来删除依赖项,但又出现了一个错误。理想情况下,我希望得到一个答案,而不是每次我想构建我的应用程序时都需要不断地重新工作,但在这个阶段,我渴望得到几乎任何东西
我最近确实升级了cordova、ionic和bower(使用npm安装-g cordova ionic bower
),因为Windows上我的%PATH%变量出现了问题,但我不认为这会破坏任何东西
我正在运行Windows 10,x64。java-version
报告:
java版本“1.8.0_73”
Java(TM)SE运行时环境(build 1.8.0_73-b02)
Java HotSpot(TM)64位服务器虚拟机(构建25.73-b02,混合模式)
有什么建议吗
:transformClassesWithDexForDebug意外的顶级异常:
com.android.dex.DexIndexOverflowException:方法ID不在[0]中,
0xffff]:65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) FAILED
此消息听起来好像您的项目太大了
您的方法太多。dex只能有65536个方法
由于gradle插件0.14.0
和buildtools 21.1.0
可以使用multidex
支持
只需将这些行添加到build.gradle
:
android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
另外,在清单中,将multidex支持库中的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服务:
资源链接:
优化多索引开发构建
作为multidex开发过程的一部分执行的例行构建通常需要更长的时间,并且可能会减慢您的开发过程
为了减少multidex输出通常较长的构建时间,您应该使用Android插件为开发风格和生产风格在构建输出上创建两个变体
以下构建配置示例演示了如何在Gradle构建文件中设置这些风格:
android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
资源链接:
除了@SkyWalker的答案之外,我还发现了一个更“干净”的方法(也就是说,不需要手动修改
build.gradle
文件)
只需使用
cordova插件add--save安装即可https://github.com/jwall149/cordova-multidex
在下一次构建时,将启用multidex,这将解决此问题。不建议直接修改build.gradle,因为在构建android平台后,更改将被覆盖。要构建的任何扩展.gradle应该按照中的建议添加额外的文件,如“build extras.gradle”。正如Grayda所建议的,更干净的解决方案是使用插件,它可以像charm一样完成任务
又遇到一个执行此任务且处于活动状态的插件。您可以使用以下命令安装该插件:
cordova plugin add https://github.com/solent/cordova-plugin-multidex
发布答案,因为它可能会让其他人受益。我终于能够让我的应用程序生成了,谢谢你。我所需要做的就是将你的第一批代码添加到我的Cordova Platform文件夹中的build-extras.gradle文件中,并正确加载。看起来还有一个支持multidex的工具,所以这可能是一个更干净的解决方案对我来说。但是再次感谢!@Grayda非常欢迎你,感谢你的分享。奖励你+50奖金。虽然你的答案不是完全面向Cordova的,但这是一个很好的解释,也是一个很好的起点,可以通过builds-extra.gradle文件/我根据你的答案找到的multidex插件来修复它。再次感谢:)