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 2010-08-20 13:59  xieyan0811  阅读(20)  评论(0编辑  收藏  举报