2017-09-01 13 views
1

私はライブラリ依存関係としてAndroidプロジェクトにインポートしたいスカラプロジェクトを持っています。 これは、スカラライブラリと他のライブラリが含まれているスタンドアロンのjarでなければならないということです(私はmonixを使用しています)。私はAndroidがそれを消費することができるような方法で、このjarファイルを作成するために使用してどのようなツールはよく分からないスタンドアロンのjarを構築して、scala sbtでAndroidプロジェクトに組み込む

(必ずすべては、Java 7でコンパイルされ、ProGuardので処理された作り、すなわち。)

任意の洞察力や正しい方向のポイントが大いに評価されます。

私はhttps://github.com/sbt/sbt-onejarを見つけましたが、それはうまくいかなかったようです(生成されたjarファイルを追加した後、アンドロイドは実際のクラスを見つけることができなかったようです)。

答えて

0

私のためには以下の作品があります。

私はスカラ座のsbtプロジェクト作成:私は、sbt updateをした

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 compile,sbt package

今私は瓶を持っていたtarget/scala-2.11/scala_android_2.11-0.1.jar

次に、「Empty Activity」でAndroidプロジェクトを作成しました。

scala_android_2.11-0.1.jarapp/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); 
    } 
} 

でエミュレータを開始し、MainActivityを走った、Gradleのプロジェクトに更新。

Androidのモニターだから、(少なくとも、そのような "Hello World" の例では確実に)動作するようですエラーレベルに

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

を示しました。

+1

これは基本的にできました^。私が使用していたjdkがsbtを実行するときにJava 7であることを確認しなければなりませんでした(これは私にとって、これを行うための最も簡単な方法はintellijを通して設定していました)。また、sbt-assemblyは自分のスタンドアロンの要件に適しているようですが、私はアンドロイド側でproguardを使用するとうまくいくと思っていますので、私はそのatmに対処する必要はありません。 – user1622727

関連する問題