2

我正在尝试让一个 hello world android 应用程序与 scala 和 intellij 一起工作尝试相同壮举的人必须熟悉以下步骤。当我使用 sbt 时,问题发生在最后

请注意我使用的每个工具的版本。对于初学者,我使用的是 java 版本 1.7.0_07

- 下载并设置 android sdk。我已经下载了从 1.5 (API 3) 到 4.1 (API 16) 的所有版本。我不会对此进行进一步的详细介绍。已经有很多教程了。

我们将需要环境变量中的 android home 路径。所以让我们为当前用户设置一个持久的环境变量

gedit ~/.pam_environment

现在附加这个:ANDROID_HOME= 例如

ANDROID_HOME=/home/pligor/android-sdks

现在让我们使用 sbt 工具。我们宁愿手动安装 sbt。在链接中找到“Unix”部分: https ://github.com/harrah/xsbt/wiki/Getting-Started-Setup 并下载 sbt-launch.jar 并将其放入 ~/bin 目前这是版本 0.12.0然后创建一个 sbt 文件:

gedit ~/bin/sbt

在里面写下这一行:

java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"

并使脚本可执行:

chmod u+x ~/bin/sbt

现在你需要为 intellij 安装一个 sbt 插件。sbt-idea 版本 1.1.0:

gedit ~/.sbt/plugins/build.sbt

在行内添加 append (记住每个 .sbt 文件用一个额外的空行分隔每个语句):

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.1.0")

对于 github 模板,您需要 giter8 工具。所以执行:

卷曲https://raw.github.com/n8han/conscript/master/setup.sh | 嘘

然后执行:

cs n8han/giter8

现在我使用 g8 从 jberkel 获取一个 android 应用程序模板:

g8 jberkel/android-app

有一些问题需要您设置。目前我将所有内容都保留为默认值。这意味着我使用 scala 版本 2.9.1 和 Android 2.3.3 (API 10) 和 scalatest_version 1.8.RC1。我不习惯使用 proguard,因为我以前没有使用过它,所以我将 useProguard 设置为 false。

运行 sbt 之前: android-plugin 目前兼容 0.11.3 版本的 sbt 我们需要做一个调整。所以在新的 android 应用程序的文件夹中执行:gedit project/build.properties 并插入这一行:sbt.version=0.11.3

在同一文件夹内执行: sbt 'gen-idea no-classifiers' compile

然后进入sbt交互模式控制台:sbt

在控制台内执行:android:package-debug

而且我相信这些警告是问题开始的地方: 故障处理:错误的类文件魔术(cafebabe)或版本(0033.0000)......同时解析my/android/project/R$id.class

现在您可以尝试启动一个 android 模拟器: android:emulator-start # 用于获取 avds 列表,例如 android:emulator-start android2_3_3

模拟器完全启动后,像这样执行 android 应用程序:android:start-emulator

在这一切之后,应用程序将崩溃!

4

2 回答 2

2

问题在于您的 Java 版本。切换回 Java 6,或者如果您不能,https://stackoverflow.com/a/7705091/203487可能会有所帮助。

“bad class file magic (cafebabe) or version (0033.0000)”表示生成的类文件的版本为 51,即 Java 7,因此很明显 dexer 和 ProGuard 都不能使用这些类文件。这里我不是在谈论最新的 ProGuard 版本,而是与 Android SDK 捆绑在一起的版本。

于 2012-09-16T10:47:48.037 回答
0

我只能谈谈我的设置,到目前为止这是成功的。

  • 您将需要 Proguard 来创建apk合理大小的 s。
  • 我使用 Scala 2.10-M6,因为2.8它很旧并且有其怪癖,尤其是在 Android 上,并且2.9对 Proguard 非常慢。
  • keep class scala.collection.SeqLike { ...很重要,否则该类被忽略,相反它有一个方法引用(我发布了这个解决方法)。
  • 使用Build.scala了许多有趣的东西,比如 scalaz 或 libgdx,请随意修剪它们。许多 android 的东西都是从各种 g8 模板中破解出来的,感谢所有分享它们的人。

所以这是我的设置转储:

项目/Build.scala 项目/plugins.sbt

我使用sbt 0.11.3Idea 11.1sbt我使用控制台编译,主要使用android:start-device命令,有时使用android:emulator-start RomName+ android:start-emulator。Idea 很好地附加到正在运行的 Android 进程。

我正在开发一个非密集图形的小游戏,到目前为止,我使用惯用的 Scala(甚至 Scalaz)而没有减速。所以没有必要仅仅为了Android而恢复到数组、vars和while循环:)

祝你好运!

于 2012-09-13T22:52:05.667 回答