Android için Scala Programlama


258

Ben de öğretici takip ettim Scala ve Android ile Scala 2.7.3 finali. Ortaya çıkan Android Uygulaması çalışır, ancak en temel uygulama bile derlemek için birkaç dakika sürer (!) Ve mobil uygulamalar için bir gösteri durdurucu olan 900 kb sıkıştırılmış gerekir . Buna ek olarak, IDE ara sıra bellek yetersiz kalıyor. Sanırım dexgibi büyük kütüphaneler için yapılmadı scala-library.

  • Yani sorum şu: Bunu gerçekten yapan var mı ve bunun çaresi var mı?

Yanıtlar:


128

Scala'da bazı temel Android uygulamaları yazdım, çok destansı bir şey değil. Bir Java programcısı olmama bir "treeshake" kullanmam önerildi, bir arkadaşım tarafından bunun tüm gereksiz kütüphaneleri jar dosyalarından çıkardığı açıklandı .

Belgelendirmedim, ama başka birinin zaten olduğunu buldum:

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

Proguard tek çözüm değildir, iş akışınıza uygun veya ortamınız için daha uygun bir şey bulabilirsiniz.

Ayrıca google, yapıyı ve bellek sürelerini azaltma konusunda oldukça fazla şey olan JACK'i yeni gerçekleştirdi. Https://source.android.com/source/jack.html


3
Teşekkür ederim! Bunu denemek zorunda kalacağım. Eclipse ile kullanılabileceğini merak ediyorum (Scala ve Android Eklentilerini kullanarak)
Lemmy

36
Lemmy - bu yanıtı kabul etmemenizin bir nedeni var mı? Belki daha iyi bir çözüm buldunuz?
Bostone

3
Deneyimlerime göre, treeshake çoğu önemsiz scala kodu için yeterince iyi değil. Sadece yeterince agresif değil.
James Moore

45

Artık Scala'da Android uygulamaları oluşturmak için Gradle için Android eklentisini kullanabilirsiniz. Sonuçta ortaya çıkan APK dosyasındaki yağı kırpmak için ProGuard aracını içerir, bu yüzden ihtiyaçlarınızı karşılar gibi görünüyor.

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


Harika çalışıyor! Denediğim çözümlerin hiçbiri kutudan çıktı ama Gradle eklentiniz bana yararlı geri bildirim verdi, böylece neyin yanlış gittiğini kolayca düzeltebilirim.
Mendelt

Jason, hala bunun üzerinde mi çalışıyorsun? Son işlem 9 ay önce yapıldı ve not o zamandan beri sürümleri çarptı.
Peter Ajtai

Peter, Gradle'ın artık Android için yerel yapı sistemi olması nedeniyle gelişme durdu.
Jason Voegele



15

Bu ayrıntılı çözümü Eclipse 3.7, Scala 2.10 ve plug-in AndroidProguardScala v50 ile doğruladım:

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

Her şey yolunda gidiyor. Ölçeklendirilmiş ana aktivite sınıfına sahip basit bir test uygulaması sadece 38Kb alır. Kütüphaneler projeleri desteklenmektedir. Proje dışa aktarılırken koruma etkinleştirilir.


3
Kulağa harika geliyor. Bir aygıta dağıtım yaparken bu çözümle derleme süreleri nasıl (karşılaştırılabilir bir Java Android projesi dağıtmaya kıyasla)?
evilcandybag

1
Bir aygıta dağıtılırken oluşturma süresi yaklaşık 10 saniyedir. Umarım bir gün daha hızlı olur.
Mikaël Mayer

6
Bazı yeni iyi önbellek uygulaması nedeniyle en son android sdk ve eklentisi ile yaklaşık 1 saniye sürüyor.
Mikaël Mayer

7

Scala için Android uygulamaları geliştirmek sürekli olarak gelişmektedir. Bunu yapmanın en iyi yolu, STA / Android projemde benim için iyi çalışan * ve android-sdk-eklentisi ile birlikte SBT'ye görünür . Bu eklentinin daha önce bahsedilen Scaloid ile kullanımını gösteren biraz yeni bir örnek de bulunabilir .

Bu sorunun, Stack Overflow'da eski yanıtları olan bir sorunun tipik bir örneği olduğunu lütfen unutmayın . Bu cevap muhtemelen bir noktada güncelliğini yitirecektir.

* Bu cevap dizisinde belirtilen diğer SBT tabanlı projelerin, yazım sırasında son altı ay içinde kendileri için kod yazıldığı görülmemektedir. Scala ve SBT'nin daha yeni sürümleriyle uyumluluk sorunları yaşayabilirler.


6

Maven kullanıyorsanız, başlangıç ​​şablonu olarak android-scala-test kullanın . Kutudan çıktığı anda benim için harika çalışıyor.

Scaloid , Scala'da yazılmış ve Android programınızı Scala tarzında yazmanıza yardımcı olan bir Android API sarmalayıcısıdır.


4

Android'de Scala'yı SBT olmadan kullanabilirsiniz, Android uygulamaları oluşturmak için Gradle tarafından harici olarak inşa edilmiştir. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle, android için SBT'den daha yerli bir yapı aracıdır.

IntelliJ IDEA çalışma tezgahı için Scala istemci ve sunucu tarafı çözüm konseptine ve sınıf oluşturma aracına iyi bir örnek var.

Çekirdek sınıfların istemci ve sunucu için ortak olması büyük bir ilerleme.

https://github.com/ghik/akkdroid

IDEA ve android eklentisi için iyi bir öğretici: http://fxthomas.github.io/android-plugin/


3

Android'de Scala ile ilgili en büyük sorun derleme süreleridir.

Muhtemelen Proguard sınıfı nedeniyle IDEA13 / Scala eklentisi ile Çift Dört Çekirdekli (8-CPU) E5450 Xeon ile 8GB'lık sıyırma derlemeleri iki dakika veya daha fazla sürebilir.

Derleme süreleri çok sinir bozucu olduğu için büyük bir Scala Android projesini tamamladıktan sonra Java'ya geri döndüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.