Android: Understanding the APK installation process

user1631295 picture user1631295 · Sep 16, 2012 · Viewed 26k times · Source

I am trying to understand the process of how an apk is installed on Android, specifically the Android SDK emulator via adb install (where i am testing).

In searching I have found no satisfactory answer outside of "the apk is simply copied to /data/app and is installed when you run it. This is not satisfactory to me as it does not explain how the apk's icon appears on the menu amongst other issues.

Coming from a Windows background, running an .exe or installer to install a program modifies registries, files, services, etc.... I need to understand if this or something similar occurrs when an apk is installed on Android.

So if anyone can explain to me what occurrs specifically when an apk is installed on Android I would greatly appreciate it.

On a side note I would also like to know if the Dalvik VM "zygote" is involved in the installation or does it occur at the lower linux kernel level?

My ultimate goal here is to use strace to caputer the installation process of an apk to document system modifications, file creations, network activity and other events of interest.

Answer

sappu picture sappu · Aug 18, 2015

There are mainly two categories of Android applications.

  1. System Apps: installed when system is initialized
  2. User Apps: installed from Play store, using ADB or copying .apk file in SD card.

Following are the step by step installation process.

  1. AndroidManifest.xml is parsed, information is extracted and stored into /data/system/packages.xml and /data/system/packages.list
  2. .apk file is copied to a specific directory and a directory for data storage is created for this app

XML parsing, resource analysis, and .apk file copying are done by

PackageManageService.java

however, directory creation is done by

installd.c

PackageManageService.java communicates with installd.c via a local socket, located at /dev/socket/installed

Package where .apk file got copied is different for system apps and user apps. for system apps it is

/system/app/

Where as for user app .apk file copied in to .apk file is copied to

/data/app

.dex file, which is extracted from the .apk file, is copied to /data/dalvik-cache/.

Package Manager creates data directory /data/data// to store database, shared preference, native library and cache data