【发布时间】:2012-05-24 10:56:53
【问题描述】:
我找到了一种解决方法,可以使用 Eclipse 在 scala for Android 中创建库项目和主应用程序,我想与您分享。然而,来自 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。
- 项目右键,属性...android,勾选“Is Library”,ok
-
在包
com.exampleLibrary中创建一个名为TestScalaLibraryActivity2的新scala 类,其内容如下: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- 通过将
android:name=".TestScalaLibraryActivity"替换为android:name="com.exampleLibrary.TestScalaLibraryActivity2"来更新AndroidManifest.xml - 清理项目,让它自动构建。如果在某些时候因为无法删除
testscalalibrary.jar而出现构建错误,请通过临时关闭引用此库的项目在 Eclipse 之外手动执行此操作。
创建测试应用程序
- 文件 > 新建 > 项目 > Android 项目
- 项目名称:
TestScala,新建,使用默认位置,下一步 - 目标 2.3.3 API 10,下一步
- 应用名称:TestScala,包名称
com.exampleApplication,创建名为TestScalaActivity的活动
将项目配置为 Scala 项目
- 项目右键,配置,添加scala性质
- 右键单击项目,添加/删除 Treeshaker。
- 项目右键,属性...android,库,添加...将项目
TestScalaLibrary添加为库项目,ok - 编辑
AndroidManifest.xml并将相对名称android:name=".TestScalaActivity"替换为其绝对等效名称android:name="com.exampleLibrary.TestScalaLibraryActivity2"
在调试模式下启动它(如果需要,自己创建一个新配置),它不起作用。
你得到一个异常RunTimeException。
查看 LogCat,它最终会告诉您问题出在哪里。
Caused by: java.lang.ClassNotFoundException: com.exampleLibrary.TestScalaLibraryActivity2 in loader dalvik.system.PathClassLoader
为了解决这个问题,我有以下从this blog 派生的解决方法。
-
在项目 TestScala 中,使用以下代码创建类
TestScalaActivityDummy:package com.exampleApplication class TestScalaActivityDummy {}
在调试模式下启动它......它可以工作!
现在是奇怪的部分。
- 删除文件
TestScalaActivityDummy.scala(是的,删除文件),清理项目,让它自动重建。启动它。它仍然有效! - 再次清理项目,可能要清理几次。 然后,如果你启动它,你又会得到一个 RunTimeException。
为什么一清洁一启动一清洁后会出现这些错误?
【问题讨论】:
-
没有直接回答你的问题,但我在 maven + scala + android 上攻击了几天,但最终在 sbt + sbt-android 插件中找到了解决方案。加上 sbt-idea 插件来生成 Idea 项目。请注意,Idea free 也支持 Android 和 Scala,也许值得一试。或者 sbteclipse 生成 Eclipse 项目(github.com/typesafehub/sbteclipse),虽然没有经验。
-
我也解决不了这个问题,但是我想为scala + android推荐一个不同的eclipse插件:github.com/banshee/AndroidProguardScala(我是作者)
-
优秀的插件!我会写下一个不同的解决方案,它现在正在运行。
标签: eclipse scala build android-library