Programmation Scala pour Android

258

J'ai suivi le tutoriel sur Scala et Android avec Scala 2.7.3 final. L'application Android qui en résulte fonctionne, mais même l'application la plus élémentaire prend plusieurs minutes (!) À compiler et a besoin de 900 ko compressés, ce qui est un frein pour les applications mobiles. De plus, l'IDE manque de mémoire de temps en temps. Je suppose que ce dexn'est pas fait pour les grandes bibliothèques comme le scala-library.

  • Ma question est donc la suivante: quelqu'un a-t-il réellement fait cela et existe-t-il un remède?
Lemmy
la source

Réponses:

128

J'ai écrit quelques applications Android de base dans Scala, rien de trop épique. N'étant pas programmeur Java, on m'a suggéré d'utiliser un "treehake", un ami m'a expliqué que cela supprime toutes les bibliothèques inutiles des fichiers jar .

Je ne l'ai pas documenté, mais j'ai constaté que quelqu'un d'autre a déjà:

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

Proguard n'est pas la seule solution, vous pourriez trouver quelque chose qui convient à votre flux de travail ou qui convient mieux à votre environnement.

De plus, Google vient de réaliser JACK, qui traite de beaucoup de réduction des temps de génération et de mémoire, voir https://source.android.com/source/jack.html


la source
3
Je vous remercie! Je vais devoir essayer ça. Je me demande s'il peut être utilisé avec Eclipse (en utilisant les plugins Scala et Android)
Lemmy
36
Lemmy - y a-t-il une raison pour laquelle vous n'avez pas accepté cette réponse? Peut-être avez-vous trouvé une meilleure solution?
Bostone
3
D'après mon expérience, le tremblement de l'arbre n'est pas assez bon pour la plupart des codes scala non triviaux. Ce n'est tout simplement pas assez agressif.
James Moore
45

Vous pouvez maintenant utiliser le plugin Android pour Gradle pour créer des applications Android dans Scala. Il intègre l'outil ProGuard pour couper la graisse du fichier APK résultant, semble donc répondre à vos besoins.

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

Jason Voegele
la source
Fonctionne très bien! Aucune des solutions que j'ai essayées n'a fonctionné, mais votre plugin Gradle m'a donné des commentaires utiles afin que je puisse facilement corriger ce qui n'allait pas.
Mendelt
Jason, travaillez-vous toujours là-dessus? Le dernier commit remonte à 9 mois et le grade a été bumpé depuis lors.
Peter Ajtai
Peter, le développement s'est arrêté car Gradle est désormais le système de build natif pour Android.
Jason Voegele
22

Il existe également un plugin pour le constructeur basé sur Scala sbt : sbt-android-plugin .

Jan Berkel
la source
1
Ce plugin n'est pas compatible avec les dernières versions de SBT. Maintenez-vous toujours ce plugin? Un plugin SBT qui est compatible avec les dernières versions de ce l' android-sdk-plugin .
DCKing
15

J'ai vérifié cette solution détaillée avec Eclipse 3.7, Scala 2.10 et le plug-in AndroidProguardScala v50:

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

Tout fonctionne bien. Une application de test simple avec une classe d'activité principale scalafiée ne prend que 38 Ko. Les projets de bibliothèques sont pris en charge. Proguard est activé lors de l'exportation du projet.

Mikaël Mayer
la source
3
Cela semble génial. Quels sont les temps de génération avec cette solution lors du déploiement sur un appareil (par rapport au déploiement d'un projet Java Android comparable)?
evilcandybag
1
Le temps de génération est d'environ 10 secondes lors du déploiement sur un appareil. J'espère que ce sera plus rapide un jour.
Mikaël Mayer
6
Cela prend environ 1 seconde maintenant avec le dernier SDK Android et le plug-in, en raison d'une nouvelle bonne mise en œuvre du cache.
Mikaël Mayer
7

Le développement d'applications Android pour Scala est en constante évolution. La meilleure façon actuelle de le faire apparaît à SBT en conjonction avec le plugin android-sdk , qui est maintenu * et fonctionne bien pour moi dans mon projet Scala / Android. Un exemple quelque peu récent qui montre l'utilisation de ce plugin avec le Scaloid déjà mentionné peut également être trouvé .

Veuillez noter que cette question est un exemple typique d'une question avec des réponses obsolètes sur Stack Overflow. Cette réponse deviendra probablement obsolète à un moment donné également.

* Les autres projets basés sur SBT mentionnés dans ce fil de réponse ne semblent pas avoir écrit de code pour eux au cours des six derniers mois au moment de la rédaction. Ils peuvent avoir des problèmes de compatibilité avec les nouvelles versions de Scala et SBT.

DCKing
la source
6

Si vous utilisez maven, utilisez android-scala-test comme modèle de démarrage. Cela fonctionne très bien pour moi, prêt à l'emploi.

Scaloid est un wrapper d'API Android écrit en Scala qui vous aide à écrire votre programme Android en style Scala.

pocorall
la source
4

Vous pouvez utiliser le Scala sur Android sans SBT, il a été construit en externe par Gradle pour créer des applications Android. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle est un outil de construction plus natif pour Android que SBT.

Il y a un bon exemple de concept de solution côté client et serveur Scala, et un outil de construction gradle comme une avancée pour IntelliJ IDEA workbench.

Une grande avancée: les classes de base sont courantes pour le client et le serveur.

https://github.com/ghik/akkdroid

Bon tutoriel pour IDEA et Android-plugin: http://fxthomas.github.io/android-plugin/

mikowiec
la source
3

Le plus gros problème avec Scala sur Android est le temps de compilation.

Peut-être à cause de la suppression de la classe Proguard, la compilation avec le plug-in IDEA13 / Scala sur un Dual Quad Core (8 CPU) E5450 Xeon avec 8 Go peut prendre deux minutes ou plus.

Je suis simplement retourné à Java après avoir terminé un grand projet Scala Android car les temps de compilation étaient trop frustrants.


la source