APK卸载流程:Android系统源码详解

1 下载量 38 浏览量 更新于2024-08-03 收藏 1.99MB PDF 举报
本篇文档深入剖析了Android系统APK卸载流程的源码细节。在Android设备上,当用户从设置中卸载一个应用程序时,一系列复杂的操作步骤被执行。首先,APK卸载过程涉及以下几个关键步骤: 1. **PMS内部结构处理**:在系统应用管理器(PMS)中,活动(Activity)、服务(Service)和提供者(Provider)等相关信息会被从内部结构中移除,确保这些组件与已卸载应用的关联性解除。 2. **代码和资源清理**:APK的代码(.dex和.class)以及库文件(.jar)和资源文件(如XML布局、图片等)会被彻底删除,释放系统资源。 3. **installd工具调用**:调用installd工具删除应用程序的存储路径,包括/data/data/packageName目录及其dalvik-cache中的缓存文件,这一步对用户数据和系统性能至关重要。 4. **Settings更新**:卸载操作完成后,系统会在Settings中同步更新应用信息,标记该应用已卸载。 5. **UninstallerActivity与UninstallAppProgress**:卸载过程中,会启动`UninstallerActivity`,并通过`UninstallAppProgress`的`initView`方法触发卸载函数。默认情况下,该函数处理的是非system应用(第三方应用)的卸载。 6. **权限检查与卸载逻辑**:`deletePackage`方法首先检查权限,然后调用`deletePackageX`进行具体操作。对于systemApp和非systemApp,执行不同流程:systemApp由`deleteSystemPackageLI`负责,非systemApp则通过`deleteInstalledPackageLI`进行卸载。在卸载前,AMS(应用管理服务)会先停止应用运行。 **重点部分**:文章着重分析了`deleteInstalledPackageLI`方法,这个函数分为两个步骤:第一步,删除应用的数据文件夹并从PMS的数据结构中清除相关记录;第二步,执行代码和资源文件的清理。这些步骤确保了系统的稳定性和资源的有效管理。 通过源码解析,我们可以更深入地理解Android系统如何确保APK卸载的完整性和安全性,这对于开发者理解和优化应用程序卸载体验,或者进行逆向工程和安全审计都具有重要意义。