我正在关注这个页面http://zegoggl.es/2009/12/building-android-apps-in-scala-with-sbt.html上的视频,该视频使用SBT创建一个Android项目。然而,我试图使用
安装模拟器。sbt install-emulator
我得到以下错误:
[info] Nothing to compile.
[info] Post-analysis: 1 classes.
[info] == tests / compile ==
[info]
[info] == awesomepad / proguard ==
ProGuard, version 4.4
ProGuard is released under the GNU General Public License. The authors of all
programs or plugins that link to it (sbt, ...) therefore
must ensure that these programs carry the GNU General Public License as well.
Reading program directory [C:ProjectsScalasbt2testawesomepadtargetscala_2.
9.1classes]
java.io.IOException: Can't read [proguard.ClassPathEntry@550a17fb] (Can't proces
s class [com/kickass/awesomepad/R$attr.class] (Unsupported version number [51.0]
for class format))
at proguard.InputReader.readInput(InputReader.java:230)
at proguard.InputReader.readInput(InputReader.java:200)
at proguard.InputReader.readInput(InputReader.java:178)
at proguard.InputReader.execute(InputReader.java:78)
at proguard.ProGuard.readInput(ProGuard.java:195)
我也有同样的问题。我意识到这是因为我使用的是JDK 1.7。虽然用1.6创建的jar可以在1.7上运行,但是proguard for 1.6的jar不能在1.7的jar上运行。目前,只有Proguard的测试版可用于1.7。因此,android工具和maven存储库为1.6 jar提供了保护。当它尝试裁剪1.7个jar时,会抛出该错误。
为了解决这个问题,我降级到JDK 1.6,卸载1.7,并确保我的jar是由1.6 JDK工具创建的。
为了从本地存储库中删除1.7个jar,我只是删除了~/下的目录。Ivy2并使用插件重新创建了android项目。我完全遵循了android插件的README
链接到的页面显示:"注意:这篇文章有一段时间没有更新了,已经过期了。如有疑问,请参考sbt-android-plugin的README。这里的自述文件(readme .md)包含了我能找到的唯一一组实际适用于当前版本的scala、sbt和Android SDK的指令。
我只需要做一些小小的调整就可以让它工作:
- 修改您的sbt脚本(可能是~/bin/sbt)并添加"-XX:MaxPermSize=512m"参数,否则您将耗尽PermGen空间
- 确保使用0.10模板(默认),而不是你可以选择指定的0.11模板。
- 当它告诉你的时候,确保你跳转到"hack on the plugin"部分。
对于我来说,插件站点上的描述已经足够了:link.
你试过那样做吗?
因为jdk1.7显然不兼容,所以我遇到了同样的问题。在我的build.scala
文件中,我添加了以下行:
javaHome := Some(file("c:\Program Files\Java\jdk1.6.0_35"))
然后就成功了
我在java版本"1.7.0_51"中获得错误"(不支持的版本号[51.0]for class format)"。
通过在Build.scala中添加javac兼容性行修复此问题:
val settings = Defaults.defaultSettings ++ Seq (
...
javacOptions ++= Seq("-encoding", "UTF-8", "-source", "1.6", "-target", "1.6")
)