2014-02-12 3 views
3

Когда я пытался запустить свой проект в Android Studio, я получил следующее сообщение об ошибкеНе удается запустить проект в 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) 

Любой человек может помочь мне с этой проблемой? Большое спасибо.

ответ

8

В Android существует ограничение на количество методов Java, которые вы можете иметь в одном файле dex, и вы нажимаете этот предел. К сожалению, нет простого решения. Ваши варианты:

  • Упростите свой код. Если вы используете множество библиотек, посмотрите, можете ли вы сократить количество используемых библиотек. В некоторых библиотеках есть много методов.
  • Используйте ProGuard даже в своих отладочных сборках. ProGuard лишит неиспользованные методы и может сэкономить много места. Для того, чтобы начать работу на ProGuard, посмотрите на эти ссылки:

Если эти подходы не работают, можно разделить приложение на несколько файлов тны и использовать ClassLoader уловки, чтобы заставить его работать во время выполнения, но это больше сложно.

+0

Спасибо большое для вашей помощи. После того, как я удалил библиотеку из проекта, она станет прекрасной для компиляции и запуска. – user3229536

+0

Можете ли вы дать мне больше информации о том, как использовать ProGuard в отладочных сборках? – user3229536

+0

Отредактировал мой ответ. –

17

Если вы используете Android Studio без Gradle затем Настройки-> от компилятора> Android Compilers-> Force Jumbo Mode

Если с помощью Gradle затем добавить к build.gradle

android { 
    dexOptions { 
     jumboMode true 
    } 
+7

Я добавил указанную выше конфигурацию в 'build.gradle', но все равно не повезло :(У вас есть идеи? –

+3

Попробуйте установить incremental = true и javaMaxHeapSize« 4g »dexOptions. –

+1

параметры инкрементного и максимального размера кучи работали я благодарю @jeraldo – AndroidNoob

Смежные вопросы