2

我找到了一种解决方法,可以在 scala for Android 中创建库项目和主应用程序,使用 Eclipse,我想与您分享。但是,来自 Eclipse 的晦涩的清理过程(请参阅最后的问题)阻止我在我的更大项目中实现此功能,该解决方法目前无法完全工作。

我假设您已经安装了类似 Eclipse 3.6、Scala 2.8.3 的插件、最新的 Android SDK(我是 18)、treeshaker 插件的配置

创建库

  • 文件 > 新建 > 项目 > Android 项目
  • 项目名称:TestScalaLibrary,新建,使用默认位置,下一步
  • 目标 2.3.3 API 10,下一个
  • 应用程序名称:TestScalaLibrary,包名称com.exampleLibrary,创建活动命名TestScalaLibraryActivity,完成

将项目 TestScalaLibrary 配置为 Scala 库

  • 项目右键,配置,添加scala性质
  • 右键单击项目,添加/删除 Treeshaker。
  • 右键项目,properties...android,勾选“Is Library”,ok
  • TestScalaLibraryActivity2在 package 中创建一个新的 scala 类com.exampleLibrary,其内容如下:

    package com.exampleLibrary
    import android.app.Activity
    import android.os.Bundle
    
    class TestScalaLibraryActivity2 extends Activity {
      override def onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main)
      }
    }
    
  • 删除文件TestScalaLibraryActivity.java

  • 通过AndroidManifest.xml替换更新android:name=".TestScalaLibraryActivity"android:name="com.exampleLibrary.TestScalaLibraryActivity2"
  • 清理项目,让它自动构建。如果在某些时候由于testscalalibrary.jar无法删除而出现构建错误,请在 Eclipse 之外手动执行此操作,方法是临时关闭引用此库的项目。

创建测试应用程序

  • 文件 > 新建 > 项目 > Android 项目
  • 项目名称:TestScala,新建,使用默认位置,下一步
  • 目标 2.3.3 API 10,下一个
  • 应用名称:TestScala,包名com.exampleApplication,创建活动命名TestScalaActivity

将项目配置为 Scala 项目

  • 项目右键,配置,添加scala性质
  • 右键单击项目,添加/删除 Treeshaker。
  • 项目右键,properties...android,library,add...将项目添加TestScalaLibrary为library项目,ok
  • 编辑AndroidManifest.xml并将相对名称替换android:name=".TestScalaActivity"为其绝对等效名称android:name="com.exampleLibrary.TestScalaLibraryActivity2"

在调试模式下启动它(如果需要,自己创建一个新配置),它不起作用。你得到一个 Exception RunTimeException

查看 LogCat,它最终会告诉您问题出在哪里。 Caused by: java.lang.ClassNotFoundException: com.exampleLibrary.TestScalaLibraryActivity2 in loader dalvik.system.PathClassLoader

为了解决这个问题,我有以下从这个博客派生的解决方法。

  • 在项目 TestScala 中,TestScalaActivityDummy使用以下代码创建类:

    package com.exampleApplication
    class TestScalaActivityDummy {}
    

在调试模式下启动它......它工作!

现在奇怪的部分。

  • 删除文件TestScalaActivityDummy.scala(是的,删除文件),清理项目,让它自动重建。启动它。它仍然有效!
  • 再次清理项目,可能多次。然后,如果你启动它,你又会得到一个 RunTimeException。

为什么一清洁一启动一清洁后会出现这些错误?

4

1 回答 1

1

解决方案是在没有 treeshaker 的情况下重新开始,而是使用 AndroidProguardScala 插件:

https://stackoverflow.com/a/11084146/1287856

于 2012-05-25T16:36:47.867 回答