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 系统使用
PackageManagerService
和Installer
服务来管理安装过程。
- Android 系统使用
通过以上步骤,APK 文件会被成功安装到 Android 设备上,用户可以正常使用应用。
明天了解一下 apk 的打开过程