0

apk にパッケージ化できないサブプロジェクトを含む sbtrootプロジェクトがあります。actionbarsherlock

両方のプロジェクトを正常にビルドできますが、実行すると、actionbarsherlock のクラスが 2 回 dex されているタスクandroid:packageからエラーが発生します。root/android:dex

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/actionbarsherlock/ActionBarSherlock$Implementation;

実行したところ、ルート プロジェクトとサブプロジェクトの両方からlast root/android:dex含まれていることがわかりました。intermediates/class.jar

.../actionbarsherlock/bin/intermediates/classes.jar,
.../bin/intermediates/classes.jar

これでdexエラーが説明されましたが、それを回避するためにビルドを変更する方法がわかりません。

ルートプロジェクトにソースがなく、次のような単純なビルド構成がある、はるかに単純なプロジェクトでこの問題を再現することができました。

// build.sbt for root
androidBuild

javacOptions in Compile ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil

lazy val root = project.in(file(".")).dependsOn(abs)

lazy val abs = project.in(file("actionbarsherlock"))

と:

// build.sbt for subproject
androidBuild

javacOptions in Compile ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil

libraryDependencies ++= Seq(
  "com.android.support" % "support-v4" % "18.0.0"
)

両方のプロジェクトには次のものがありproject/build.propertiesます。

sbt.version=0.13.9

project/plugins.sbt:

addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.0")

ファイル階層は次のようになります。

.
├── actionbarsherlock
│   ├── AndroidManifest.xml
│   ├── build.sbt
│   ├── lint.xml
│   ├── project
│   │   ├── build.properties
│   │   └── plugins.sbt
│   ├── project.properties
│   ├── README.md
│   ├── res
│       ├── ...
│   ├── src
│   │   ├── ...
│   └── test
│       └── ...
├── AndroidManifest.xml
├── build.sbt
├── lint.xml
├── proguard-project.txt
├── project
│   ├── build.properties
│   └── plugins.sbt
├── project.properties
├── README.MD
├── res
│   ├── ...
├── src

クリーンなチェックアウトから sbt で使用している典型的なプロセスは次のとおりです。

project abs
compile
project root
compile
android:package

前もって感謝します!

4

1 に答える 1