apk的安装过程

Table of Contents

APK(Android Package)的安装过程涉及多个步骤,系统会验证、解压、优化并最终将应用安装到设备上。

1. APK 文件的验证

在安装之前,系统会对 APK 文件进行验证,确保其完整性和安全性:

  • 签名验证:检查 APK 是否由可信的开发者签名。
  • 完整性检查:验证 APK 文件是否被篡改。
  • 权限检查:检查 APK 中声明的权限是否合理。

2. APK 文件的解压

  • APK 文件实际上是一个压缩包(ZIP 格式),包含以下内容:
    • DEX 文件:包含应用的字节码(Dalvik 或 ART 可执行文件)。
    • 资源文件:如图片、布局文件、字符串等。
    • AndroidManifest.xml:定义应用的基本信息和权限。
    • Native 库:包含.so 文件(如果有)。
  • 系统会将 APK 文件解压到设备的特定目录(如/data/app/<package_name>)。

3. DEX 文件的优化

  • Android 系统会对 DEX 文件进行优化,以提高运行效率:
    • Dalvik 虚拟机:将 DEX 文件转换为 ODEX(Optimized DEX)文件。
    • ART 虚拟机:将 DEX 文件预编译为机器码(OAT 文件),存储在/data/dalvik-cache目录中。
  • 这个过程被称为AOT(Ahead-Of-Time)编译,ART 虚拟机会在安装时完成这一步骤。

4. 安装到设备

  • 系统会将 APK 的相关信息注册到系统中:
    • 包管理器(PackageManager):记录应用的包名、版本号、权限等信息。
    • 数据目录:为应用创建专属的数据目录(如/data/data/<package_name>),用于存储应用的私有数据。
    • 安装目录:APK 文件会被复制到/data/app/<package_name>目录中。

5. 权限授予

  • 系统会检查 APK 中声明的权限:
    • 如果权限是普通权限(Normal Permissions),系统会自动授予。
    • 如果权限是危险权限(Dangerous Permissions),系统会提示用户手动授权。

6. 安装完成

  • 安装完成后,系统会:
    • 在应用列表中显示应用的图标。
    • 发送广播(ACTION_PACKAGE_ADDED),通知其他应用有新应用安装。
    • 如果是从应用商店安装的,可能会触发自动更新机制。

7. 首次运行

  • 当用户首次启动应用时:
    • 系统会加载应用的 DEX 文件和资源。
    • 启动应用的主 Activity。
    • 如果应用有动态权限请求,可能会在运行时再次提示用户授权。

技术细节

  • 安装目录
    • /data/app/<package_name>:存储 APK 文件。
    • /data/data/<package_name>:存储应用私有数据。
    • /data/dalvik-cache:存储优化后的 DEX 文件(ART 虚拟机)。
  • 安装工具
    • Android 系统使用PackageManagerServiceInstaller服务来管理安装过程。

通过以上步骤,APK 文件会被成功安装到 Android 设备上,用户可以正常使用应用。

明天了解一下 apk 的打开过程