0 votos

Código fuente de Android para extraer entradas de un APK durante el proceso de instalación

Estoy tratando de entender los detalles exactos de cómo Android extrae las entradas de un APK durante el proceso de instalación. Primero un poco de información de fondo:

  • La instalación puede ocurrir ya sea a través de Play Store o directamente usando, por ejemplo, adb mediante un comando como adb install ejemplo.apk. Debe tenerse en cuenta que dependiendo de cómo se instale, el proceso podría ser ligeramente diferente - Estoy interesado en ambos casos
  • El .apk es básicamente un archivo zip y debería ocurrir una extracción. Siguiendo la especificación del formato zip, la extracción debería tener en cuenta el método de compresión que está siendo utilizado por cada entrada. Encontré este método el cual no estoy seguro si está relacionado con el proceso de instalación, pero puedo ver que tiene en cuenta los dos métodos de compresión disponibles (STORE, DEFLATE).

He intentado en Android 11 (emulador x86), instalar un APK (a través de adb) que no tiene un método de compresión de STORE o DEFLATE para el AndroidManifest.xml y se instala exitosamente.

¿Cuál es el código responsable de manejar métodos de compresión fuera de los esperados?

1voto

Jack Wade Puntos 231

El proceso de instalación de aplicaciones de Android no es muy directo, como abrir un archivo APK, extraer los archivos y colocarlos en los directorios relevantes. De hecho, hay un sinfín de componentes involucrados en el proceso de instalación de la aplicación bajo la superficie; servicios de framework en la capa de Java, en la capa nativa, llamadas IPC, y así sucesivamente.

También hay muchos factores variables que deciden cómo se instalará la aplicación. El archivo APK se abre múltiples veces durante todo este proceso, posiblemente de diferentes maneras, en diferentes etapas.

Dicho esto, ahora para responder a tu pregunta, aquí cito dos instancias del código fuente: cuando se copia el archivo APK a /data/app//base.apk, y cuando se extraen las bibliotecas nativas (si corresponde). El código Java en ambos lugares (del PackageManagerService) llama al código nativo (de libziparchive). Y aquí se están verificando ambos métodos de compresión que has mencionado durante el proceso de extracción de ZIP / APK. Se utiliza un enfoque similar al extraer otros archivos como clases (código DEX), activos y recursos XML.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X