"¿Cómo están" las aplicaciones de Android (Facebook, etc.) instaladas en un teléfono Android?

Sé cómo instalar una aplicación en un dispositivo Android , por ejemplo, desde Play-Store o mediante un archivo .apk . Pero me gustaría entender el proceso real de instalación.

Por ejemplo, en Windows:

  • Los códigos de serie, etc. se colocan en el registro
  • Los archivos importantes para el funcionamiento del software se colocan dentro de la carpeta Archivos de programa ( el .exe principal, etc. )

Hasta ahora, lo que sí sé acerca del proceso de instalación de la aplicación para Android es:

  • Una vez que se ha ejecutado una aplicación para Android (después de la instalación), los datos recién descargados se colocan en ubicaciones como: Android / data o Android / obb, etc.

  • Si se expresa específicamente por un desarrollador de Android, los archivos también se pueden colocar en otro lugar, por ejemplo, en el almacenamiento secundario (tarjetas de memoria, almacenamiento en la nube, etc)

Pero aparte de eso, mi conocimiento sobre el proceso de instalación de Android es bastante delgado, por ejemplo:

  • No sé dónde se colocan los archivos importantes relacionados con la ejecución de un programa Android (en el caso de Windows, el .exe , los medios relacionados, las bibliotecas, etc.)

  • Por ejemplo, ¿estos archivos están estructurados en carpetas como: java , res , menú , diseño , etc., como durante el desarrollo en entornos como Android Studio?

  • Tampoco sé cómo se almacenan los tipos de archivo de aplicación en el dispositivo del usuario después de la instalación (después de haber sido desempaquetados del archivo de instalación de android o apk ), por ejemplo, se almacenan como archivos .java y .xml , como durante el desarrollo, etc.

Espero que alguien pueda llenar los espacios en blanco, gracias.

Comienzo

PackageInstaller llama a la actividad InstallAppProgress para recibir una instrucción del usuario. InstallAppProgress solicitará al servicio PackageManager que instale el paquete a través de installd. El código fuente está disponible en <Android Source>/packages/apps/PackageInstaller .

Cuando instalamos el archivo APK , el Administrador de Paquetes analiza el archivo del paquete ( APK ) y la confirmación de la pantalla, Cuando el usuario presiona el botón OK, el método de llamada del Administrador de Paquetes llamado installPackage con estos cuatro parámetros es uri , installFlags , observador, installPackageName . Administrador de paquetes iniciar un servicio llamado "paquete", ahora todas las cosas difusas suceden en este servicio. Puede comprobar PackageInstallerActivity.java e InstallAppProgress.java en el código fuente de PackageInstaller. Administrador de paquetes El servicio que se ejecuta en el proceso system_service e instala daemon (installd) que se ejecuta como un proceso nativo ambos comienzan en el arranque del sistema.

¿Dónde almacena archivos APK en Android ?

  1. Pre-Install (es decir, Cámara, Calendario, Navegador, etc.) APK almacenado en / system / app /
  2. Instalación del usuario (ApiDemo, Any.do, etc.) APK almacenado en /data/app/
  3. Administrador de paquetes crea directorio de datos /data/data/<package name>/ para almacenar datos de base de datos, preferencias compartidas, biblioteca nativa y caché

Usted puede ver apk archivo y archivo *.odex para el mismo archivo APK , ODEX es totalmente diferente la discusión y el propósito.

¿Qué es el proceso de instalación de APK en detalle?

El proceso siguiente se ejecuta en el Package Manager Service .

  • Esperando
  • Agregar un paquete a la cola para el proceso de instalación
  • Determinar la ubicación apropiada de la instalación del paquete
  • Determinar instalación Instalar / Actualizar nuevo
  • Una copia del archivo apk en un directorio determinado
  • Determinar el UID de la aplicación
  • Solicitud al proceso del demonio installd
  • Crear el directorio de aplicaciones y establecer permisos
  • Extracción del código dex en el directorio de caché
  • Para reflejar y packages.list /system/data/packages.xml el estado más reciente
  • Broadcast al sistema junto con el nombre del efecto de la instalación es el paquete completo Intent.ACTION_PACKAGE_ADDED : Si el nuevo ( Intent.ACTION_PACKAGE_REPLACED ): el caso de una actualización.

Introduzca aquí la descripción de la imagen

¿Cómo almacenan los gestores de paquetes los datos?

El Administrador de paquetes almacena la información de la aplicación en tres archivos, ubicados en /data/system . La siguiente muestra se extrae de la imagen del emulador de Android 4 ICS .

Packages.xml: Este archivo contiene una lista de permisos y paquetes / aplicaciones. Este archivo xml almacena dos cosas 1. permisos 2. paquete (aplicación), el permiso se almacena bajo etiqueta <permissions> . Cada permiso tiene tres atributos: nombre, paquete y protección. El atributo name tiene el nombre del permiso que estamos usando en AndroidManifest.xml , el atributo del paquete indica que el permiso pertenece al paquete, En la mayoría de los casos "android" es valores porque la etiqueta <permission> contiene permisos y protección por defecto indica el nivel de seguridad.

packages.list : Es un archivo de texto simple que contiene el nombre del paquete, el identificador del usuario, la bandera y el directorio de datos, no puedo encontrar ninguna descripción perfecta, pero supongo que el archivo packages.list puede proporcionar una búsqueda más rápida del paquete instalado porque el archivo sigue siendo importante sólo información.

 com.android.launcher 10013 0 /data/data/com.android.launcher com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox com.android.contacts 10001 0 /data/data/com.android.contacts com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin 

packages-stoped.xml : Este archivo contiene la lista de paquetes que ha detenido el estado, Stope declaró que las aplicaciones no pueden recibir ninguna emisión.

¿Dónde puedo encontrar el código fuente de Package Manager y Package Installer?

Gerente de empaquetación

 frameworks/base/services/java/com/android/server/pm/Settings.java frameworks/base/services/java/com/android/server/pm/PackageManagerService.java frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl frameworks/base/services/java/com/android/server/pm/PackageSignatures.java frameworks/base/services/java/com/android/server/pm/PreferredActivity.java frameworks/services/java/com/android/server/PreferredComponent.java frameworks/core/java/android/content/IntentFilter.java frameworks/base/core/java/android/content/pm/PackageParser.java frameworks/base/services/java/com/android/server/pm/Installer.java frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java 

Paquete de instalación

 packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java. 

Enlaces para referir : enlace 1 y enlace 2 .

  • Cómo limitar el tamaño del archivo en Java
  • Barra de progreso personalizada en Android?
  • La actividad no está asignada a Android.app.Activity Manifest XML
  • ¿Cómo terminar un observable?
  • Cajón de navegación - ¿qué hace syncState () y por qué debe llamarse dentro onPostCreate ()?
  • Android: Cómo evitar que al hacer clic en una notificación llama onCreate ()
  • StringByEvaluatingJavascriptFromString (método iOS, ¿qué es Android equivalente?)
  • File.delete () no elimina completamente el archivo de imagen en blanco que quedó atrás
  • Se muere la conexión de servicio XMPP
  • El botón de Android muestra diferentes mensajes de Toast dependen del número de clics
  • ExecutorService parece estar ejecutando el hilo en la interfaz de usuario?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.