27 votes

L'utilisation de Scala sur Android en vaut-elle la peine? Y a-t-il beaucoup de frais généraux? Problèmes?

Je pensais à construire une application sur Android avec Scala au lieu du Java normal (ou l'équivalent je suppose). Est-ce que ça vaut le coup?

Des problèmes et des maux de tête inutiles?

25voto

Kevin Wright Points 31665

Travailler avec Scala devrait être la plupart du temps indolore, comme le dex compilateur fonctionne avec bytecode - ce qui est exactement ce que Scala produit.

Votre plus gros problème est la dépendance à l'égard de la scala-bibliothèque, dex s'attend à ce que tout soit dans un seul Pot. Ce sont manipulées avec le Proguard (qui sera aussi supprimer les code et vous donner un petit exécutable, idéal pour le mobile)


Actuellement la meilleure pratique consiste à utiliser SBT avec l'Android plugin, Il va prendre soin de tout pour vous: http://github.com/jberkel/android-plugin

Si vous devez utiliser Eclipse et le plugin fourni par Google, alors vous allez avoir un non-standard de la structure de répertoire. J'ai également écrit un article sur la façon de traiter ce: http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android

Mais attention... il prend beaucoup plus d'efforts dans ce sens!

15voto

om-nom-nom Points 33691

Il y a une conférence par des gars de la bu.mp sur Scala Jours 2011.

Avertissement: Pendant qu'ils parlent beaucoup sur les problèmes qu'ils ont rencontrés, l'expérience globale est certainement positif. En outre, ce sont les problèmes d'une équipe en particulier et ils sont mineurs.

Résumé:

  • L'utilisation de la mémoire. Les fermetures de consommer de la mémoire. Scala a des fermetures de tous sur la place. Alors qu'il n'est pas un parent gros problème (mémoire de frais généraux) sur votre table PC, il doit être considéré comme lorsque vous développez pour téléphone mobile. Vous demandez peut-être comment ils l'ont résolu? Ils avaient une chasse pour des boucles serrées et puis optimisés entre eux (réécrit en closureless scala/java). (26 minutes) , je pense que Java 8 natif de fermetures de soutien pour la soulager ce problème à Côté de la scala la libération de la cible java 8 plate-forme avec un nouveau backend et le but pour de bien meilleures performances. Discussion sur la feuille de route est ici.
  • Plus lent compilateur (comme Michal Galpin a dit qu'ils ont 15 secondes pour Java de la compilation du code, environ une minute pour Scala et à propos d'une commande d'une magnitude de plus de Proguard, mais notez que cela dépend de votre base de code et les machines, mais je soupçonne que ce ratio sera le même). Il est particulièrement gênant quand vous de faire de l'INTERFACE utilisateur, comme les pixels en mouvement, les boutons et ainsi de suite, et que vous voulez voir rapidement le résultat. (7e minute)
  • Il y avait quelques problèmes avec les classes internes qui sont tout à fait commun pour Android (regardez 23:00 pour plus de détails).
  • Il y avait de rares bugs dans scalac (scala compilateur) dans scala-java-les collections de l'interopérabilité. Les problèmes ont été résolus par l'écriture de ce genre de choses de façon explicite (je soupçonne que ce n'est pas beaucoup de passe-partout du tout).

Alors qu'il parle de IDEs trop, je ne pense pas que c'est un problème (regardez ce post, à propos de la Scala de l'environnement). Les gars qui ne Scala IDE et Ide à bien faire son travail et IDE de soutien est de mieux en mieux et mieux.

Pour les tests unitaires que l'on pourrait utiliser RoboSpecs (permet d'exécuter des tests unitaires à l'intérieur de la JVM, de ne pas l'intérieur de l'émulateur), qui est plus rapide.

L'un des plus grands problèmes que je viens de tombé sur est les limites de l'indice dex format (pas plus de 65536 méthode des références par dex fichier). Scala de bibliothèque n'a tout simplement pas dans les limites, de sorte que vous avez à la solution de contournement par:

  • à l'aide de Proguard qui va couper dans le gras de la scala lib. Mais il est vraiment très lent sur mon ordinateur portable, et il est juste de perdre du temps dans la phase de développement (mais est d'autant plus utile lorsque vous vous libérez de votre application sur Google Play)
  • à l'aide de predexed de la bibliothèque. La mauvaise chose est que ce projet est un peu abandonné et ne contient que des 2.9.0-1 version.
  • la préinstallation scala sur votre téléphone

Certains gars affirmant qu'il y a des problèmes avec IDEs, mais que les choses ont changé rapidement: la version actuelle de la IntelliJ IDEA 12 a non seulement un bon soutien de la Scala comme un plugin, mais il contient également Concepteur d'INTERFACE utilisateur pour les téléphones Android. En outre, vous pouvez utiliser Eclipse qui a un soutien de Android (Google) et Scala (par Typesafe) les côtés. Android Studio (le nouvel IDE basé sur l'IDÉE qui a été annoncé sur Google IO '13 et est développé par Google) appuyer l'IDÉE plugins ainsi Scala.

5voto

pr1001 Points 8334

Nous avons discuté de cette à la Scala de "Lift-Off" de Londres , vendredi dernier, et le consensus semble être que, généralement, il fonctionne très bien tant que vous évitez les Acteurs. Aussi, le sbt-android-plugin a été fortement recommandé. Nathan Hamblen blog a de nombreux messages sur Android et ceux aussi marqués Scala ont beaucoup de pièges vaut la peine de regarder dehors pour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X