Scala-Programmierung für Android

258

Ich habe das Tutorial bei Scala und Android mit Scala 2.7.3 final verfolgt. Die resultierende Android-App funktioniert, aber selbst die einfachste Anwendung benötigt einige Minuten (!), Um kompiliert zu werden, und benötigt 900 kb komprimierte App , was ein Show-Stopper für mobile Anwendungen ist. Außerdem geht der IDE von Zeit zu Zeit der Speicher aus. Ich gehe davon aus, dass dexes nicht für große Bibliotheken wie die gemacht ist scala-library.

  • Meine Frage ist also: Hat jemand dies tatsächlich getan und gibt es eine Heilung dafür?
Lemmy
quelle

Antworten:

128

Ich habe einige grundlegende Android-Anwendungen in Scala geschrieben, nichts zu episch. Da ich kein Java-Programmierer bin, wurde mir vorgeschlagen, einen "Treeshake" zu verwenden. Ein Freund erklärte mir, dass dadurch alle unnötigen Bibliotheken aus den JAR- Dateien entfernt werden.

Ich habe es nicht dokumentiert, aber ich habe festgestellt, dass jemand anderes bereits:

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

Proguard ist nicht die einzige Lösung. Möglicherweise finden Sie etwas, das zu Ihrem Arbeitsablauf passt oder besser für Ihre Umgebung geeignet ist.

Darüber hinaus hat Google gerade JACK realisiert, das sich mit einer erheblichen Reduzierung der Build- und Speicherzeiten befasst. Siehe https://source.android.com/source/jack.html


quelle
3
Danke dir! Ich werde das ausprobieren müssen. Ich frage mich, ob es mit Eclipse (mit den Scala- und Android-Plugins) verwendet werden kann
Lemmy
36
Lemmy - gibt es einen Grund, warum Sie diese Antwort nicht akzeptiert haben? Vielleicht haben Sie eine bessere Lösung gefunden?
Bostone
3
Nach meiner Erfahrung ist Baumshake für die meisten nicht trivialen Scala-Codes nicht gut genug. Es ist einfach nicht aggressiv genug.
James Moore
45

Sie können jetzt das Android-Plugin für Gradle verwenden, um Android-Anwendungen in Scala zu erstellen. Es enthält das ProGuard-Tool zum Trimmen des Fettes aus der resultierenden APK-Datei und scheint also Ihren Anforderungen zu entsprechen.

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

Jason Voegele
quelle
Funktioniert super! Keine der Lösungen, die ich ausprobiert habe, hat sofort funktioniert, aber Ihr Gradle-Plugin hat mir nützliches Feedback gegeben, damit ich leicht beheben kann, was schief gelaufen ist.
Mendelt
Jason, arbeitest du noch daran? Das letzte Commit war vor 9 Monaten und die Version der Version wurde seitdem erhöht.
Peter Ajtai
Peter, die Entwicklung wurde gestoppt, weil Gradle jetzt das native Build-System für Android ist.
Jason Voegele
22

Es gibt auch ein Plugin für den Scala-basierten Builder sbt : sbt-android-plugin .

Jan Berkel
quelle
1
Dieses Plugin ist nicht mit den neuesten Versionen von SBT kompatibel. Pflegen Sie dieses Plugin noch? Ein SBT-Plugin, das mit den neuesten Versionen dieses Android-SDK-Plugins kompatibel ist .
DCKing
15

Ich habe diese detaillierte Lösung mit Eclipse 3.7, Scala 2.10 und dem Plug-in AndroidProguardScala v50 überprüft:

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

Alles funktioniert gut. Eine einfache Testanwendung mit skalierter Hauptaktivitätsklasse benötigt nur 38 KB. Bibliotheksprojekte werden unterstützt. Proguard wird beim Exportieren des Projekts aktiviert.

Mikaël Mayer
quelle
3
Das klingt großartig. Wie sind die Erstellungszeiten mit dieser Lösung bei der Bereitstellung auf einem Gerät (im Vergleich zur Bereitstellung eines vergleichbaren Java Android-Projekts)?
Evilcandybag
1
Die Erstellungszeit beträgt bei der Bereitstellung auf einem Gerät etwa 10 Sekunden. Ich hoffe, dass es eines Tages schneller geht.
Mikaël Mayer
6
Mit dem neuesten Android SDK und Plug-In dauert es jetzt ungefähr 1 Sekunde, da einige neue gute Cache-Implementierungen vorliegen.
Mikaël Mayer
7

Die Entwicklung von Android-Apps für Scala wird kontinuierlich weiterentwickelt. Der derzeit beste Weg, dies zu tun, erscheint SBT in Verbindung mit dem Android-SDK-Plugin , das * beibehalten wird und für mich in meinem Scala / Android-Projekt gut funktioniert. Ein etwas aktuelles Beispiel, das die Verwendung dieses Plugins mit dem bereits erwähnten Scaloid demonstriert, ist ebenfalls zu finden .

Bitte beachten Sie, dass diese Frage ein typisches Beispiel für eine Frage mit veralteten Antworten zum Stapelüberlauf ist. Diese Antwort wird wahrscheinlich auch irgendwann veraltet sein.

* Die anderen SBT-basierten Projekte, die in diesem Antwort-Thread erwähnt werden, scheinen zum Zeitpunkt des Schreibens in den letzten sechs Monaten keinen Code für sie geschrieben zu haben. Möglicherweise treten Kompatibilitätsprobleme mit neueren Versionen von Scala und SBT auf.

DCKing
quelle
6

Wenn Sie Maven verwenden, verwenden Sie Android-Scala-Test als Startvorlage. Es funktioniert hervorragend für mich sofort.

Scaloid ist ein in Scala geschriebener Android-API-Wrapper, mit dem Sie Ihr Android-Programm im Scala-Stil schreiben können.

pocorall
quelle
4

Sie können die Scala unter Android ohne SBT verwenden. Sie wurde extern von Gradle erstellt, um Android-Anwendungen zu erstellen. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle ist ein nativeres Bauwerkzeug für Android als SBT.

Es gibt ein gutes Beispiel für das clientseitige und serverseitige Scala-Lösungskonzept und das Gradle-Building-Tool als Fortschritt für die IntelliJ IDEA-Workbench.

Großer Fortschritt, dass Kernklassen für Client und Server üblich sind.

https://github.com/ghik/akkdroid

Gutes Tutorial für IDEA und Android-Plugin: http://fxthomas.github.io/android-plugin/

mikowiec
quelle
3

Das größte Problem mit Scala unter Android sind die Kompilierungszeiten.

Möglicherweise kann das Strippen mit dem IDEA13 / Scala-Plugin auf einem Dual Quad Core (8-CPU) E5450 Xeon mit 8 GB aufgrund der Proguard-Klasse zwei Minuten oder länger dauern.

Ich bin einfach zu Java zurückgekehrt, nachdem ich ein umfangreiches Scala-Android-Projekt abgeschlossen hatte, da die Kompilierungszeiten zu frustrierend waren.


quelle