Este artículo compara las interfaces de programación de aplicaciones (API) y las máquinas virtuales (VM) del lenguaje de programación Java y el sistema operativo Android .
Aunque la mayoría de las aplicaciones de Android están escritas en un lenguaje similar a Java, existen algunas diferencias entre la API de Java y la API de Android, y Android no ejecuta el código de bytes de Java mediante una máquina virtual de Java (JVM) tradicional, sino mediante una máquina virtual Dalvik en versiones anteriores de Android, y un Android Runtime (ART) en versiones más recientes, que compilan el mismo código que ejecuta Dalvik en ejecutables en formato ejecutable y enlazable (ELF) que contienen código máquina .
El código de bytes de Java en los archivos JAR (Java Archive ) no se ejecuta en dispositivos Android. En su lugar, las clases de Java se compilan en formato de código de bytes de Android (código de bytes dex) y se ejecutan en Dalvik (o una versión compilada con ART más reciente), una máquina virtual (VM) especializada diseñada para Android. A diferencia de las máquinas virtuales de Java, que son máquinas de pila (arquitectura basada en pila), la máquina virtual de Dalvik es una máquina de registro (arquitectura basada en registro).
Dalvik tiene algunos rasgos que lo diferencian de otras máquinas virtuales estándar: [ 1 ]
- La máquina virtual fue diseñada para ocupar menos espacio.
- El conjunto de constantes se ha modificado para usar solo índices de 32 bits con el fin de simplificar el intérprete .
- El código de bytes estándar de Java ejecuta instrucciones de pila de 8 bits. Las variables locales deben copiarse hacia o desde la pila de operandos mediante instrucciones independientes. Dalvik, en cambio, utiliza su propio conjunto de instrucciones de 16 bits que opera directamente sobre variables locales. La variable local se suele seleccionar mediante un campo de registro virtual de 4 bits .
Debido a que el código de bytes cargado por la máquina virtual Dalvik no es código de bytes de Java y a la forma en que Dalvik carga las clases, es imposible cargar paquetes de bibliotecas como archivos jar . Se debe utilizar un procedimiento diferente para cargar las bibliotecas de Android, en el que el contenido del dexarchivo subyacente debe copiarse en el área de almacenamiento interno privado de la aplicación antes de cargarlo. [ 2 ]
Propiedades del sistema
Al igual que ocurre con la clase Java SESystem , la Systemclase Android permite recuperar propiedades del sistema. Sin embargo, algunas propiedades obligatorias definidas con la máquina virtual Java no tienen significado o tienen un significado diferente en Android. Por ejemplo:
java.versionLa propiedad devuelve 0 porque no se utiliza en Android.java.specification.versionSiempre devuelve 0,9, independientemente de la versión de Android utilizada.java.class.versionSiempre devuelve 50, independientemente de la versión de Android utilizada.user.dirtiene un significado diferente en Android.user.homeyuser.namelas propiedades no existen en Android.
Biblioteca de clases
Las versiones actuales de Android utilizan el lenguaje Java más reciente y sus bibliotecas (pero no los marcos de interfaz gráfica de usuario (GUI) completos), no la implementación Apache Harmony Java que utilizaban las versiones anteriores. El código fuente de Java 8 que funciona en la última versión de Android puede hacerse funcionar en versiones anteriores de Android. [ 3 ]
paquete java.lang
Por defecto, el flujo de salida predeterminado System.outno System.errgenera ninguna salida, [ 4 ] y se recomienda a los desarrolladores que utilicen la Logclase, que registra cadenas en la herramienta LogCat. [ 5 ] Esto ha cambiado al menos desde HoneyComb , y ahora también generan salidas a la consola de registro.
Biblioteca de gráficos y widgets
Android no utiliza ni el Abstract Window Toolkit ni la biblioteca Swing . Las interfaces de usuario se construyen mediante objetos View. Android utiliza un framework similar a Swing, basado en Viewen lugar JComponentde . Sin embargo, los widgets de Android no son JavaBeans : la aplicación Android Contextdebe proporcionarse al widget al crearlo.
Aspecto y sensación
La biblioteca de widgets de Android no admite una arquitectura de apariencia personalizable . La apariencia de los widgets de Android debe estar integrada en los propios widgets. Sin embargo, existe una capacidad limitada para establecer estilos y temas para una aplicación. [ 6 ]
Gestor de maquetación
A diferencia de Swing, donde los administradores de diseño se pueden aplicar a cualquier widget contenedor , el comportamiento de diseño de Android está codificado en los contenedores. [ 7 ]
paquete java.beans
Android incluye solo un pequeño subconjunto del java.beanspaquete ( PropertyChangeEventy clases relacionadas).
Véase también
Referencias
- ↑ Rose, John (31 de mayo de 2008). "Con Android y Dalvik en Google I/O" . Archivado del original el 4 de junio de 2008. Consultado el 8 de junio de 2008 .
- ↑ Fred Chung (28-07-2011). "Carga de clases personalizadas en Dalvik" . Google . Archivado del original el 18-02-2014 . Recuperado el 27-11-2011 .
- ↑ "Utiliza las características y API del lenguaje Java 8" . Desarrolladores de Android . Consultado el 23 de enero de 2021 .
- ↑ "Android Debug Bridge" . Google . Consultado el 31 de mayo de 2009.
Por defecto, el sistema Android envía la salida stdout y stderr (System.out y System.err) a /dev/null.
- ↑ "Registros de lectura y escritura" . Google . Archivado del original el 22/11/2011 . Consultado el 27/11/2011 .
- ↑ "Aplicación de estilos y temas" . Google . Archivado del original el 28 de marzo de 2014. Consultado el 3 de septiembre de 2011 .
- ↑ "Objetos de diseño comunes" . Google . Consultado el 3 de septiembre de 2011 .
- Android (sistema operativo)
- Java (lenguaje de programación)
- Comparaciones de cálculos