1. 说明
包管理(Package manager)非常重要,它关系着软件包的安装,卸载,查看和使用,它是运行在后台的一个服务,名叫PackageManagerService,包括对软件包的解包,验证,安装等
2. 系统软件包管理信息存储在哪
/data/system/packages.xml
通过它可以看到系统安装的所有软件包,以及软件包的信息
3. 包管理相关源码在哪
frameworks/base/services/java/com/android/server/PackageManagerService.java
4. 系统自带的软件能升级吗(即安装在系统分区system中的包,如电话,短信)
可以升级,如果升级/system/app目录中的包,PackageManagerServer.java对此情况进行处理,被升级的包出现package.xml的updated-package字段中,新的包信息会写在package字段中,卸载新包后,原包会恢复到package字段中。启动时新的包会优先地被启动
5. 为什么安装软件时会报错
1) 版本不匹配
比如在2.2的SDK上编译的软件,不能在1.6上安装
AndroidManifest.xml中可以对版本所安装系统的版本进行指定
2) 签名信息不匹配
软件升级时会做签名信息对比,如果前后两个包签名不一致,则不能安装
3) 包完整性不满足
签名是对包中每个文件进行的,它的压缩格式是zip,如果手工解包后替换了某文件再打包,被替换的文件与签名验证不一致,则不能安装
4) 格式不对
有些从网上下载的包可能打了多层压缩,比如又将apk打包成了rar格式,建议解压缩看一下格式再安装
6. 包的权限
1) 软件在AndroidMenifest.xml中都会指明其需要的权限,安装包时图形界面也通常显示出它所需要的权限,供用户判断是否安装
2) 特殊情况
有些软件没有说明需要访问SD卡和打电话的权限,但安装后却出现此权限。
当使用旧的SDK所做的包向新的SDK安装时,可能出现这种情况,见framework/base/core/java/android/content/pm/PackageParser.java中的NEW_PERMISSION,此处判断编译使用的SDK版本是否在android1.6之前(DONUT),如果在之前就加入这两个权限。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具