构建一个独立的jar以与scala sbt合并到一个android项目中

时间:2017-09-01 19:20:00

标签: android scala sbt

我有一个scala项目,我想将其作为库依赖项导入到我的android项目中。 我的想法是,这应该是一个包含scala库和任何其他库的独立jar(例如我使用monix)。

我只是不确定使用什么工具以android可以使用它的方式创建这个jar(即确保所有内容都使用java 7编译并使用proguard进行处理。)

非常感谢正确方向的任何见解或观点。

我发现https://github.com/sbt/sbt-onejar但似乎没有用(在我添加生成的jar之后,android似乎无法找到任何实际的类)。

1 个答案:

答案 0 :(得分:0)

对我来说,以下是有效的。

我创建了Scala sbt项目:

build.sbt

name := "scala_android"
version := "0.1"
scalaVersion := "2.11.11"
javacOptions ++= Seq("-source", "1.7", "-target", "1.7")
scalacOptions += "-target:jvm-1.7"

的src /主/阶/ mypackage的/ MyClass.scala

package mypackage

class MyClass {
  def myMethod(): String = "AAA"
}

我做了sbt updatesbt compilesbt package

现在我有了jar target/scala-2.11/scala_android_2.11-0.1.jar

然后我使用"空活动"。

创建了Android项目

我将scala_android_2.11-0.1.jar添加到app/libs

我写在app/build.gradle

dependencies {
    ...

    compile name: 'scala_android_2.11-0.1'
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.11'
}

repositories {
    flatDir {
        dirs 'libs'
    }
}

并在app/src/main/java/example/com/myapplication/MainActivity.java

package example.com.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import mypackage.MyClass;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        MyClass obj = new MyClass();
        Log.e("tag", obj.myMethod());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

刷新Gradle项目,启动模拟器并运行MainActivity。

Android监视器显示错误级别

09-03 08:47:06.447 6549-6549/? E/tag: AAA 

所以它似乎有效(至少在这样的"你好世界"例子中)。