【问题标题】:Cannot run project in Android Studio无法在 Android Studio 中运行项目
【发布时间】:2014-02-12 03:18:05
【问题描述】:

当我尝试在 Android Studio 中运行我的项目时,我收到以下错误消息

Execution failed for task ':CricHQ:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Applications/Android Studio.app/sdk/build-tools/19.0.1/dx -JXmx4g --dex --output 
Error Code:
2
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 66514 into a non-jumbo instruction!
    at com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:108)
    at com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:25)
    at com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:71)
    at com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)
    at com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)
    at com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:48)
    at com.android.dx.merge.DexMerger.transformCode(DexMerger.java:840)
    at com.android.dx.merge.DexMerger.transformMethods(DexMerger.java:811)
    at com.android.dx.merge.DexMerger.transformClassData(DexMerger.java:783)
    at com.android.dx.merge.DexMerger.transformClassDef(DexMerger.java:680)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:540)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

谁能帮我解决这个问题?非常感谢。

【问题讨论】:

    标签: android android-studio


    【解决方案1】:

    如果你使用的是没有 gradle 的 Android Studio,那么 Preferences->Compiler->Android Compilers->Force Jumbo Mode

    如果您使用 gradle,则添加到 build.gradle

    android {
        dexOptions {
           jumboMode true
        }
    

    【讨论】:

    • 我把上面的配置加到build.gradle里了,还是不行:(。你有什么想法吗?
    • 尝试设置 incremental = true 和 javaMaxHeapSize “4g” dexOptions。
    • 增量和最大堆大小设置对我有用,谢谢@jeraldo
    【解决方案2】:

    Android 对单个 dex 文件中可以包含的 Java 方法的数量存在限制,而您正在达到该限制。不幸的是,没有简单的解决方案。您的选择是:

    如果这些方法不起作用,可以将您的应用程序拆分为多个 dex 文件并使用类加载器技巧使其在运行时工作,但这会更复杂。

    【讨论】:

    • 非常感谢您的帮助。从项目中删除一个库后,编译和运行就可以了。
    • 你能给我更多关于如何在调试版本中使用 ProGuard 的信息吗?
    • “如果这些方法不起作用,可以将您的应用程序拆分为多个 dex 文件并使用类加载器技巧使其在运行时工作,但这更复杂。” 比 proguard 还要复杂?难以置信。
    • android-developers.blogspot.com/2011/07/… -- 基本上你需要一个自定义类加载器,并且你必须小心如何在各个 dex 文件之间拆分类,以便所有依赖关系都能解决,前提是它可以在全部。
    猜你喜欢
    • 2023-03-30
    • 2017-07-24
    • 2020-03-22
    • 2016-05-25
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多