dex не работает при сборке ant для Scala на Android

ПРИМЕЧАНИЕ: с небольшой модификацией проекта я смог собрать его снова, используя это: https://github.com/imsizon/ant-android-scala . Для тех, у кого возникли проблемы с созданием Scala для Android, это хорошее начало.

Я собирал scala в версии 12 Android SDK с помощью ant (следовал инструкциям здесь: http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android.) Все шло хорошо, пока я не обновился до последней версии Android SDK (редакция 14). Теперь я получаю следующий вывод:

Buildfile: /Users/matt/Documents/workspace/ScalaEclipseAndroid/build.xml
-set-mode-check:
-set-debug-files:
-set-debug-mode:
-debug-obfuscation-check:
-setup:
     [echo] Gathering info for ScalaEclipseAndroid...
    [setup] Android SDK Tools Revision 14
    [setup] Project Target: Google APIs
    [setup] Vendor: Google Inc.
    [setup] Platform Version: 2.1
    [setup] API level: 7
    [setup] ------------------
    [setup] Resolving library dependencies:
    [setup] No library dependencies.
    [setup] ------------------
    [setup] WARNING: Attribute minSdkVersion in AndroidManifest.xml (4) is lower than the project target API level (7)
-build-setup:
     [echo] Creating output directories if needed...
-pre-build:
-code-gen:
     [echo] ----------
     [echo] Handling aidl files...
     [aidl] No aidl files to compile.
     [echo] ----------
     [echo] Handling RenderScript files...
[renderscript] No renderscript files to compile.
     [echo] ----------
     [echo] Handling Resources...
     [aapt] No changed resources. R.java and Manifest.java untouched.
-pre-compile:
-compile:
   [scalac] Compiling 0 scala and 1 java source files to /Users/matt/Documents/workspace/ScalaEclipseAndroid/bin/classes
    [javac] /Development/android-sdk-mac_x86/tools/ant/build.xml:615: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
   [scalac] Compiling 0 scala and 1 java source files to /Users/matt/Documents/workspace/ScalaEclipseAndroid/bin/classes
-post-compile:
-obfuscate:
-dex:
      [dex] Converting compiled files and external libraries into /Users/matt/Documents/workspace/ScalaEclipseAndroid/bin/classes.dex...
       [dx] UNEXPECTED TOP-LEVEL ERROR:
       [dx] java.lang.AssertionError
       [dx]     at com.android.dx.dex.code.OutputFinisher.findExpandedOpcodeForInsn(OutputFinisher.java:525)
       [dx]     at com.android.dx.dex.code.OutputFinisher.calculateReservedCount(OutputFinisher.java:466)
       [dx]     at com.android.dx.dex.code.OutputFinisher.reserveRegisters(OutputFinisher.java:402)
       [dx]     at com.android.dx.dex.code.OutputFinisher.finishProcessingAndGetList(OutputFinisher.java:358)
       [dx]     at com.android.dx.dex.code.DalvCode.finishProcessingIfNecessary(DalvCode.java:108)
       [dx]     at com.android.dx.dex.code.DalvCode.getInsns(DalvCode.java:185)
       [dx]     at com.android.dx.dex.file.CodeItem.place0(CodeItem.java:223)
       [dx]     at com.android.dx.dex.file.OffsettedItem.place(OffsettedItem.java:242)
       [dx]     at com.android.dx.dex.file.MixedItemSection.placeItems(MixedItemSection.java:312)
       [dx]     at com.android.dx.dex.file.DexFile.toDex0(DexFile.java:543)
       [dx]     at com.android.dx.dex.file.DexFile.toDex(DexFile.java:216)
       [dx]     at com.android.dx.command.dexer.Main.writeDex(Main.java:574)
       [dx]     at com.android.dx.command.dexer.Main.run(Main.java:218)
       [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
       [dx]     at com.android.dx.command.Main.main(Main.java:95)

BUILD FAILED
/Development/android-sdk-mac_x86/tools/ant/build.xml:772: The following error occurred while executing this line:
/Development/android-sdk-mac_x86/tools/ant/build.xml:774: The following error occurred while executing this line:
/Development/android-sdk-mac_x86/tools/ant/build.xml:786: The following error occurred while executing this line:
/Development/android-sdk-mac_x86/tools/ant/build.xml:248: null returned: 3

Сама ошибка не содержит много информации, и я не лучший с Ant. Если кто-то может пролить свет на проблему, это будет очень признательно.


person Matt    schedule 24.10.2011    source источник
comment
Это выглядит как утверждение в коде dx, что звучит так, как будто это ошибка в dx. Я быстро взгляну на это место в коде из вашей трассировки стека и посмотрю, смогу ли я определить, в чем дело.   -  person JesusFreke    schedule 24.10.2011
comment
Не похоже, что исходный код для r14 в настоящее время доступен, и исходный код, который у меня есть для класса OutputFinisher, похоже, не совпадает с вашей трассировкой стека, что подразумевает, что он был изменен в r14. Так. Я мало что могу сказать, кроме того, что это похоже на ошибку в dx, появившуюся в r14.   -  person JesusFreke    schedule 24.10.2011
comment
Если вы действительно хотите попытаться отследить это, вы можете декомпилировать dx jar и взглянуть на код, в котором выдается утверждение, чтобы увидеть, сможете ли вы определить, почему.   -  person JesusFreke    schedule 24.10.2011
comment
Спасибо за информацию и безумно быстрый ответ. Я думал, что это может быть ошибка и в dx.   -  person Matt    schedule 24.10.2011


Ответы (2)


Вы можете столкнуться с ограничением в 65 535 на общее количество методов в файле dex: Выпуск Android 20814. В этом случае может помочь сжатие и оптимизация скомпилированного кода с помощью ProGuard, как это предлагается на упомянутых вами страницах.

person Eric Lafortune    schedule 19.11.2011
comment
Существует также проблема 7147. - person om-nom-nom; 27.07.2012

Из вопроса: с небольшой модификацией проекта я смог снова построить его, используя это: https://github.com/imsizon/ant-android-scala. Для тех, у кого есть проблемы с созданием Scala на Android, это хорошее начало.

person Matt    schedule 02.02.2012