android - investigaciones - libros sobre youtube pdf
¿Cómo integrar Scala en la plataforma principal de Android? (1)
Chicos en reddit dicen, hay un tutorial sobre la integración de Scala en Android con ant here .
Estoy interesado en integrar Scala (o algún otro lenguaje JVM que no sea Java) en la plataforma Android. No me refiero a escribir una aplicación de Android con Scala, como lo hice desde el principio, pero en realidad me conecté al proceso de construcción que construye el árbol de fuentes de la plataforma Android. Me imagino que esto será una cuestión de enganchar a los makefiles y tal. ¿Alguien tiene una idea de esto?
Lo que tengo hasta ahora: el código fuente de la plataforma de git: //android.git.kernel.org/platform/manifest.git construido en su forma virgen, guiado por "[Descargar y crear Google Android] [1]"
- build / core / combo / scalac.mk # Configura las variables relacionadas con el compilador de Scala, incluidas por config.mk
- Se agregaron definiciones en build / core / preferences.mk para un all-subdir-scala-files y all-scala-files-under
- Se agregó una definición en definiciones.mk para crear archivos scala de manera que se incluyan en el paquete
Lo que queda:
- Incluir scala-library.jar
- Asegúrate de que los cambios en -bootclasspath no hayan roto nada
- Averigüe cómo manejar el caso en el que las clases de scala dependen de las clases de java y viceversa.
- Mayor limpieza de código.
- ¡Pruebas!
- Averigüe qué hacer (aparte de publicarlos aquí) con los cambios que he realizado.
Parece que estoy casi allí !!!
Algunas notas del pasado.
Último: ¡He encontrado dónde se compilan los archivos fuente de Java! En definiciones.mk, vea ''definir transform-java-to-classes.jar''. La idea más reciente es escribir una definición de transformación-scala-a-clases y luego hacer que almacene esas clases directamente en el paquete que se empaqueta. Llamaré a transform-scala-to-class justo antes de este paso en transform-java-to-classes.jar. El soporte para eclipse y cygwin por ahora se eliminará, ya que desordena el código con soluciones alternativas y, por lo tanto, aumenta mis posibilidades de fracaso.
El proceso de compilación comienza con el Makefile raíz ejecutando build / core / main.mk build / core / main.mk incluye build / core / config.mk que incluye build / core / combo / javac.mk que establece HOST_JAVAC, TARGET_JAVAC, y COMMON_JAVAC. COMMON_JAVAC es el "comando del compilador de Java con argumentos comunes", por lo que parece, las otras dos variables obtienen estos valores de forma predeterminada, a menos que estén en un entorno especial (openjdk o eclipse). COMMON_JAVAC no se utiliza fuera de este archivo. Los otros dos solo se usan en build / core / preferences.mk.
build / core / java_library.mk (incluido por config.mk) parece que solo se preocupa por construir jars. Esto está fuera del alcance de nosotros cuidando. Cualquier interacción con jars presupone archivos de clase que presuponen que ya tuvimos éxito en la construcción de nuestros archivos de scala.
Hay verificaciones en main.mk con respecto a la versión de java. Los ignoraremos y asumiremos que nuestra versión de scala es compatible. Ahora mismo (en combo / scalac.mk) estoy usando el mismo --target arg usado en javac.mk. Esto tal vez debería ser almacenado en una variable.
main.mk también incluye build / core / preferences.mk que a su vez define algunas funciones útiles. El que nos importa aquí es all-java-files-under y all-subdir-java-files. Este último se utiliza en los archivos Android.mk para encontrar archivos java. El primero se utiliza en la implementación del segundo. Escribiré los equivalentes de Scala de ellos.
Para averiguar cómo funciona el proceso de compilación, ahora estoy ejecutando make with -n y otros. Obtuve esta idea del artículo "[Herramienta para depurar makefiles] [2] de stackoverflow". También estoy investigando la depuración con remake.
build / core / {config.mk, preferences.mk} nos da una idea de qué archivos / comandos se utilizan para hacer qué.
Como una posible forma de piratear el soporte en base a cada proyecto, lo más probable es que se agregue un código adicional al archivo Android.mk del proyecto. Desde la plataforma / build / core / build-system.html leemos "Android.mk es el nombre estándar para los fragmentos de makefile que controlan la construcción de un módulo dado. Solo el directorio superior debe tener un archivo llamado" Makefile "." Podría crear un nuevo destino como "scala-build" y ejecutar eso (haga que PackageName scala-build) antes de la final. Tal vez uno también podría ocultarlo furtivamente en una asignación de variable, mitigando la necesidad de que un objetivo sea llamado explícitamente.
Otra forma (mucho más intrépida) es secuestrar el comando que se usa para javac. Esto se establece en build / core / combo / javac.mk. El Android.mk de su proyecto deberá incluir los archivos * .scala en LOCAL_SRC_FILES junto con los archivos * .java.