Мы долгое время боролись с префиксом метода 65k и уже сделали большую часть оптимизаций. Теперь я пытаюсь добавить плагин Jacoco и я снова получаю предел Dex ошибку:Превышение предела 65k Dex, но инструменты dex-method-count говорят, что их намного меньше
Error:Execution failed for task ‘:MyProject:dexExternalBetaDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Users/orrieshannon/Code/sdk/sdk/build-tools/21.1.1/dx --dex --no-optimize --output /Me/MyProject/build/intermediates/dex/externalBeta/debug --input-list=/Me/MyProject/build/intermediates/tmp/dex/externalBeta/debug/inputList.txt
Error Code:
2
Output:
objc[80218]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: Cannot merge new index 66105 into a non-jumbo instruction!
at com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)
at com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)
at com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)
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:49)
at com.android.dx.merge.DexMerger.transformCode(DexMerger.java:842)
at com.android.dx.merge.DexMerger.transformMethods(DexMerger.java:813)
at com.android.dx.merge.DexMerger.transformClassData(DexMerger.java:786)
at com.android.dx.merge.DexMerger.transformClassDef(DexMerger.java:682)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:542)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
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)
Однако, когда я бегу DEX-метод подсчета инструмент (найденный здесь https://github.com/mihaip/dex-method-counts) он говорит, что мы находимся только в 56k.
Read in 56024 method IDs.
<root>: 56024
: 4
android: 10877
accessibilityservice: 6
...
Библиотека Jacoco только 1309 методы (подсчитано используя тот же инструмент Dex-метод подсчета), поэтому мы должны быть хорошо под 65k предела.
Любые идеи? Кто-нибудь еще заметил, что инструмент count-de-method-count подсчитывает количество методов?
Я не уверен, но на основе трассировки стеки, то кажется, что это может быть проблемой строки, а не проблема методы. Формат dex поддерживает строки> 64k, конечно, но похоже, что вы столкнулись с краем в dx, связанным с объединением файлов dex с jumbo-строками. Это всего лишь предположение, но я на самом деле не смотрел источник dx в местоположении из вашей трассировки стека. – JesusFreke
А, вот и все. Спасибо!! Я отправлю ответ, но мне просто нужно включить jumboMode. – odiggity