Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo orientar Android con Scala 2.8 Trunk builds

La referencia definitiva para usar Scala en android parece estar aquí: http://www.scala-lang.org/node/160

Desafortunadamente, todas las referencias sobre el uso de scala con android se basan en Scala 2.7 y se refieren a una compilación personalizada android-library.jar, con un par de referencias crípticas que sugieren que esta compilación personalizada no es necesaria para las versiones posteriores de android M usando 2.1 / API v7)

  • Gradle: añadir dependencia para un sabor específico de la biblioteca
  • ¿Cómo puedo activar adecuadamente ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS?
  • Quitar la barra de desplazamiento de ScrollView mediante programación en Android
  • ¿Cómo obtener el color principal del tema de material en XML extraíble?
  • Android - Barcode Scanning, Opciones? Zxing?
  • Cambio del mensaje de diálogo de progreso durante la ejecución
  • Entonces … ¿Cuáles son los pasos necesarios para usar Scala 2.8 en un proyecto android? Preferentemente utilizando eclipse y las herramientas de Android que Google proporciona para ese IDE.

  • Botón de Android con icono y texto
  • Firebase Notificaciones FCM click_action carga útil
  • Cómo funciona OpenUDID
  • Crear SSL-Socket en Android con certificado autofirmado
  • Autenticación de Apache HttpClient Digest
  • ¿Qué son los archivos ODEX en Android?
  • 5 Solutions collect form web for “Cómo orientar Android con Scala 2.8 Trunk builds”

    Editar:

    Mi nueva forma de hacer esto es usar mi complemento de Eclipse: https://github.com/banshee/AndroidProguardScala (el readme tiene instrucciones para instalar y un puntero a un sitio de actualización normal de Eclipse).

    La vieja respuesta sigue funcionando, pero la nueva forma es mejor.

    [La vieja manera] Mi enfoque:

    • Utilice las herramientas normales de Android / eclipse para crear un proyecto Java.
    • Agregue un segundo proyecto que contenga el código Scala. Esa manera consigo guardar el código generado para la referencia futura (soy nuevo en el androide y Scala). Este proyecto puede hacer referencia a android.jar.
    • El proyecto scala produce un archivo jar que se utiliza en el proyecto java
    • Use proguard para quitar la biblioteca. Creo que esto evita la necesidad de la scala-android.jar que se utilizó en 2.7

    No he utilizado esto para algo más ambicioso que hola, mundo, así que tomarlo como más de un conjunto de consejos.

    En el proyecto scala, agrego un constructor (Builder> New) que es sólo un script de shell llamado pguard en el directorio raíz del proyecto que contiene:

    #!/bin/sh cd $1 PROGUARD=$HOME/dev/proguard/lib/proguard.jar LIBS= OUTPUT=lib/proguard.jar rm -f $OUTPUT AJAR=/Users/jamesmoore/dev/android-sdk-mac_86/platforms/android-7/android.jar # java -jar $PROGUARD -injars 'bin:lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)' -outjar $OUTPUT -libraryjars @proguard.txt java -Xmx1g -jar $PROGUARD -injars 'bin:lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)' -outjar $OUTPUT -libraryjars $AJAR @proguard.txt 

    El generador tiene Ubicación establecida en:

     ${build_project}/pguard 

    Y tanto el directorio de trabajo como los argumentos establecidos en

     ${build_project} 

    También en la raíz del proyecto scala, hay un archivo proguard arguments @ proguard.txt:

     -dontwarn -dontoptimize -dontobfuscate -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keep public class com.banshee.** { public protected *; } 

    Usted querrá cambiar los argumentos de mantenimiento para mantener su propio código, por supuesto.

    En el proyecto java, agrego el archivo jar que es producido por el proyecto scala (yo uso lib / proguard.jar en el script anterior).

    Sin embargo, no agregue el proyecto scala como un proyecto requerido en la ruta de construcción del proyecto java. Eso agregará los archivos de clase scala además del archivo jar y confundirá dex (ya que obtendrá los archivos .class y las mismas cosas en el jar). Por lo que puedo decir, Eclipse va a construir todo en el espacio de trabajo, por lo que cuando se pulsa el botón de ir, ambos proyectos se construyen.

    Después de mucha investigación, realmente parece que Proguard es esencial para mantener el tamaño y la velocidad de despliegue de la aplicación a niveles razonables.

    Lamentablemente, no hay una forma adecuada para incrustar proguard como un paso de construcción. El uso de scripts podría ser una posibilidad, pero también necesito soportar entornos Windows, Linux y OSX.

    También estaba inseguro acerca de la solución de doble proyecto, ya que impidió que el código de Scala usara el archivo de recursos generados R.java, que quería ser capaz de hacer.

    Al final, pude hacer que tanto SBT como Ant construyeran una aplicación de android 2.1 usando Scala 2.8. Ant fue la solución final favorita ya que funciona con la misma organización de archivos que el complemento eclipse de Android. He escrito la solución aquí: http://scala-ide.assembla.com/wiki/show/ae55a-oWSr36hpeJe5avMc/Developing_for_Android

    Eclipse luego lanza Ant como una herramienta externa para empaquetar e instalar la aplicación.

    Ahora estoy usando una modificación de mi respuesta anterior para ejecutar en Windows: basta con mover todo a @ proguard_windows.txt para que no tenga que preocuparse de correr como un script.

    Mi nuevo @ proguard_windows.txt se parece a:

     -injars bin;lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties) -outjar gen/scandroid.jar -libraryjars lib/android.jar -dontwarn -dontoptimize -dontobfuscate -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keep public class com.banshee.** { public protected *; } -keep public class org.xml.sax.EntityResolver { public protected *; } 

    Y tenga en cuenta que en Windows, es necesario utilizar un punto y coma para -injars. Asqueroso.

    El constructor se ve así:

     (running cygwin here, so the cat option path takes a slash) James@Greine:/cygdrive/c/Users/james/workspace/Scala2$ cat .externalToolBuilders/proguard.launch <?xml version="1.0" encoding="UTF-8" standalone="no"?> <launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="C:\Windows\System32\java.exe"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Xmx1g -jar lib/proguard.jar @proguard_windows.txt"/> <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project}"/> </launchConfiguration> 

    Usted querrá poner esto en .externalToolBuilders / proguard.launch.

    Lo interesante aquí es que es sólo un comando de java, no cualquier tipo de script de shell, por lo que es bastante fácil de puerto entre Windows / Mac (y estoy asumiendo Linux, pero no lo han hecho aún), ya que está Simplemente cambiando la ubicación del binario java real.

    (Presentando esto como una nueva respuesta, porque es un poco diferente de la que se marcó como la respuesta correcta (ish)

    He estado usando Proguard para ensamblar la biblioteca Scala en Eclipse / ADT construye, pero deja mucho que desear. Es lento y desordena los otros archivos .class, por lo que tienes que reconstruir el proyecto más a menudo que no.

    Inspirado por estas preguntas y algunos de los problemas en el rastreador de problemas de Android, he hecho otra herramienta (basada en Jar Jar Enlaces) que ahora uso para árboles de la biblioteca scala. Con este paso de construcción estoy realmente bastante feliz con todo el Eclipse + ADT Scala en la situación de Android. Tal vez funcione para usted también, darle un giro, está disponible en http://code.google.com/p/treeshaker/

    Si está cómodo con la herramienta de generación de Gradle, entonces el complemento de Android para Gradle hace que este proceso sea extremadamente sencillo. Vea: http://wiki.github.com/jvoegele/gradle-android-plugin/

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.