Android系统内置应用更新或升级后被还原的原因

如果更新或者升级后系统内置应用,遇到重启Android系统后内置应用被还原,那是因为手动安装的APK版本号和系统内置API版本号一样。

1、Android系统应用更新机制
系统为每个应用在AndroidMainfest.xml提供了versionName、versionCode两个属性。
versionName:String类型,用来给应用的使用者来查看版本.
versionCode:Integer类型,作为系统判断应用是否能升级的依据。

2、Android系统内置应用更新判断代码
代码来自frameworks/base/services/java/com/android/server/PackageManagerService.java 中 scanPackageLI函数的package更新判断条件(约第2580-2621行附近)

// First check if this is a system package that may involve an update
if  (updatedPkg  !=  null  &&  (parseFlags &PackageParser. PARSE_IS_SYSTEM )  !=  0 )  {
     if  ( !ps. codePath. equals (scanFile ) )  {
       // The path has changed from what was last scanned...  check the
       // version of the new path against what we have stored to determine
       // what to do.
       if  (pkg. mVersionCode  < ps. versionCode )  {
           // The system package has been updated and the code path does not match
           // Ignore entry. Skip it.

从上面代码注释可以知道:更新系统内置应用时,如果新的versionCode没有大于当前安装的版本,更新将被忽略。

3、开发者误区
对Android应用更新机制不熟悉的开发者,错误地把versionName作为应用更新的依据,以致于在更新程序出现一些问题:

  1、更新程序设计时必须把versionName设置小数形式,如2.1,当设置为2.2.1时程序就不好判断是否该更新版本。

  2、可能导致系统内置应用无法升级,不断被还原。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值