Programación Scala para Android

258

He seguido el tutorial en Scala y Android con Scala 2.7.3 final. La aplicación de Android resultante funciona, pero incluso la aplicación más básica tarda varios minutos (!) En compilarse y necesita 900 kb comprimidos, lo que es un obstáculo para las aplicaciones móviles. Además, el IDE se queda sin memoria de vez en cuando. Supongo dexque no está hecho para grandes bibliotecas como scala-library.

  • Entonces mi pregunta es: ¿Alguien ha hecho esto realmente y hay alguna cura para esto?
Lemmy
fuente

Respuestas:

128

He escrito algunas aplicaciones básicas de Android en Scala, nada demasiado épico. Al no ser un programador de Java, me sugirieron que usara un "treehake", un amigo me explicó que esto elimina todas las bibliotecas innecesarias de los archivos jar .

No lo he documentado, pero descubrí que alguien más ya tiene:

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

Proguard no es la única solución, puede encontrar algo que se adapte a su flujo de trabajo o que sea más adecuado para su entorno.

Además, Google acaba de darse cuenta de JACK, que se ocupa de reducir bastante los tiempos de compilación y memoria, consulte https://source.android.com/source/jack.html


fuente
3
¡Gracias! Tendré que probar eso. Me pregunto si se puede usar con Eclipse (usando los complementos Scala y Android)
Lemmy
36
Lemmy, ¿hay alguna razón por la que no aceptaste esta respuesta? ¿Quizás encontraste una solución mejor?
Bostone
3
En mi experiencia, la sacudida de árboles no es lo suficientemente buena para la mayoría de los códigos de escala no triviales. Simplemente no es lo suficientemente agresivo.
James Moore
45

Ahora puede usar el complemento de Android para Gradle para crear aplicaciones de Android en Scala. Incorpora la herramienta ProGuard para recortar la grasa del archivo APK resultante, por lo que parece satisfacer sus necesidades.

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

Jason Voegele
fuente
¡Funciona genial! Ninguna de las soluciones que probé funcionó de fábrica, pero su complemento Gradle me dio comentarios útiles para que pudiera solucionar fácilmente lo que estaba mal.
Mendelt
Jason, ¿sigues trabajando en esto? La última confirmación fue hace 9 meses y desde entonces se han eliminado las versiones de grado.
Peter Ajtai
Peter, el desarrollo se detuvo debido al hecho de que Gradle es ahora el sistema de compilación nativo para Android.
Jason Voegele
22

También hay un complemento para el constructor basado en Scala sbt : sbt-android-plugin .

Jan Berkel
fuente
1
Este complemento no es compatible con las versiones más recientes de SBT. ¿Sigues manteniendo este complemento? Un complemento SBT que es compatible con las versiones más recientes de este, el complemento android-sdk .
DCKing
15

Verifiqué esta solución detallada con Eclipse 3.7, Scala 2.10 y el complemento AndroidProguardScala v50:

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

Todo funciona bien Una aplicación de prueba simple con clase de actividad principal scalafied solo toma 38Kb. Proyectos de bibliotecas son compatibles. Proguard se activa al exportar el proyecto.

Mikaël Mayer
fuente
3
Esto suena genial ¿Cómo son los tiempos de compilación con esta solución cuando se implementa en un dispositivo (en comparación con la implementación de un proyecto Java Android comparable)?
evilcandybag
1
El tiempo de construcción es de aproximadamente 10 segundos cuando se implementa en un dispositivo. Espero que sea más rápido algún día.
Mikaël Mayer
66
Tarda aproximadamente 1 segundo ahora con el último sdk y complemento de Android, debido a alguna nueva implementación de caché buena.
Mikaël Mayer
7

El desarrollo de aplicaciones de Android para Scala está en continua evolución. La mejor forma actual de hacerlo parece SBT en conjunto con el complemento android-sdk , que se mantiene * y funciona bien para mí en mi proyecto Scala / Android. Un ejemplo algo reciente que demuestra el uso de este plugin con el ya mencionado Scaloid puede también ser encontrado .

Tenga en cuenta que esta pregunta es un ejemplo típico de una pregunta con respuestas desactualizadas en Stack Overflow. Es probable que esta respuesta también esté desactualizada en algún momento.

* Los otros proyectos basados ​​en SBT mencionados en este hilo de respuesta no parecen tener código escrito para ellos en los últimos seis meses al momento de la escritura. Pueden tener problemas de compatibilidad con versiones más recientes de Scala y SBT.

DCKing
fuente
6

Si usa maven, use android-scala-test como plantilla de inicio. Funciona muy bien para mí fuera de la caja.

Scaloid es un contenedor de API de Android escrito en Scala que te ayuda a escribir tu programa de Android en estilo Scala.

pocorall
fuente
4

Puede usar Scala en Android sin SBT, construido externamente por Gradle para crear aplicaciones de Android. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle es una herramienta de construcción más nativa para Android que SBT.

Hay un buen ejemplo del concepto de solución del lado del cliente y servidor de Scala, y la herramienta de creación de gradle como avance para el banco de trabajo IntelliJ IDEA.

Gran avance de que las clases principales son comunes para el cliente y el servidor.

https://github.com/ghik/akkdroid

Buen tutorial para IDEA y el complemento de Android: http://fxthomas.github.io/android-plugin/

mikowiec
fuente
3

El mayor problema con Scala en Android son los tiempos de compilación.

Posiblemente debido a que las compilaciones de eliminación de clase Proguard con el complemento IDEA13 / Scala en un E5450 Xeon de doble núcleo cuádruple (8-CPU) con 8GB pueden tomar dos minutos o más.

Simplemente volví a Java después de completar un gran proyecto de Scala para Android, ya que los tiempos de compilación eran demasiado frustrantes.


fuente