5

我一直在尝试使用 Scala 2.9.1 和 SBT 0.13 以及 Android-Plugin 创建 Android 应用程序。
但是,运行 ProGuard 可能会非常缓慢。
因此,相反,当我自上次构建以来没有使用任何新的类/方法时,我只是试图将 classes.dex 与我自己的 dexed android-app 类(诸如此类MainActivity.scala)合并。

我得到的问题(在 Android 4.0.x 上)是合并没有任何错误,但是当我尝试运行应用程序时,我得到了这个"Unfortunately, MyAndroidApp has stopped".

这是 logcat 日志:

  EmbeddedLogger  E  App crashed! Package: com.my.app v0 (0.1)
  300         EmbeddedLogger  E  Application Label: MyAndroidApp
 24137        AndroidRuntime  E  FATAL EXCEPTION: main
 24137        AndroidRuntime  E  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.app/com.my.app.MainActivity}: java.lang.ClassNotFoundException: com.my.app.MainActivity
 24137        AndroidRuntime  E   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2118)
 24137        AndroidRuntime  E   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237)
 24137        AndroidRuntime  E   at android.app.ActivityThread.access$600(ActivityThread.java:139)
 24137        AndroidRuntime  E   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
 24137        AndroidRuntime  E   at android.os.Handler.dispatchMessage(Handler.java:99)
 24137        AndroidRuntime  E   at android.os.Looper.loop(Looper.java:156)
 24137        AndroidRuntime  E   at android.app.ActivityThread.main(ActivityThread.java:5005)
 24137        AndroidRuntime  E   at java.lang.reflect.Method.invokeNative(Native Method)
 24137        AndroidRuntime  E   at java.lang.reflect.Method.invoke(Method.java:511)
 24137        AndroidRuntime  E   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
 24137        AndroidRuntime  E   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
 24137        AndroidRuntime  E   at dalvik.system.NativeStart.main(Native Method)
 24137        AndroidRuntime  E  Caused by: java.lang.ClassNotFoundException: com.my.app.MainActivity
 24137        AndroidRuntime  E   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
 24137        AndroidRuntime  E   at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
 24137        AndroidRuntime  E   at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
 24137        AndroidRuntime  E   at android.app.Instrumentation.newActivity(Instrumentation.java:1039)
 24137        AndroidRuntime  E   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2109)
 24137        AndroidRuntime  E   ... 11 more
  300        ActivityManager  W    Force finishing activity com.my.app/.MainActivity
  5864        OpenGLRenderer  D  Flushing caches (mode 1)
  300           ViewRootImpl  D  @@@- disable SystemServer HW acceleration

我已经手动打开了生成的 apk 和其中的 classes.dex,通过包导航并在那里找到了 MainActivity。

任何帮助将不胜感激。

4

2 回答 2

2

好的,我想出了什么问题。

根据定义,每个 Scala 类都实现scala.ScalaObject.
我的 dexedcom.my.app.MainActivity也实现了scala.ScalaObject.

但是,由于我没有将它scala.ScalaObject作为我以前classes.dex文件的一部分,并且我没有将它包含在新文件中,因此 DVM 找不到带有public class com.my.app.MyAndroidApp extends android.app.Activity implements com.my.app.TypedActivity with scala.ScalaObject.

于 2012-07-12T14:13:47.977 回答
1

我最好的猜测是 dalvik 出于某种原因拒绝了这门课。您想在安装应用程序时查看 logcat,并查找来自 dalvik 的任何消息。它将打印一个关于它拒绝什么类以及为什么拒绝的简短说明。

于 2012-07-11T17:35:01.020 回答