"¿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:
- Pruebas con Dagger 2 usando configuraciones de componentes independientes en Android
- Decodificar códigos de control remoto a través de la entrada de audio
- Manejo de errores de actualización
- Aplicación Android que tiene iconos de acceso directo a aplicaciones específicas dentro de ella
- La alineación vertical del texto del botón está desactivada en Android
- 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.
- Cómo ordenar la fecha en orden descendente De Arraylist Fecha en android?
- Obtener la dirección IP del dispositivo Android cuando está conectado a una red móvil 3G
- ¿Por qué hay flujos en la API HttpURLConnection?
- SwitchPreference y CheckBoxPreference en el código
- ¿Por qué los nombres de las variables a menudo comienzan con la letra "m"?
- Aplicación de Android para enviar correo electrónico con datos adjuntos mediante la API de Java Mail
- ¿Qué hay de malo en esta cadena de formato?
- Gradlew appengineEndpointsInstallClientLibs tiene error La ejecución falló para la tarea ': compileJava'. > Versión de origen no válida: 1.7
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
?
- Pre-Install (es decir, Cámara, Calendario, Navegador, etc.)
APK
almacenado en / system / app / - Instalación del usuario (ApiDemo, Any.do, etc.) APK almacenado en
/data/app/
- 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.
¿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 .