Pemrograman Scala untuk Android

258

Saya telah mengikuti tutorial di Scala dan Android dengan Scala 2.7.3 final. Aplikasi Android yang dihasilkan berfungsi tetapi bahkan aplikasi yang paling dasar membutuhkan beberapa menit (!) Untuk dikompilasi dan membutuhkan 900 kb terkompresi, yang merupakan penghenti acara untuk aplikasi seluler. Selain itu, IDE kehabisan memori setiap sekarang dan kemudian. Saya menganggap dextidak dibuat untuk perpustakaan besar seperti scala-library.

  • Jadi pertanyaan saya adalah: Adakah yang benar-benar melakukan ini dan apakah ada obat untuk ini?
Lemmy
sumber

Jawaban:

128

Saya telah menulis beberapa aplikasi Android dasar di Scala, tidak ada yang terlalu epik. Tidak menjadi programmer Java saya disarankan untuk menggunakan "treeshake", saya dijelaskan oleh seorang teman bahwa ini menghapus semua perpustakaan yang tidak perlu dari file jar .

Saya belum mendokumentasikannya, tetapi saya menemukan bahwa orang lain sudah memiliki:

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

Proguard bukan satu-satunya solusi, Anda mungkin menemukan sesuatu yang sesuai dengan alur kerja Anda atau lebih cocok untuk lingkungan Anda.

Selain itu Google baru saja menyadari JACK, yang berurusan dengan cukup banyak pengurangan waktu membangun dan memori lihat https://source.android.com/source/jack.html


sumber
3
Terima kasih! Saya harus mencobanya. Saya ingin tahu apakah itu dapat digunakan dengan Eclipse (menggunakan Scala dan Android Plugins)
Lemmy
36
Lemmy - adakah alasan Anda tidak menerima jawaban ini? Mungkin Anda menemukan solusi yang lebih baik?
Bostone
3
Dalam pengalaman saya, treeshake tidak cukup baik untuk sebagian besar kode scala nontrivial. Itu tidak cukup agresif.
James Moore
45

Anda sekarang dapat menggunakan plugin Android untuk Gradle untuk membuat aplikasi Android di Scala. Ini menggabungkan alat ProGuard untuk memotong lemak dari file APK yang dihasilkan, jadi sepertinya memenuhi kebutuhan Anda.

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

Jason Voegele
sumber
Bagus sekali! Tidak ada solusi yang saya coba, tetapi plugin Gradle Anda memberi saya umpan balik yang berguna sehingga saya dapat dengan mudah memperbaiki apa yang salah.
Mendelt
Jason, apakah kamu masih mengerjakan ini? Komit terakhir adalah 9 bulan yang lalu dan versi telah ditabrak sejak itu.
Peter Ajtai
Peter, pengembangan telah terhenti karena fakta bahwa Gradle sekarang menjadi sistem build asli untuk Android.
Jason Voegele
22

Ada juga sebuah plugin untuk builder berbasis Scala sbt : sbt-android-plugin .

Jan Berkel
sumber
1
Plugin ini tidak kompatibel dengan SBT versi terbaru. Apakah Anda masih mempertahankan plugin ini? Plugin SBT yang adalah kompatibel dengan versi terbaru dari ini android-sdk-plugin .
DCKing
15

Saya memverifikasi solusi terperinci ini dengan Eclipse 3.7, Scala 2.10 dan plug-in AndroidProguardScala v50:

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

Semuanya bekerja dengan baik. Aplikasi tes sederhana dengan kelas aktivitas utama berskala hanya membutuhkan 38Kb. Proyek perpustakaan didukung. Proguard diaktifkan ketika mengekspor proyek.

Mikaël Mayer
sumber
3
Kedengarannya luar biasa. Bagaimana membangun waktu dengan solusi ini ketika menggunakan ke perangkat (dibandingkan dengan menggunakan proyek Java Android yang sebanding)?
evilcandybag
1
Waktu pembuatan adalah sekitar 10 detik saat menggunakan ke perangkat. Saya berharap ini akan menjadi lebih cepat suatu hari nanti.
Mikaël Mayer
6
Dibutuhkan sekitar 1 detik sekarang dengan sdk dan plug-in android terbaru, karena beberapa implementasi cache baru yang baik.
Mikaël Mayer
7

Mengembangkan aplikasi Android untuk Scala terus berkembang. Cara terbaik saat ini untuk melakukannya tampaknya SBT bersama dengan android-SDK-plugin , yang dikelola * dan bekerja dengan baik untuk saya dalam proyek Scala / Android saya. Contoh yang agak baru yang menunjukkan penggunaan plugin ini dengan Scaloid yang telah disebutkan juga dapat ditemukan .

Harap dicatat bahwa pertanyaan ini adalah contoh khas dari sebuah pertanyaan dengan jawaban yang sudah usang pada Stack Overflow. Jawaban ini kemungkinan akan menjadi usang di beberapa titik juga.

* Proyek berbasis SBT lain yang disebutkan dalam utas jawaban ini tampaknya tidak memiliki kode yang ditulis untuk mereka dalam enam bulan terakhir pada saat penulisan. Mereka mungkin memiliki masalah kompatibilitas dengan versi Scala dan SBT yang lebih baru.

DCKing
sumber
6

Jika Anda menggunakan pakar, gunakan android-scala-test sebagai templat startup. Ini bekerja sangat baik untuk saya di luar kotak.

Scaloid adalah pembungkus Android API yang ditulis dalam Scala yang membantu Anda menulis program Android dalam gaya Scala.

pocorall
sumber
4

Anda dapat menggunakan Scala di Android tanpa SBT, ini dibangun secara eksternal oleh Gradle untuk membuat aplikasi Android. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle lebih merupakan alat bangunan asli untuk android daripada SBT.

Ada contoh yang baik dari konsep solusi sisi klien dan server Scala, dan alat pembangunan gradle sebagai uang muka untuk meja kerja IntelliJ IDEA.

Kemajuan besar bahwa kelas inti umum untuk klien dan server.

https://github.com/ghik/akkdroid

Tutorial bagus untuk IDEA dan android-plugin: http://fxthomas.github.io/android-plugin/

mikowiec
sumber
3

Masalah terbesar dengan Scala di Android adalah waktu kompilasi.

Mungkin karena kompilasi stripping kelas Proguard dengan plugin IDEA13 / Scala pada Dual Quad Core (8-CPU) E5450 Xeon dengan 8GB dapat memakan waktu dua menit atau lebih.

Saya hanya pindah kembali ke Jawa setelah menyelesaikan proyek Android Scala yang besar karena waktu kompilasi terlalu membuat frustrasi.


sumber