【问题标题】:dex fails on ant build for Scala on Androiddex 在 Android 上为 Scala 构建 ant 失败
【发布时间】:2011-10-24 01:45:02
【问题描述】:

注意:对项目稍作修改后,我就可以使用它再次构建:https://github.com/imsizon/ant-android-scala。对于在 Android 上构建 Scala 有困难的人来说,这是一个好的开始。

我正在使用 ant 在 Android SDK 的第 12 版中构建 scala(按照此处的说明操作: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 不是最好的。如果有人能对这个问题有所了解,将不胜感激。

【问题讨论】:

  • 这看起来像是 dx 代码中的一个断言,听起来可能是 dx 中的一个错误。我将从您的堆栈跟踪中快速查看代码中的那个位置,看看我是否可以确定交易是什么
  • 看起来 r14 的源目前不可用 - 我拥有的 OutputFinisher 类的源似乎与您的堆栈跟踪不匹配,这意味着它已在r14。所以。除了这似乎是 r14 中引入的 dx 中的错误之外,我无话可说。
  • 如果你真的想尝试追踪它,你可以反编译dx jar,并查看抛出断言的代码,看看你是否能确定原因。跨度>
  • 感谢您提供的信息和非常快速的响应。我在想这也可能是 dx 中的一个错误。

标签: android scala ant dex


【解决方案1】:

您可能遇到了 dex 文件中方法总数的 65,535 个限制:Android issue 20814。在这种情况下,按照您提到的页面上的建议,使用 ProGuard 缩小和优化编译代码可能会有所帮助。

【讨论】:

【解决方案2】:

来自问题:对项目进行一些修改后,我可以使用它再次构建:https://github.com/imsizon/ant-android-scala。对于在 Android 上构建 Scala 有困难的人来说,这是一个好的开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多