2009-01-24 14 views
245

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

  • Así que mi pregunta es: ¿Alguien ha hecho esto y hay alguna cura para esto?

Respuesta

125

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

no he documentado, pero me encontré con que alguien ya lo tiene:

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

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

Además Google sólo se han dado cuenta JACK, que se ocupa mucho de la reducción de construir y tiempos de memoria ver https://source.android.com/source/jack.html

+3

¡Gracias! Tendré que probarlo. Me pregunto si se puede usar con Eclipse (usando los complementos de Scala y Android) – Lemmy

+34

Lemmy: ¿hay alguna razón por la que no haya aceptado esta respuesta? Quizás encontraste una mejor solución? – Bostone

+0

El enlace ha vuelto a subir – Markus

43

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

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

+0

¡Funciona muy bien! Ninguna de las soluciones que probé funcionaron de la caja sino que su plugin de Gradle me dio retroalimentación útil así que podría corregir fácilmente lo que estaba yendo mal. – Mendelt

+0

Jason, ¿sigues trabajando en esto? El último compromiso fue hace 9 meses y el grado ha tenido versiones desde entonces. –

+0

Peter, el desarrollo se ha detenido debido al hecho de que Gradle ahora es el sistema de compilación nativo para Android. –

21

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

+1

Este complemento no es compatible con las versiones más recientes de SBT. ¿Todavía estás manteniendo este complemento? Un plugin SBT * que * es * compatible con las versiones más recientes de este [android-sdk-plugin] (https://github.com/pfn/android-sdk-plugin). – DCKing

13

verifiqué esta solución detallada con Eclipse 3.7, Scala 2.10 y el plug-in AndroidProguardScala v50:

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

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

+3

Esto suena increíble. ¿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 compilación es de alrededor de 10 segundos cuando se implementa en un dispositivo. Espero que sea más rápido algún día. –

+5

Tarda aproximadamente 1 segundo ahora con el último sdk y plug-in de Android, debido a una nueva implementación de buena caché. –

6

Si usa maven, use android-scala-test como plantilla de inicio. Funciona muy bien para mí desde el primer momento.

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

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 de cliente y servidor de Scala, y la herramienta de construcción de gradle como avance para el banco de trabajo IntelliJ IDEA.

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

https://github.com/ghik/akkdroid

buen tutorial para IDEA y el androide-plugin: http://fxthomas.github.io/android-plugin/

6

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

Tenga en cuenta que esta pregunta es un ejemplo típico de question with outdated answers en Stack Overflow. Es probable que esta respuesta también se desactualice en algún momento.

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

2

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

Posiblemente debido a las compilaciones de eliminación de clase Proguard con IDEA13/Scala plugin en un Dual Quad Core (8 CPU) E5450 Xeon con 8 GB puede tomar dos minutos o más.

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

Cuestiones relacionadas