【第22期】观点:IT 行业加班,到底有没有价值?

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

转载 2016年08月30日 15:33:04
如果更新或者升级后系统内置应用,遇到重启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更新判断条件
//如果是系统安装包  
if (updatedPkg != null && (parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0) {  
    //如果apk的路径已经更改  
    if (ps != null && !ps.codePath.equals(scanFile)) {  
        //判断当前apk版本号是否小于原始版本  
        if (pkg.mVersionCode < ps.versionCode) {  
            // 系统包已经是最新版本,且安装路径不匹配,忽略  
            mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;  
            return null;  
        } else {  
            //更新安装包到系统分区中  
            synchronized (mPackages) {  
                // 从PackageManagerService的安装包列表中删除该包  
                mPackages.remove(ps.name);  
            }  
            //创建安装参数InstallArgs  
            InstallArgs args = createInstallArgs(packageFlagsToInstallFlags(ps),  
                    ps.codePathString, ps.resourcePathString, ps.nativeLibraryPathString);  
            synchronized (mInstaller) {  
                //清空dex文件及安装包的挂载点  
                args.cleanUpResourcesLI();  
            }  
            synchronized (mPackages) {  
                mSettings.enableSystemPackageLPw(ps.name);  
            }  
        }  
    }  
}  

从上面代码注释可以知道:更新系统内置应用时,如果新的versionCode没有大于当前安装的版本,更新将被忽略。
3、开发者误区
对Android应用更新机制不熟悉的开发者,错误地把versionName作为应用更新的依据,以致于在更新程序出现一些问题:
1、更新程序设计时必须把versionName设置小数形式,如2.1,当设置为2.2.1时程序就不好判断是否该更新版本。

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

如果升级Android内置apk版本,遇到系统重启后又被还原,那是因为你手动安装的apk版本号和内置系统的apk版本号一样。

这样的情况,在开发调试系统apk的情况中容易出现。

关于Android系统内置的apk更新后,在系统重启以后又被还原的问题,解决方法如下:

将 frameworks/base/services/java/com/android/server/PackageManagerService.java 中 scanPackageLI函数的package更新判断条件

if (pkg.mVersionCode < ps.versionCode) {
修改为
if (pkg.mVersionCode <= ps.versionCode) {


举报

相关文章推荐

android -- 系统应用替换玩法

需求如下: android下的system分区下的文件全部经过系统签名认证,包含动态库,可执行文件及系统apk应用,整个一块整体,这些文件必须一次性全部升级才可使用,否则将因为签名及不可修改之特性导致...

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

如果升级Android内置apk版本,遇到系统重启后又被还原,那是因为你手动安装的apk版本号和内置系统的apk版本号一样。 这样的情况,在开发调试系统apk的情况中容易出现。 关于And...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Android系统应用静默升级/安装

第一步:配置

Android实现应用的增量更新\升级

虽然很多App的版本更新并不频繁,但是一个App基本上也有几兆到几十兆不等,在没有Wifi的条件下,更新App是非常耗流量的。说到这个吐槽一下三大网络运营商,4G网络是变快了,但是流量确没有多,流量仍...

Android应用的自动升级、更新模块的实现

我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新。得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下。首先给出界面效果: ...

Android 应用升级方案

转:http://www.jianshu.com/p/abbaddcf449f http://blog.csdn.net/u013718120/article/details/53018801 ...
  • lzpdz
  • lzpdz
  • 2017-03-16 15:16
  • 442

Android应用更新-自动检测版本及自动升级

步骤: 1.检测当前版本的信息AndroidManifest.xml–>manifest–>[Android] 2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹...

Android开发中应用版本更新功能

前言 本文将讲解app的升级与更新。一般而言用户使用App的时候升级提醒有两种方式获得: 一种是通过应用市场 获取一种是打开应用之后提醒用户更新升级 而更新操作一般是在用户点击了升级...

Android产品研发(十四)-->App升级与更新

本文将讲解app的升级与更新。一般而言用户使用App的时候升级提醒有两种方式获得: - 一种是通过App Store获取 - 一种是打开应用之后提醒用户更新升级 而更新操作一般是在用户点击了升级按钮之...

【android】数据库升级完整解决方案

作者:飞翔的猫咪 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://flyingcat2013.blog.51cto.co...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)