随笔 - 383  文章 - 0  评论 - 0  阅读 - 35557 

 

 

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.xmlupdated-package字段中,新的包信息会写在package字段中,卸载新包后,原包会恢复到package字段中。启动时新的包会优先地被启动

5.     为什么安装软件时会报错

1)         版本不匹配
比如在2.2SDK上编译的软件,不能在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),如果在之前就加入这两个权限。

 

(转载请注明出处: http://xy0811.spaces.live.com)
posted on   xieyan0811  阅读(22)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示