Bibliotecas Android / Java

Estas preguntas son mi intento de entender cómo Android maneja archivos JAR y bibliotecas externas, etc. Es conceptual.

En Java, hay un archivo JAR rt.jar que viene con el JRE, por lo que cada aplicación tiene acceso a las bibliotecas principales de Java.

  1. ¿El cargador de clases de Java carga las clases sólo cuando las necesita la aplicación?

  2. ¿Es rt.jar equivalente a android / system / framework / jars?

  3. Cuando desarrollamos una aplicación con el SDK, incluimos android.jar desde una de las API de Android. ¿Es android.jar esencialmente el AOSP compilado para esa API (menos algunas bibliotecas ocultas)?

  4. Android.jar no se incluye realmente con un APK, ¿verdad? Una vez en un dispositivo, el APK está utilizando /system/framework/framework.jar, ¿correcto?

  5. Si sí a 4, ¿cómo le dice a una aplicación que use esa biblioteca? ¿Es esto algo que puedo ver el código fuente para?

  6. Cuando agregamos un JAR a un proyecto de Android, ¿esto es como incluir una biblioteca estática? El código de la biblioteca se acaba de compilar en classes.dex como el resto del proyecto?

  7. Cuando añadimos un proyecto de biblioteca de Android a una aplicación, ¿también se compila en classes.dex? La única diferencia entre esto y 6 es que un proyecto de biblioteca puede contener recursos?

  8. Si cada aplicación hace referencia a /system/framework/framework.jar (y otros, como services.jar etc.), ¿hay un montón de instancias de esa biblioteca ejecutándose al mismo tiempo en el dispositivo? ¿Es como una biblioteca dinámica que se carga en la memoria varias veces?

Me encantaría responder a todas estas preguntas, pero también agradecería sugerencias a algunos buenos lugares para leer sobre estas cosas.

Corregirme si estoy equivocado en cualquiera de las respuestas y editaré:

1.- Android ha sido JIT durante años, pero hay un nuevo tiempo de ejecución que obliga a AOT a mejorar el rendimiento ahora que la mayoría de los dispositivos pueden manejarlo: Dalvik ART

2.- ??

3-5.- La jarra del androide es proporcionada por el IDE para propósitos de compilación, pero la implementación real es cargada por el sistema operativo, así es como logran la compatibilidad hacia atrás (y la fragmentación) y los mismos APKs que trabajan en roms cocinadas como Samsung o Amazonas.

6.- Sí, todo está empaquetado en classes.dex y hay un hardcap de 65k métodos entre todas las dependencias. Hay algunas sustituciones del tiempo del compilador para las dependencias que ya pueden estar incluidas en el sistema operativo.

7.- No estoy seguro acerca de los nuevos AAR pero los módulos u otros proyectos se compilan y se agrupan, sí.

8.- Hay un espacio de memoria compartida para esas cosas, junto con los recursos del sistema: Commonsware – ¿Qué es la sección de Dalvik Consumo de memoria.

  • Generar un JAR ofuscado para la distribución de código
  • El mejor enfoque para cargar múltiples bibliotecas nativas en la aplicación para Android
  • Modificar clase en jar: android build failed
  • ¿Cómo integrar la biblioteca de código de Matlab con Android?
  • Intellij: android-support-v4.jar in incluido en actionBarSherlock y Project => IllegalArgumentException
  • Cómo quitar el archivo de clase en archivo .jar y cambiarlo con mi propia implementación
  • Cómo crear un archivo jar desde android studio
  • ¿Se incluyen métodos no referenciados en el ejecutable final?
  • Proyecto de biblioteca de Android como archivo jar para distribución, como google analytics
  • Erro de Xalan.jar al crear un proyecto android
  • ¡Desajuste del tarro! Corregir sus dependencias
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.