En esta página, se explica cómo configurar el tiempo de ejecución de Android (ART) y sus opciones de compilación. Temas
que aquí se abordan incluyen la configuración de compilación previa de la imagen del sistema, dex2oat
opciones de compilación y cómo compensar el espacio de partición del sistema, el espacio de partición de datos y
rendimiento.
Consulta ART y Dalvik y el formato ejecutable Dalvik para trabajar con ART. Consulta Verificación Comportamiento de la app en Android Runtime (ART) para garantizar que funcionen correctamente.
Cómo funciona ART
ART usa compilación anticipada (AOT) y, a partir de Android 7, usa una combinación híbrida de compilación AOT, compilación justo a tiempo (JIT) e interpretación, y la compilación AOT se puede guiar por perfiles. La combinación de todos estos modos de ejecución configurables y se analizarán en esta sección. Por ejemplo, los dispositivos Pixel están configurados para funcionan en el siguiente flujo:
- Inicialmente, se instala una aplicación con un archivo de metadatos dex (
.dm
) distribuido por Play Store, que contiene un perfil de nube. El AOT de ART compila los métodos enumerados en la nube perfil. O bien, si la aplicación se instala sin un archivo de metadatos dex, no se realizará ninguna compilación AOT una tarea. - Las primeras veces que se ejecuta la aplicación, se interpretan los métodos que no se compilan con AOT. Entre los métodos interpretados, aquellos que se ejecutan con frecuencia se compilan mediante JIT. ARTE genera un perfil local basado en la ejecución y lo combina con el perfil de nube (si existe existe).
- Cuando el dispositivo está inactivo y cargándose, se ejecuta un daemon de compilación para volver a compilar la aplicación. según el perfil combinado generado durante las primeras ejecuciones.
- En las ejecuciones posteriores de la aplicación, ART usa los artefactos generados por la compilación. daemon, que contienen más código compilado por AOT, en comparación con los generados durante Los métodos que no se compilan con AOT se interpretan o compilan con JIT. ART actualiza el perfil instalación, según la ejecución, y el perfil será recogido por las ejecuciones posteriores de el daemon de compilación.
ART incluye un compilador (la herramienta dex2oat
) y un tiempo de ejecución
(libart.so
) que se carga durante el inicio. El
La herramienta dex2oat
toma un archivo APK y genera uno o más.
Archivos de artefactos de compilación que carga el entorno de ejecución. La cantidad de archivos, su
extensiones y nombres están sujetos a cambios en todas las versiones, pero, a partir del
Android 8. Se generan los siguientes archivos:
.vdex
: Contiene algunos metadatos adicionales para acelerar la verificación, en ocasiones junto con el código DEX sin comprimir del APK..odex
: Contiene código compilado por AOT para los métodos de la APK.art (optional)
contiene ART interno de algunas cadenas y clases, que se usan para acelerar inicio de la app.
Opciones de compilación
Existen dos categorías de opciones de compilación para ART:
- Configuración de la ROM del sistema: ¿Qué código se compila con AOT al compilar un imagen del sistema.
- Configuración del tiempo de ejecución: Cómo ART compila y ejecuta aplicaciones en un dispositivo.
Filtros del compilador
Una opción principal de ART para configurar estas dos categorías es el compilador.
filtros. Los filtros del compilador controlan la manera en que ART compila código DEX y es un
la opción que se pasa a la herramienta dex2oat
. A partir de Android 8,
Existen cuatro filtros oficialmente admitidos:
verify
: Solo ejecuta la verificación de código DEX (no una compilación AOT).quicken
: (hasta Android 11) ejecuta el código DEX. y optimizar algunas instrucciones DEX para mejorar el rendimiento de los intérpretes.speed
: Ejecuta la verificación de código DEX y realiza la compilación con AOT todos los métodos.speed-profile
: Ejecuta la verificación de código DEX y los métodos de compilación AOT enumerado en el archivo de perfil.
Configuración de la ROM del sistema
Las bibliotecas y apps preinstaladas se compilan mediante AOT cuando se compila una imagen del sistema. Esta se denomina dexpreopt. Esos archivos compilados se pueden usar siempre que todas las dependencias permanezcan sin cambios, en particular, en la ruta de clase de inicio.
Nota: Si el dispositivo toma el módulo del sistema, la ruta de clase de inicio es muy Es probable que cambie en la próxima actualización, lo que hace que todos los archivos dexpreopt sean obsoletos e inutilizables.
Existen varias opciones de compilación de ART disponibles para configurar dexpreopt. Cómo configurar según el espacio de almacenamiento disponible para la imagen del sistema y la cantidad y apps preinstaladas. Los archivos JAR o APK que se compilan en una ROM del sistema se pueden dividir en cuatro categorías:
- Código de ruta de clase de inicio: compilado con el filtro del compilador
speed-profile
por de forma predeterminada. - El código del servidor del sistema (consulta
PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
más adelante en este documento):- .
- (Android 14 y versiones posteriores) Compilado con
speed-profile
de compilación de forma predeterminada; o bien se compila con el filtro del compiladorspeed
si se trata de perfil no proporcionado. - (Android 13 y versiones anteriores) Compilado con
speed
de compilación de forma predeterminada.
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
(ver más adelante en este documento). - (Android 14 y versiones posteriores) Compilado con
- Apps principales específicas de productos (consulta
PRODUCT_DEXPREOPT_SPEED_APPS
más adelante en este documento): compilado con el filtro del compiladorspeed
de forma predeterminada. - Todas las demás apps: compiladas con el filtro del compilador
speed-profile
de forma predeterminada o compilarse con el filtro de compiladorverify
si no se proporciona un perfil.Se puede configurar mediante
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(ver más adelante en este documento).
Opciones de Makefile
WITH_DEXPREOPT
DONT_DEXPREOPT_PREBUILTS
(Android 5 y versiones posteriores)PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(Android 9) y versiones posteriores).WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
(a partir de Android 8 MR1)LOCAL_DEX_PREOPT
PRODUCT_DEX_PREOPT_BOOT_FLAGS
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
PRODUCT_DEX_PREOPT_MODULE_CONFIGS
PRODUCT_DEXPREOPT_SPEED_APPS
(desde Android 8)PRODUCT_SYSTEM_SERVER_APPS
(desde Android 8)PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD
(desde Android 8)WITH_DEXPREOPT_PIC
(hasta Android 7)WITH_DEXPREOPT_BOOT_IMG_ONLY
(hasta Android 7) MR1)PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
- (Android 14 y versiones posteriores) Si no se especifica, el atributo
speed-profile
Se usa el filtro del compilador o el filtro del compiladorspeed
si no se usa un perfil que se proporcionan. - (Android 13 y versiones anteriores) Si no se especifica, el compilador
speed
filtro. - Si se configura en
speed
, se usa el filtro del compiladorspeed
. - Si se establece en
speed-profile
, se usa el filtro del compiladorspeed-profile
. o se usa el filtro del compiladorverify
si no se proporciona un perfil. - Si se configura en
verify
, se usa el filtro del compiladorverify
. PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
- (Obligatorio)
PRODUCT_SYSTEM_SERVER_JARS
: Lista de archivos JAR de rutas de clase del servidor del sistema activados la plataforma (es decir, como parte deSYSTEMSERVERCLASSPATH
). Agregando el servidor del sistema los archivos JAR de ruta de clase a esta lista son obligatorios. No se pudieron agregar los archivos JAR de rutas de clase del servidor del sistema a la lista y hará que no se carguen esos archivos JAR. - (Obligatorio)
PRODUCT_APEX_SYSTEM_SERVER_JARS
: Lista de archivos JAR de rutas de clase del servidor del sistema se publiquen con APEX (es decir, como parte deSYSTEMSERVERCLASSPATH
). El formato es<apex name>:<jar name>
Agrega archivos JAR de rutas de clase del servidor del sistema APEX a esta lista es obligatoria. Si no se agregan los archivos JAR de rutas de clase del servidor del sistema APEX a esta lista, se generará que no se carguen. - (Opcional, Android 13 y versiones anteriores)
PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
: Lista de archivos JAR que carga el servidor del sistema de forma dinámica con cargadores de clases separadosSystemServiceManager.startServiceFromJar
). Agregar archivos JAR de servidores del sistema independientes a Esta lista no es obligatoria, pero se recomienda muy porque hace que los archivos JAR se compilen y por lo tanto, tienen un buen rendimiento del entorno de ejecución. - (obligatorio a partir de Android 13)
PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
: Lista de JAR entregados con APEX que el servidor del sistema carga dinámicamente usando cargadores de clases separados (que es medianteSystemServiceManager.startServiceFromJar
o se declaró como<apex-system-service>
). El formato es<apex name>:<jar name>
Agregar archivos JAR independientes del servidor del sistema APEX a esta lista es obligatoria. Si no se agregan archivos JAR del servidor del sistema APEX independientes a esta lista, se generará falla de inicio.
Indica si se invoca dex2oat
en el código DEX instalado en la imagen del sistema. Habilitada de forma predeterminada.
Si habilitas DONT_DEXPREOPT_PREBUILTS
, no se podrán ejecutar las compilaciones previas
dexpreoptado. Estas son apps que tienen include $(BUILD_PREBUILT)
especificadas en su Android.mk
. Omitir
dexpreopt de apps compiladas previamente que probablemente se actualicen mediante Google Play
ahorra espacio en la imagen del sistema, pero aumenta el tiempo del primer inicio. Ten en cuenta que esta opción no tiene efecto.
en apps compiladas previamente definidas en Android.bp
.
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
especifica el filtro del compilador predeterminado.
para las aplicaciones dexpreoptadas. Estas apps se definen en Android.bp
o tienen
Se especificó include $(BUILD_PREBUILT)
en su Android.mk
. Si no se especifica,
el valor predeterminado es speed-profile
o verify
si no se especifica
y no se proporciona un perfil.
Si habilitas WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
, solo se anula la suscripción
la ruta de clase de arranque
y los archivos jar del servidor del sistema.
Dexpreopt también se puede habilitar o inhabilitar individualmente en una app
Especificando la opción LOCAL_DEX_PREOPT
en la definición del módulo
Esto puede ser útil para inhabilitar la dexpreopt en apps que podrían
actualizaciones de Google Play, ya que estas renderizarían el modelo dexpreoptado
el código de la imagen de sistema está obsoleto. Esto también es útil para ahorrar espacio en las
actualizaciones OTA de versión porque es posible que los usuarios ya tengan versiones más recientes de las apps en el
en la partición de datos.
LOCAL_DEX_PREOPT
admite los valores true
o false
para
habilitar o inhabilitar dexpreopt, respectivamente. Además, nostripping
puede
especificar si dexpreopt no debe eliminar classes.dex
del archivo APK o JAR. Por lo general, este archivo se borra, ya que no es
después de dexpreopt, pero esta última opción es necesaria para
permitir que las firmas de APK de terceros sigan siendo válidas.
Pasa opciones a dex2oat
para controlar cómo se muestra la imagen de arranque.
se compilan. Puede usarse para especificar listas de clases de imágenes personalizadas, compiladas
listas de clases y filtros de compilador.
Pasa opciones a dex2oat
para controlar cómo todo, excepto la
de arranque se compila la imagen de arranque.
Proporciona la capacidad de pasar las opciones de dex2oat
para un usuario en particular.
configuración de módulo y producto. Se encuentra en el
device.mk
archivo de $(call add-product-dex-preopt-module-config,<modules>,<option>)
donde <modules>
es una lista de LOCAL_MODULE
y
Nombres LOCAL_PACKAGE
para los archivos JAR y APK, respectivamente.
Lista de aplicaciones que se identificaron como principales para los productos
que quieres compilar con el filtro speed
del compilador. Para
Por ejemplo, las apps persistentes, como SystemUI, tienen la oportunidad de usar
compilación guiada por perfiles solo en el próximo reinicio, por lo que podría ser mejor para el
producto para que estas apps siempre se compilen con AOT.
Lista de apps cargadas por el servidor del sistema. Estas apps
se compilan de forma predeterminada con el filtro de compilador speed
.
Establece si se debe incluir una versión de depuración de ART en el dispositivo. De forma predeterminada, este es
habilitado para compilaciones userdebug y eng. El comportamiento se puede anular con
configurar la opción en true
o false
De forma predeterminada, el dispositivo usa la versión de no depuración (libart.so
).
Para realizar el cambio, establece la propiedad del sistema persist.sys.dalvik.vm.lib.2
en
libartd.so
En Android 5.1.0 a Android 6.0.1, WITH_DEXPREOPT_PIC
puede
para habilitar el código independiente de la posición (PIC). Con esto, compilado
código de la imagen no tenga que reubicarse desde
/system
en /data/dalvik-cache
, lo que ahorra espacio en la partición de datos
Sin embargo, hay un leve impacto en el tiempo de ejecución porque inhabilita una optimización que aprovecha
de un código dependiente de la posición. Por lo general, los dispositivos para ahorrar espacio en /data
debería permitir la compilación de PIC.
En Android 7.0, la compilación de PIC estaba habilitada de forma predeterminada.
Esta opción se reemplazó por WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
que también adopta previamente
los JAR del servidor del sistema.
Esta opción especifica el filtro del compilador para el servidor del sistema.
Las siguientes son listas de los archivos JAR que carga el servidor del sistema. Los archivos JAR se compilan con el
filtro de compilador especificado por PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
Configuración de la ruta de clase de inicio
La lista de clases precargadas es una lista de clases en las que se inicializa Zygote.
inicio. De esta manera, se evita que cada app tenga que ejecutar estos inicializadores de clase
por separado, lo que les permite iniciarse más rápido y compartir páginas en la memoria. El
El archivo de lista de clases precargado se encuentra en frameworks/base/config/preloaded-classes
de forma predeterminada y contiene una lista ajustada para el uso típico del teléfono. Esto podría
ser diferente para otros dispositivos como wearables y se debe ajustar
según corresponda. Ten cuidado cuando ajustes esto: agregar demasiados desperdicios de clases
de memoria cuando se cargan las clases sin usar. Agregar muy pocas clases fuerza a cada app a
debe tener su propia copia,
lo que, como dijimos, desperdicia memoria.
Ejemplo de uso (en el device.mk
del producto):
PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
Nota: Debes colocar esta línea antes
los archivos makefile de configuración del producto que obtienen el predeterminado
build/target/product/base.mk
Configuración del entorno de ejecución
Opciones de JIT
Las siguientes opciones afectan a las versiones de Android solo en las que el compilador ART JIT está disponible.
dalvik.vm.usejit
: Indica si JIT está habilitado o no.dalvik.vm.jitinitialsize
(valor predeterminado de 64 K): la capacidad inicial de la caché de código. La caché de código generará una recolección de elementos no utilizados con regularidad y aumentará si es necesario.dalvik.vm.jitmaxsize
(64 M predeterminado): Es la capacidad máxima de la caché de código.dalvik.vm.jitthreshold
(el valor predeterminado es 10000): El umbral de "calor" contador de un método debe pasar en orden para que el método se compile con JIT. El "calentamiento" contador es una métrica interna al entorno de ejecución. Incluye la cantidad de llamadas, ramas inversas y otras factores.dalvik.vm.usejitprofiles
(hasta Android 13): Indica si no estén habilitados los perfiles JIT. se puede usar incluso sidalvik.vm.usejit
es falso. Ten en cuenta que, si es falso, el filtro del compiladorspeed-profile
sí no debe compilar mediante AOT ningún método y es equivalente averify
. Desde En Android 14, los perfiles JIT siempre están habilitados y no se pueden desactivar.dalvik.vm.jitprithreadweight
(valor predeterminado:dalvik.vm.jitthreshold
/ 20): Es el peso de las "muestras" de JIT. (consulta jitthreshold) para el subproceso de IU de la aplicación. Úsala para acelerar la compilación de métodos que afectan directamente la experiencia del usuario al interactuar con el .dalvik.vm.jittransitionweight
(valor predeterminado:dalvik.vm.jitthreshold
/ 10): La ponderación del método que hace la transición entre el código de compilación y el intérprete. Esto ayuda asegúrese de que los métodos involucrados se compilen para minimizar las transiciones (que son costosas).
Opciones de Dex2oat
Estas opciones afectan la compilación en el dispositivo (también conocida como dexopt), y algunas de ellas también afectan dexpreopt, mientras que las opciones que se analizaron en la sección anterior solo en la sección Configuración de la ROM del sistema afectará a dexpreopt.
Opciones para controlar el uso de recursos:
dalvik.vm.image-dex2oat-threads
/dalvik.vm.image-dex2oat-cpu-set
(hasta Android 11): La cantidad de subprocesos y el conjunto de núcleos de CPU (consulta las secciones a continuación) para usarlos en imágenes de arranque.dalvik.vm.boot-dex2oat-threads
/dalvik.vm.boot-dex2oat-cpu-set
:- La cantidad de subprocesos y el conjunto de núcleos de CPU (hasta Android 11) (consulta a continuación) para usar durante el tiempo de inicio con todo excepto en imágenes de arranque.
- (a partir de Android 12) La cantidad de subprocesos y el conjunto de núcleos de CPU
(consulta a continuación) para usar durante el tiempo de inicio para todo, incluidas las imágenes de inicio.
- En concreto, a partir de Android 14, esto corresponde a la
la clase de prioridad
PRIORITY_BOOT
en el servicio de ART.
- En concreto, a partir de Android 14, esto corresponde a la
la clase de prioridad
dalvik.vm.restore-dex2oat-threads
/dalvik.vm.restore-dex2oat-cpu-set
:- (desde Android 11 hasta Android 13). El la cantidad de subprocesos y el conjunto de núcleos de CPU (ver a continuación) que se usarán para restablecer desde la nube crear una copia de seguridad de su contenido.
- (a partir de Android 14) La cantidad de subprocesos y el conjunto de núcleos de CPU
(consulta a continuación) para usar en todo lo que sea más sensible a la latencia de lo normal, como
restablecer desde la copia de seguridad en la nube.
- Específicamente, corresponde a la clase de prioridad.
PRIORITY_INTERACTIVE_FAST
en el servicio de ART.
- Específicamente, corresponde a la clase de prioridad.
dalvik.vm.background-dex2oat-threads
/dalvik.vm.background-dex2oat-cpu-set
(a partir de Android 14): La cantidad de subprocesos y el conjunto de núcleos de CPU (consulta a continuación) para usar en segundo plano.- Específicamente, esto corresponde a la clase de prioridad
PRIORITY_BACKGROUND
en Servicio de ART.
- Específicamente, esto corresponde a la clase de prioridad
dalvik.vm.dex2oat-threads
/dalvik.vm.dex2oat-cpu-set
: La cantidad de subprocesos y el conjunto de núcleos de CPU que se usarán para todo lo demás.
Se debe especificar un conjunto de núcleos de CPU en una lista separada por comas de IDs de CPU. Por ejemplo, para ejecutar en dex2oat en núcleos de CPU 0-3, establece:
dalvik.vm.dex2oat-cpu-set=0,1,2,3
Cuando configures las propiedades de afinidad de la CPU, te recomendamos que hagas coincidir la propiedad correspondiente para el cantidad de subprocesos de dex2oat para coincidir con la cantidad de CPU seleccionadas y así evitar memorias y E/S innecesarias contención:
dalvik.vm.dex2oat-cpu-set=0,1,2,3 dalvik.vm.dex2oat-threads=4
Además de las propiedades del sistema anteriores, también puedes usar perfiles de tareas para controlar la el uso de recursos de dex2oat (consulta Capa de abstracción de Cgroup).
Los perfiles de tareas admitidos son los siguientes:
Dex2OatBackground
(a partir de Android 14) (heredaDex2OatBootComplete
de forma predeterminada): Controla los recursos que se usan en segundo plano.- Específicamente, esto corresponde a la clase de prioridad
PRIORITY_BACKGROUND
en Servicio de ART.
- Específicamente, esto corresponde a la clase de prioridad
Dex2OatBootComplete
:- Controla el recurso que se usa para todo (hasta Android 13). después del inicio.
- Controla los recursos que se usarán para todo (a partir de Android 14).
después del inicio y no en segundo plano.
- Específicamente, corresponde a la clase de prioridad.
PRIORITY_INTERACTIVE_FAST
yPRIORITY_INTERACTIVE
en ART Servicio.
- Específicamente, corresponde a la clase de prioridad.
Cuando se especifican las propiedades del sistema y los perfiles de tareas, ambos tienen efecto.
Opciones para controlar el tamaño del montón:
dalvik.vm.image-dex2oat-Xms
: Es el tamaño inicial del montón para las imágenes de arranque.dalvik.vm.image-dex2oat-Xmx
: Es el tamaño máximo de montón para las imágenes de arranque.dalvik.vm.dex2oat-Xms
: Es el tamaño inicial del montón para todo lo demás.dalvik.vm.dex2oat-Xmx
: Es el tamaño máximo de montón para todo lo demás.
Las opciones que controlan el tamaño inicial y máximo de montón
Los dex2oat
no deben reducirse, ya que podrían limitar lo que
se pueden compilar aplicaciones.
Opciones para controlar el filtro del compilador:
dalvik.vm.image-dex2oat-filter
(hasta Android 11): El filtro del compilador para imágenes de arranque. A partir de Android 12, el compilador el filtro para las imágenes de arranque siempre esspeed-profile
y no se puede cambiar.dalvik.vm.systemservercompilerfilter
(a partir de Android 13): El filtro del compilador para el servidor del sistema. ConsultaPRODUCT_SYSTEM_SERVER_COMPILER_FILTER
dalvik.vm.systemuicompilerfilter
(a partir de Android 13): El filtro del compilador para el paquete de IU del sistema.dalvik.vm.dex2oat-filter
(hasta Android 6): El filtro del compilador para todo lo demás.pm.dexopt.<reason>
(desde Android 7): El filtro del compilador para todo lo demás. Consulta Configuración del servicio de ART para Android 14 o más, o Configuración del administrador de paquetes Android 13 o versiones anteriores
Otras opciones para controlar la compilación de todo, excepto de imágenes de arranque:
dalvik.vm.dex2oat-very-large
(desde Android 7.1): Tamaño mínimo total de archivo dex en bytes para inhabilitar la compilación AOT.dalvik.vm.dex2oat-swap
(a partir de Android 7.1) (predeterminado: verdadero): Permite usar un intercambio para dex2oat. Esto puede ayudar a evitar fallas por falta de memoria. Ten en cuenta que incluso si esta opción es activado, dex2oat solo usará un archivo de intercambio en ciertas condiciones, como cuando se muestra de los archivos dex es grande y las condiciones están sujetas a cambios.dalvik.vm.ps-min-first-save-ms
(desde Android 12): el tiempo mínimo de espera antes de que el entorno de ejecución genere un perfil de la aplicación, la primera vez se inicia la aplicación.dalvik.vm.ps-min-save-period-ms
(desde Android 12): el tiempo mínimo de espera antes de actualizar el perfil de la aplicación.dalvik.vm.dex2oat64.enabled
(desde Android 11) (predeterminado: false): Indica si se debe usar la versión de 64 bits de dex2oat.dalvik.vm.bgdexopt.new-classes-percent
(a partir de Android 12) (valor predeterminado: 20): El porcentaje mínimo, entre 0 y 100, de clases nuevas en un perfil para activar una recompilación. Solo se aplica a la compilación guiada por perfiles (speed-profile
), generalmente durante dexopt en segundo plano. Ten en cuenta que también hay un umbral de al menos 50 clases nuevas además de el umbral de porcentaje y no se puede configurar.dalvik.vm.bgdexopt.new-methods-percent
(a partir de Android 12) (valor predeterminado: 20): El porcentaje mínimo, entre 0 y 100, de métodos nuevos en un perfil para activar una recompilación. Solo se aplica a la compilación guiada por perfiles (speed-profile
), generalmente durante dexopt en segundo plano. Ten en cuenta que también hay un umbral de al menos 100 métodos nuevos además al umbral de porcentaje y no se puede configurar.dalvik.vm.dex2oat-max-image-block-size
(a partir de Android 10) (valor predeterminado: 524288) Tamaño máximo de bloque sólido para imágenes comprimidas. Una imagen grande se divide en un conjunto de bloques, de modo que ningún bloque sea mayor que el tamaño máximo.dalvik.vm.dex2oat-resolve-startup-strings
(a partir de Android 10) (predeterminado: true) Si es verdadero, dex2oat resuelve todas las cadenas const a las que se hace referencia desde los métodos marcados como “startup” en el perfil.debug.generate-debug-info
(predeterminado: falso) Indica si se debe generar información de depuración o no para la depuración nativa, como el desenrollado de pilas. información, símbolos ELF y secciones enanas.dalvik.vm.dex2oat-minidebuginfo
(a partir de Android 9) (predeterminado: true) Genera una cantidad mínima de información de depuración comprimida en LZMA necesaria para imprimir seguimientos.
Opciones de servicio de ART
A partir de Android 14, la compilación AOT integrada en el dispositivo para apps (también conocida como dexopt) es manejadas por el servicio de ART. Para obtener información sobre la configuración del servicio de ART, consulta Configuración del servicio de ARTOpciones del administrador de paquetes
Antes de Android 14, la compilación AOT integrada en el dispositivo para apps (también conocida como dexopt) es manejada por el administrador de paquetes. Para obtener información sobre cómo configurar el administrador de paquetes para dexopt, consulta Configuración del administrador de paquetes.Configuración específica de A/B
Configuración de la ROM
A partir de Android 7.0, los dispositivos pueden usar dos particiones del sistema para habilitar Actualizaciones del sistema A/B. Para ahorrar en el tamaño de la partición del sistema, los archivos preoptados se pueden instalar en la segunda partición del sistema sin usar. Luego, se copian en la partición de datos en el primer inicio.
Ejemplo de uso (en device-common.mk
):
PRODUCT_PACKAGES += \ cppreopts.sh PRODUCT_PROPERTY_OVERRIDES += \ ro.cp_system_other_odex=1
Y en el BoardConfig.mk
del dispositivo:
BOARD_USES_SYSTEM_OTHER_ODEX := true
Ten en cuenta que el código de la ruta de clase de inicio, el código del servidor del sistema y el código
las apps siempre se compilan en la partición del sistema. De forma predeterminada, todas las demás
las apps se compilan en la segunda partición del sistema sin usar. Puede ser
se controla con el SYSTEM_OTHER_ODEX_FILTER
, que tiene un valor
valor predeterminado:
SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
Dexopt inalámbrico en segundo plano
En los dispositivos habilitados para A/B, las aplicaciones pueden compilarse en segundo plano antes del reinicio con el nueva imagen del sistema. Consulta Compilación de apps en background de manera opcional para incluir la secuencia de comandos de compilación y los objetos binarios en la imagen del sistema. El El filtro de compilación que se usa para esta compilación se controla con lo siguiente:
pm.dexopt.ab-ota=speed-profile
Te recomendamos que uses speed-profile
para aprovechar las funciones de
compilación y ahorrar en almacenamiento.
Opciones de JDWP
La creación de subprocesos de Java Debug Wire Protocol (JDWP) en compilaciones de userdebug se controla a través del
Propiedad del sistema persist.debug.dalvik.vm.jdwp.enabled
. De forma predeterminada, esta propiedad
no está configurado, y los subprocesos de JDWP se crean solo para apps depurables. Para habilitar subprocesos de JDWP
apps depurables y no depurables, configura persist.debug.dalvik.vm.jdwp.enabled
a 1
. Debes reiniciar el dispositivo para que se apliquen los cambios en la propiedad.
Para depurar una app no depurable en una compilación userdebug, habilita JDWP ejecutando el siguiente comando :
Para dispositivos que ejecutan Android 13 y versiones anteriores, el entorno de ejecución crea JDWP. subprocesos para apps depurables y no depurables en compilaciones userdebug. Esto significa que es posible para adjuntar un depurador o generar un perfil de cualquier app en compilaciones de userdebug.adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot