Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓&x2B;scala+;intellij sbt在emulator上返回警告和应用程序崩溃:错误的类文件魔法(cafebabe)或版本(0033.0000)_Android_Scala_Ubuntu_Intellij Idea_Sbt - Fatal编程技术网

Android 安卓&x2B;scala+;intellij sbt在emulator上返回警告和应用程序崩溃:错误的类文件魔法(cafebabe)或版本(0033.0000)

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环境

我正在尝试让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创建大小合理的
    apk
    s
  • 我使用Scala
    2.10-M6
    ,因为
    2.8
    很老,有它的怪癖,尤其是在Android上,而且
    2.9
    进展非常缓慢
  • 保持类scala.collection.SeqLike{…
    很重要,否则该类会被忽略,相反,它有一个方法引用()
  • Build.scala
    使用了许多有趣的东西,比如scalaz或libgdx,可以随意删减。许多android的东西都是从不同的g8模板中拼凑而成的,供所有共享它们的人使用
下面是我的设置的转储:

我使用
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