首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sbt-android给出了"IllegalArgumentException已经添加.“运行android:用于多项目构建的包

sbt-android给出了"IllegalArgumentException已经添加.“运行android:用于多项目构建的包
EN

Stack Overflow用户
提问于 2016-04-28 14:20:54
回答 1查看 18关注 0票数 0

我有一个sbt root项目和一个actionbarsherlock子项目,我不能将其打包到apk中。

我能够成功地构建两个项目,但是当我运行android:package时,我从root/android:dex任务中获得错误,其中actionbarsherlock的类被两次调试:

代码语言:javascript
复制
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/actionbarsherlock/ActionBarSherlock$Implementation;

我运行了last root/android:dex,发现它包括来自根项目和子项目的intermediates/class.jar

代码语言:javascript
复制
.../actionbarsherlock/bin/intermediates/classes.jar,
.../bin/intermediates/classes.jar

这解释了dex错误,但我不知道如何更改我的构建以避免这种情况。

我能够在一个简单得多的项目上复制这个问题,在这个项目中,根项目没有源代码,只有一个简单的构建配置,比如:

代码语言:javascript
复制
// 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"))

以及:

代码语言:javascript
复制
// 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

代码语言:javascript
复制
sbt.version=0.13.9

project/plugins.sbt

代码语言:javascript
复制
addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.0")

文件层次结构如下所示:

代码语言:javascript
复制
.
├── 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上使用的典型过程是干净的结帐:

代码语言:javascript
复制
project abs
compile
project root
compile
android:package

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-29 03:52:43

project.properties中删除对actionbarsherlock的引用。actionbarsherlock项目是自动生成的,因为它在project.properties中,因为您添加了一个手动子项目,所以它是重复的。

如果您从未在actionbarsherlock项目中设置所有的sbt项目,那么一切都会正常工作。考虑到您确实设置了它,您没有为依赖的项目适当地使用androidBuildWith函数。从根项目中删除androidBuild行,并将根项目改为project.in(file(".")).androidBuildWith(abs)

另外,考虑使用actionbarsherlock apklib而不是子项目。最重要的是,完全远离actionbarsherlock。

此外,只需从一个干净的构建运行sbt android:package,就可以完全构建。不需要所有这些步骤。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36917475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档