Android 安卓&x2B;scala+;intellij sbt在emulator上返回警告和应用程序崩溃:错误的类文件魔法(cafebabe)或版本(0033.0000)
我正在尝试让hello world android应用程序与scala和intellij一起工作 无论谁尝试过同样的壮举,都必须熟悉以下步骤。问题发生在我使用sbt时的末尾 请注意我使用的每个工具的版本。 首先,我使用的是java版本1.7.0_07 -下载并安装android sdk。我已经下载了从1.5(API 3)到4.1(API 16)的所有版本。我将不再详细讨论这一点。已经有很多教程了 我们需要一个环境变量中的android主路径。因此,让我们为当前用户设置一个persistant环境变量Android 安卓&x2B;scala+;intellij sbt在emulator上返回警告和应用程序崩溃:错误的类文件魔法(cafebabe)或版本(0033.0000),android,scala,ubuntu,intellij-idea,sbt,Android,Scala,Ubuntu,Intellij Idea,Sbt,我正在尝试让hello world android应用程序与scala和intellij一起工作 无论谁尝试过同样的壮举,都必须熟悉以下步骤。问题发生在我使用sbt时的末尾 请注意我使用的每个工具的版本。 首先,我使用的是java版本1.7.0_07 -下载并安装android sdk。我已经下载了从1.5(API 3)到4.1(API 16)的所有版本。我将不再详细讨论这一点。已经有很多教程了 我们需要一个环境变量中的android主路径。因此,让我们为当前用户设置一个persistant环境
gedit ~/.pam_environment
现在附加这个:安卓主页=
e、 g
现在让我们抓住sbt工具。
我们宁愿手动安装sbt。
在链接中找到“Unix”部分:
下载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文件都用一个额外的空行分隔每条语句):
对于github模板,您需要giter8工具。因此,执行:
旋度| sh
然后执行:
cs n8han/giter8
现在我使用g8从jberkel获取android应用程序模板:
g8 jberkel/android-app
您需要设置一些问题。目前,我将所有内容保留为默认设置。这意味着我使用scala版本2.9.1和Android 2.3.3(API 10)以及scalatest_版本1.8.RC1。
我不习惯使用proguard,因为我以前没有使用过它,所以我将useProguard设置为false
在运行sbt之前:
android插件目前与sbt的0.11.3版本兼容,我们需要进行调整。因此,在新android应用程序的文件夹中执行:
gedit项目/build.properties
并插入以下行:
sbt.version=0.11.3
在同一文件夹内执行:
sbt“gen idea无分类器”编译
然后转到sbt交互模式控制台:
sbt
在控制台内部执行:
android:包调试
我相信这些警告是问题的根源:
故障处理:
错误的类文件魔术(cafebabe)或版本(0033.0000)
…在分析my/android/project/R$id.class时
现在,您可以尝试启动android emulator:android:emulator start#用于获取AVD列表
例如
android:仿真器启动android2\u 3\u 3
emulator完全启动后,按如下方式执行android应用程序:
android:启动模拟器
在这一切之后,应用程序将崩溃 我只能谈谈我的设置,到目前为止,我的设置相当成功
- 您需要Proguard创建大小合理的
sapk
- 我使用Scala
,因为2.10-M6
很老,有它的怪癖,尤其是在Android上,而且2.8
进展非常缓慢2.9
很重要,否则该类会被忽略,相反,它有一个方法引用()保持类scala.collection.SeqLike{…
使用了许多有趣的东西,比如scalaz或libgdx,可以随意删减。许多android的东西都是从不同的g8模板中拼凑而成的,供所有共享它们的人使用Build.scala
sbt 0.11.3
和Idea 11.1
。我使用sbt
控制台编译,主要使用android:start-device
命令,有时使用android:emulator-start-RomName
+android:start-emulator
。Idea很好地连接到正在运行的android进程
我正在开发一个非密集型图形的小游戏,到目前为止,我使用的是惯用的Scala(甚至Scalaz),速度没有变慢。因此,不需要为了Android而恢复到数组、变量和while循环:)
祝你好运!问题出在你的Java版本上。请切换回Java 6,否则可能会有所帮助
“错误的类文件魔术(cafebabe)或版本(0033.0000)”这意味着生成的类文件有一个51版本,即Java 7,因此很明显,dexer和ProGuard都不能使用这些类文件。这里我不是说最新的ProGuard版本,而是与Android SDK捆绑的版本。这是我从logcat获得的:致命异常:main 443 AndroidRuntime E Java.lang.RuntimeException:无法实例化活动组件信息{my.android.project/my.android.project.MainActivity}:java.lang.Cl assNotFoundException:my.android.project.main加载程序dalvik.system.PathClassLoade r[/data/app/my.android.project-1.apk]中的活动PROGARGER与2.10相比有多快?2.10个STDLIB与2.8(我的计算机12-15秒)相当,而2.9的大约是双(35秒)。。另请参阅以了解更根本的区别。还指出了问题的原因:感谢链接。哦,我确实知道第二个链接和.class文件组合爆炸。通过将proguard设置为启用并使用此额外选项Seq(Android中的proguardOption:=“-保留类scala.Function1”)++我让它工作了。但不幸的是,我从你的sbt配置和其他人的sbt配置中得到的信息是,必须对它进行持续维护!这不是一次性的事情……乔治:如果你向项目中添加新的外来库,Proguard配置可能需要更改。通常你不会每天都这样做:)
cs n8han/giter8
g8 jberkel/android-app