Od dłuższego czasu zmagaliśmy się z ograniczeniem metody 65k i już zrobiliśmy większość optymalizacji. Teraz próbuję dodać wtyczkę Jacoco a ja ponownie uzyskiwanie błąd limitu Dex:Osiągnięcie limitu metody 65x Dex, ale narzędzia do liczenia metod dex mówią, że jest znacznie mniej
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)
Jednak kiedy uruchomić narzędzie Dex-metoda-count (znaleźć tutaj https://github.com/mihaip/dex-method-counts) mówi, jesteśmy dopiero na Metody 56k.
Read in 56024 method IDs.
<root>: 56024
: 4
android: 10877
accessibilityservice: 6
...
Biblioteka Jacoco zaledwie 1309 metody (liczone przy użyciu tego samego narzędzia dek-metody zliczania), więc powinny również być poniżej 65k granicy.
Wszelkie pomysły? Ktoś jeszcze zauważył narzędzie do liczenia metod dex, które zaniżało liczbę metod?
Nie jestem pewien, ale na podstawie śladu stosu, wydaje się, że to może być problem ciąg, a nie problem metoda. Format dex obsługuje łańcuchy> 64k oczywiście, ale wygląda na to, że mogłeś trafić w skrzynkę krawędzi w dx, związaną z łączeniem plików dex z ciągami jumbo. To tylko przypuszczenie - nie szukałem w źródle dx w miejscu z twojego śladu stosu. – JesusFreke
Ah, to wszystko. Dziękuję Ci!! Napiszę odpowiedź, ale musiałem tylko włączyć JumboMode. – odiggity