Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 带有Scala的Android库项目可以工作,但不可扩展_Eclipse_Scala_Build_Android Library - Fatal编程技术网

Eclipse 带有Scala的Android库项目可以工作,但不可扩展

Eclipse 带有Scala的Android库项目可以工作,但不可扩展,eclipse,scala,build,android-library,Eclipse,Scala,Build,Android Library,我发现了一个在scala for Android中使用Eclipse创建库项目和主应用程序的变通方法,我想与大家分享。然而,Eclipse中晦涩难懂的清理过程(见最后的问题)阻碍了我在更大的项目中实现这个特性,而这个解决方法目前还不能完全奏效 我假设您已经安装了Eclipse 3.6、Scala 2.8.3的插件、最新的Android SDK(对我来说是18个)、treeshaker插件等配置 创建库 文件>新建>项目>Android项目 项目名称:TestScalaLibrary,新建,使用

我发现了一个在scala for Android中使用Eclipse创建库项目和主应用程序的变通方法,我想与大家分享。然而,Eclipse中晦涩难懂的清理过程(见最后的问题)阻碍了我在更大的项目中实现这个特性,而这个解决方法目前还不能完全奏效

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

创建库
  • 文件>新建>项目>Android项目
  • 项目名称:
    TestScalaLibrary
    ,新建,使用默认位置,下一步
  • 目标2.3.3 API 10,下一步
  • 应用程序名称:
    testscalaribrary
    ,包名
    com.examplebrary
    ,创建名为
    testscalaribraryactivity
    ,完成
将项目TestScalaLibrary配置为scala库
  • 右键单击项目,配置,添加scala nature
  • 在项目上单击鼠标右键,添加/删除Treeshaker
  • 右键单击项目、属性。。。安卓,勾选“是库”,好吗
  • 在package
    com.examplebrary
    中创建一个名为
    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)
      }
    }
    
  • 删除文件
    testscallalibraryactivity.java

  • 更新
    AndroidManifest.xml
    方法是将
    android:name=“.testscalaribraryactivity”
    替换为
    android:name=“com.examplebrary.testscalaribraryactivity2”
  • 清理项目,让它自动生成。如果在某个时候由于无法删除
    testscalalibrary.jar
    而导致生成错误,请在eclipse之外通过临时关闭引用此库的项目手动执行此操作
创建测试应用程序
  • 文件>新建>项目>Android项目
  • 项目名称:
    TestScala
    ,新建,使用默认位置,下一步
  • 目标2.3.3 API 10,下一步
  • 应用程序名称:TestScala,包名
    com.exampleApplication
    ,创建名为
    TestScalaActivity
将项目配置为scala项目
  • 右键单击项目,配置,添加scala nature
  • 在项目上单击鼠标右键,添加/删除Treeshaker
  • 右键单击项目、属性。。。安卓,库,添加。。。将项目
    TestScalaLibrary
    添加为库项目,好吗
  • 编辑
    AndroidManifest.xml
    并将相对名称
    android:name=“.TestScalaActivity”
    替换为其绝对等效名称
    android:name=“com.examplebraryactivity2”
在调试模式下启动它(如有必要,您自己创建一个新的配置),它不工作。 您会得到一个异常
RunTimeException

看看LogCat,它最终会告诉您问题来自何处。
原因:加载程序dalvik.system.PathClassLoader中的java.lang.ClassNotFoundException:com.exampleLibrary.TestScalaribraryActivity2

为了解决这个问题,我采用了以下变通方法

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

    package com.exampleApplication
    class TestScalaActivityDummy {}
    
在调试模式下启动它。。。它起作用了

现在是奇怪的部分。

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

为什么在一次清理、一次启动和一次清理之后会出现这些错误?

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


没有直接回答您的问题,但我在maven+scala+android上黑客攻击了几天,但最终在sbt+sbt android插件中找到了解决方案。加上sbt idea插件生成idea项目。请注意,Idea free也支持Android和Scala,也许值得一试。或者sbteclipse来生成Eclipse项目(),虽然没有经验。我也不能解决这个问题,但我想为scala+android推荐一个不同的Eclipse插件:(我是作者)非常棒的插件!我会写下一个不同的解决方案,它现在正在发挥作用。