使用Scala的Android库项目可以工作但不可扩展

时间:2012-05-24 10:56:54

标签: eclipse scala build android-library

我找到了一个解决方法,用于在Android的scala中创建库项目和主应用程序,使用Eclipse,我想与您分享。但是,Eclipse的模糊清理过程(最后看到问题)阻止我在我的大项目中实现此功能,此项解决方法目前无法完全运行。

我假设你已经安装了像Eclipse 3.6这样的配置,Scala 2.8.3的插件,最新的Android SDK(18对我来说),treehaker插件

创建库

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

将项目TestScalaLibrary配置为scala库

  • 右键单击项目,配置,添加scala nature
  • 右键单击项目,添加/删除Treeshaker。
  • 右键单击项目,属性... android,检查" Is Library",ok
  • 使用以下内容在包TestScalaLibraryActivity2中创建名为com.exampleLibrary的新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

  • 通过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 nature
  • 右键单击项目,添加/删除Treeshaker。
  • 右键单击项目,属性... android,库,添加...将项目TestScalaLibrary添加为库项目,确定
  • 修改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。

为什么在一次清洁,一次启动和一次清洁后出现这些错误?

1 个答案:

答案 0 :(得分:1)

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

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