2011-10-24 11 views
1

注:プロジェクトを少し修正して、これを使って再構築することができました:https://github.com/imsizon/ant-android-scala。 AndroidでScalaを構築するのに問題がある人にとって、これは良いスタートです。AndroidでScala用のAntビルドでdexが失敗する

私は、antを使ってAndroid SDKのリビジョン12にスカラをビルドしていました(ここでの手順は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には最適ではありません。誰かが問題に光を当てることができれば、それは非常に高く評価されるだろう。

+1

これはdxコードのアサーションのように見えますが、それはdxのバグかもしれません。私はあなたのスタックトレースのコード内のその場所を簡単に見て、取引が何であるかを調べることができるかどうかを確認します – JesusFreke

+0

r14のソースが現在利用可能なようには見えません - そして、私がOutputFinisherクラスがスタックトレースと一致していないように見えます。これはr14で修正されたことを意味します。そう。これはrxに導入されたdxのバグであると思われる以外は、私がatmと言うことはあまりありません。 – JesusFreke

+0

実際にそれを追跡して追跡したい場合は、dx jarを逆コンパイルして、アサーションがスローされているコードを見て、なぜそれを判断できるかを確認します。 – JesusFreke

答えて

0

質問より:このプロジェクトを少し修正して、これを使って再構築することができました:https://github.com/imsizon/ant-android-scala。 AndroidでScalaを構築するのに問題がある人にとって、これは良いスタートです。

2

dexファイル内のメソッドの総数が65,535個に制限されている可能性があります。Android issue 20814。その場合は、ProGuardでコンパイルしたコードを縮小して最適化すると、あなたが言及したページに示唆されているように役立ちます。

+0

[Issue 7147](http://code.google.com/p/android/issues/detail?id=7147)もあります。 –

関連する問題