我找到了一种解决方法,可以在 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。
为什么一清洁一启动一清洁后会出现这些错误?