【问题标题】:Android library project with Scala works but not scalable带有 Scala 的 Android 库项目可以工作但不可扩展
【发布时间】: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


【解决方案1】:

解决方案是不使用 treeshaker 而是使用 AndroidProguardScala 插件重新开始:

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

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    相关资源
    最近更新 更多