Android向けScalaプログラミング


258

私はScalaとAndroidのチュートリアルをScala 2.7.3 finalで実行しました。作成されたAndroidアプリは機能しますが、最も基本的なアプリケーションでもコンパイルに数分(!)かかり、900 kbの圧縮が必要です。これは、モバイルアプリケーションのショーストッパーです。さらに、IDEは時々メモリ不足になります。のdexような大きなライブラリ用に作られていないと思いますscala-library

  • だから私の質問は:誰かが実際にこれをやったことがありますか、これに対する治療法はありますか?

回答:


128

私はScalaでいくつかの基本的なAndroidアプリケーションを作成しました。Javaプログラマーではないので、「ツリーシェイク」を使用するよう提案されました。友人から、jarファイルから不要なライブラリがすべて削除されると説明されました。

私はそれを文書化していませんが、他の誰かがすでに持っていることがわかりました:

http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html

Proguardが唯一のソリューションではありません。ワークフローに適した、または環境により適したものが見つかるかもしれません。

さらに、GoogleはJACKを実現しました。これは、ビルド時間とメモリ時間の大幅な削減に対応していますhttps://source.android.com/source/jack.htmlを参照してください


3
ありがとうございました!私はそれを試さなければならないでしょう。Eclipseで(ScalaおよびAndroidプラグインを使用して)使用できるかどうか疑問に思います
Lemmy

36
レミー-この答えを受け入れなかった理由はありますか?おそらく、より良い解決策を見つけましたか?
Bostone 2009年

3
私の経験では、treeshakeは、ほとんどの自明なscalaコードには十分ではありません。攻撃的ではありません。
James Moore

45

Gradle用のAndroidプラグインを使用して、ScalaでAndroidアプリケーションを作成できるようになりました。ProGuardツールを組み込んで、生成されたAPKファイルから脂肪を削除するので、ニーズを満たしているようです。

https://github.com/jvoegele/gradle-android-plugin/wiki


よく働く!私が試した解決策はどれもそのままではうまくいきませんでしたが、あなたのGradleプラグインは有用なフィードバックをくれたので、問題の原因を簡単に修正できました。
メンデルト2011

ジェイソン、あなたはまだこれに取り組んでいますか?最後のコミットは9か月前であり、それ以来グレードはバージョンアップされています。
Peter Ajtai 2013

Peter、GradleがAndroidのネイティブビルドシステムになったため、開発が中止されました。
Jason Voegele 2013



15

この詳細なソリューションをEclipse 3.7、Scala 2.10、およびプラグインAndroidProguardScala v50で検証しました。

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

すべてが正常に動作します。scalafiedされたメインアクティビティクラスを持つ単純なテストアプリケーションは、38Kbしかかかりません。ライブラリプロジェクトがサポートされています。プロジェクトをエクスポートすると、Proguardがアクティブになります。


3
これは素晴らしいですね。デバイスに展開するとき、このソリューションでのビルド時間はどうですか(同等のJava Androidプロジェクトを展開する場合と比較して)?
evilcandybag 2012

1
デバイスに展開する場合、ビルド時間は約10秒です。いつか早くなるといいな。
ミカエルメイヤー2012

6
キャッシュの実装が新しくなったため、最新のAndroid SDKとプラグインで約1秒かかります。
ミカエルメイヤー2012

7

Scala用のAndroidアプリの開発は常に進化しています。これを行うための現在の最良の方法は、android-sdk-pluginと組み合わせてSBTに表示されます。これは維持されており、私のScala / Androidプロジェクトでうまく機能します。すでに述べたScaloidでこのプラグインを使用することを示すやや最近の例見つけることができます

この質問は、Stack Overflowで回答が古くなっている典型的な例であることに注意してください。この回答は、いつの日か時代遅れになる可能性があります。

*この回答スレッドで言及されている他のSBTベースのプロジェクトでは、執筆時点で過去6か月間にコードが作成されていないようです。ScalaおよびSBTの新しいバージョンとの互換性の問題がある可能性があります。


6

mavenを使用する場合は、android-scala-testを起動テンプレートとして使用します。すぐに使用できます。

ScaloidはScalaで記述されたAndroid APIラッパーであり、AndroidプログラムをScalaスタイルで記述するのに役立ちます。


4

AndroidでScalaをSBTなしで使用できます。ScalaはGradleによって外部で構築され、Androidアプリケーションを作成します。 https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradleは、SBTよりもAndroid向けのネイティブビルドツールです。

Scalaクライアントとサーバー側のソリューションコンセプトの好例、およびIntelliJ IDEAワークベンチの進歩としてのGradle構築ツールがあります。

コアクラスがクライアントとサーバーで共通であるという大きな進歩。

https://github.com/ghik/akkdroid

IDEAとandroid-pluginの良いチュートリアル:http : //fxthomas.github.io/android-plugin/


3

Android上のScalaの最大の問題はコンパイル時間です。

おそらく、Proguardクラスストリッピングが、デュアルクアッドコア(8 CPU)のIDEA13 / Scalaプラグインを使用してコンパイルされるため、8GBのE5450 Xeonには2分以上かかることがあります。

コンパイル時間が非常にイライラしていたので、大規模なScala Androidプロジェクトを完了した後、Javaに戻りました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.