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
前もって感謝します!