CN105657191B - 一种基于Android***的应用增量升级方法及*** - Google Patents
一种基于Android***的应用增量升级方法及*** Download PDFInfo
- Publication number
- CN105657191B CN105657191B CN201610185453.5A CN201610185453A CN105657191B CN 105657191 B CN105657191 B CN 105657191B CN 201610185453 A CN201610185453 A CN 201610185453A CN 105657191 B CN105657191 B CN 105657191B
- Authority
- CN
- China
- Prior art keywords
- bundle
- file
- configuration file
- version number
- cloud
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M1/00—Substation equipment, e.g. for use by subscribers
- H04M1/72—Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
- H04M1/724—User interfaces specially adapted for cordless or mobile telephones
- H04M1/72403—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
- H04M1/72406—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality by software upgrading or downloading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Android***的应用增量升级方法及***,方法包括:检测到应用启动,获取应用的云端配置文件版本号及本地配置文件版本号;***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载对应的云端配置文件;***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件并卸载;***安装下载的第一bundle文件并启动,更新数据库。本发明中当应用中的某个模块和/或多个模块有更新时,只需更新对应的bundle文件,节省了升级步骤,为应用增量升级带来了方便。
Description
技术领域
本发明涉及移动终端技术领域,尤其涉及一种基于Android***的应用增量升级方法及***。
背景技术
目前基于Android平台应用的增量升级方法即差分升级,实现方法是将应用的旧版本Apk与新版本Apk做差分,生成两个版本Apk的差分包并部署于云端。在客户端,使用已安装的Apk与这个差分包进行合成,得到新的Apk,校验新合成的Apk文件是否完整。如完整,则引导用户安装。
但这种增量升级是以两个应用版本之间的差异来生成补丁的,必须对所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,操作较为繁琐。对用户端上的版本也有限制,即用户端必须有能够与服务器用于差分比较的版本一致的Apk。对于某些与差分版本一致,但是内容有过修改的(比如破解版apk),就会造成无法进行增量升级。
因此,现有技术还有待于改进和发展。
发明内容
鉴于现有技术的不足,本发明目的在于提供一种基于Android***的应用增量升级方法及***,旨在解决现有技术中若用户端的应用升级版本与服务器上的升级版本相比,内容有修改过,无法进行增量升级的缺陷。
本发明的技术方案如下:
一种基于Android***的应用增量升级方法,其中,方法包括:
A、检测到应用启动,***从云端服务器获取应用的云端配置文件版本号,同时获取应用的本地配置文件版本号;
B、***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载与云端配置文件版本号对应的云端配置文件;
C、***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件的bundleID,卸载bundle ID对应的第二bundle文件;
D、***安装下载的第一bundle文件并启动,更新数据库,应用升级结束。
所述的基于Android***的应用增量升级方法,其中,所述步骤A之前还包括:
S1、通过Android***中的服务管理器将OSGI框架服务添加至***服务中,***服务器向应用层提供获取OSGI框架服务的代理;
S2、获取***中的应用,将应用按模块分类编写,生成bundle文件;
S3、通过OSGI框架服务代理获取bundle文件,并安装bundle文件;
S4、获取Android***中已安装的bundle文件信息,建立数据库存储。
所述的基于Android***的应用增量升级方法,其中,所述步骤B具体包括:
B1、***判断本地配置文件版本号与云端配置文件版本号是否一致;
B2、若不一致,则将本地配置文件版本号更新为云端配置文件版本号,从云端服务器下载与云端配置文件版本号对应的第一bundle文件包名、第一bundle文件下载url。
所述的基于Android***的应用增量升级方法,其中,所述步骤C具体包括:
C1、***解析下载的云端配置文件,根据第一bundle文件下载url下载第一bundle文件,直至云端配置文件中的第一bundle文件全部下载完毕;
C2、验证下载的第一bundle文件名与云端配置文件中的第一bundle文件包名是否一致;
C3、若一致,从数据库中查询与第一bundle文件包名相同的第二bundle文件,获取第二bundle文件的bundle ID;
C4、根据bundle ID卸载第二bundle文件。
所述的基于Android***的应用增量升级方法,其中,所述bundle文件信息包括bundle ID 、bundle文件包名、bundle的符号名称和版本号、输入包属性和输出包属性。
一种基于Android***的应用增量升级***,其中,***包括:
检测与获取模块,用于检测到应用启动,***从云端服务器获取应用的云端配置文件版本号,同时获取应用的本地配置文件版本号;
判断与下载模块,用于***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载与云端配置文件版本号对应的云端配置文件;
解析与卸载模块,用于***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件的bundle ID,卸载bundle ID对应的第二bundle文件;
安装升级模块,用于***安装下载的第一bundle文件并启动,更新数据库,应用升级结束。
所述的基于Android***的应用增量升级***,其中,所述***还包括:
OSGI框架服务添加模块,用于通过Android***中的服务管理器将OSGI框架服务添加至***服务中,***服务器向应用层提供获取OSGI框架服务的代理;
bundle文件生成模块,用于获取***中的应用,将应用按模块分类编写,生成bundle文件;
bundle文件安装模块,用于通过OSGI框架服务代理获取bundle文件,并安装bundle文件;
存储模块,用于获取Android***中已安装的bundle文件信息,建立数据库存储。
所述的基于Android***的应用增量升级***,其中,所述判断与下载模块具体包括:
判断单元,用于***判断本地配置文件版本号与云端配置文件版本号是否一致;
下载单元,用于若不一致,则将本地配置文件版本号更新为云端配置文件版本号,从云端服务器下载与云端配置文件版本号对应的第一bundle文件包名、第一bundle文件下载url。
所述的基于Android***的应用增量升级***,其中,所述解析与卸载模块具体包括:
解析单元,用于***解析下载的云端配置文件,根据第一bundle文件下载url下载第一bundle文件,直至云端配置文件中的第一bundle文件全部下载完毕;
验证单元,用于验证下载的第一bundle文件名与云端配置文件中的第一bundle文件包名是否一致;
bundle ID获取单元,用于若一致,从数据库中查询与第一bundle文件包名相同的第二bundle文件,获取第二bundle文件的bundle ID;
bundle文件卸载单元,用于根据bundle ID卸载第二bundle文件。
所述的基于Android***的应用增量升级***,其中,所述bundle文件信息包括bundle ID 、bundle文件包名、bundle的符号名称和版本号、输入包属性和输出包属性。
本发明提供了一种基于Android***的应用增量升级方法及***,本发明中通过将应用中的各个模块分别编写为对应的bundle文件并存储在数据库,当应用中的某个模块和/或多个模块有更新时,只需更新对应的bundle文件,节省了升级步骤,为应用增量升级带来了方便,提高了增量升级的普适性,方便了用户。
附图说明
图1为本发明的一种基于Android***的应用增量升级方法的较佳实施例的流程图。
图2为本发明的一种基于Android***的应用增量升级方法的具体应用实施例中应用启动流程图。
图3为本发明的一种基于Android***的应用增量升级***的较佳实施例的功能原理框图。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例中涉及OSGI、bundle布局文件等。因此对OSGI服务及bundle布局文件进行介绍。
OSGI(Open Service Gateway Initiative)是一种面向JAVA的动态模型***,OSGI服务平台由两部分组成:OSGI框架和OSGI标准服务。OSGI框架是实现并提供OSGI功能的运行环境,OSGI标准服务定义了很多用于执行常见任务的可重用API。OSGI框架和标准服务的规范由OSGI联盟管理。OSGI框架在创建基于OSGI的应用时起着核心作用,因为它是应用的执行环境。
OSGI联盟在OSGI框架规范中定义了框架的正确行为,这样就可以基于一个定义清晰的API进行编程。这个框架是依据OSGI规范中定义的三个概念层设计的:
模块层:关注于打包和共享代码。
生命周期层:关注于提供执行时模块管理和对底层OSGI框架的访问。
服务层:关注于模块,特别是模块内的组件间的交互和通信。
1.模块层定义了OSGI模块的概念,并将之称为一个bundle。bundle是一个包含元数据(关于数据的数据)的jar文件,由类文件和相关资源组成。它是构成一个特定应用程序的多个逻辑模块。
2.生命周期层定义了在OSGI框架中是如何动态安装和管理来的。生命周期层定义了bundle生命周期的操作(如安装、更新、启动、停止和卸载)。这些生命周期的操作使得可以用一种定义明确的方式动态地提供、管理和改进应用程序。
3.服务层支持和促成了一个灵活的应用编程模型。主要涉及面向服务的发布、查找和绑定交互模式,即服务提供者将服务发布到服务注册中心,然后服务客户端通过搜索服务注册中心,查找可供使用的服务。
而bundle是 OSGI中的模块模型。标准 Java 平台的 jar 包中包含有 class 文件以及相应的资源文件,bundle 可以简单地理解为是增加了元数据的 jar 包。一个bundle 中包含了 java 类和一些其他的数据资源,这些数据可以是 HTML 文件、帮助文档以及图标等。
便于描述,将模块定义为:一个从逻辑上封装实现类的集合,一个基于实现类子集的可选公共API,以及一个对外部代码依赖关系的集合。
从用户层可以把 bundle 理解为一个功能模块。bundle 可以从项目中导入导出,并且能够与项目中的其他 bundle 共享 jar文件。bundle 为 OSGI 框架提供服务,是OSGI 服务框架中唯一需要部署的实体。bundle 一旦开始运行,就会通过 OSGI 框架向框架中其他 bundle 提供功能和服务。
便于描述,本提案将bundle定义为:一个模块化的物理单元,以jar文件形式包含代码、资源和元数据,其中jar文件的边界也作为执行时逻辑模块化的封装边界。
OSGI 框架运行在 Java 虚拟机上,Bundle 可以理解为执行在 OSGI 框架上的应用程序,而 Service 为 Bundle 提供了导入、导出接口。Bundle 从服务器下载完成后可以自动在 OSGI 框架上安装和执行,并向 OSGI 平台注册其所需要的服务和提供的服务。
众所周知,生成APK 文件的过程是,首先Android 项目中的清单文件 Manifest、资源文件等通过Android Asset Packaging Tool工具打包生成 R 文件和打包的资源文件,R 文件和源代码以及引用的类库通过 Java 编译器编译成 class 文件和 jar 文件,再由dx工具编译成 dex 文件,也就是 Dalvik 虚拟机所能识别的字节码,打包的资源文件和dex 文件通过 APK Builder 生成APK 文件。OSGI 平台中加载的是bundle文件,而在Android 平台中可执行文件的格式是 APK文件。从上述的APK文件生成过程可知, APK 文件是经过特殊处理的jar 文件。将jar文件转换成bundle文件方法如下所述。
如前所示,bundle是添加了特定元数据的jar文件。要将jar文件转化成bundle,需要为jar文件增加相应的元数据,元数据包括可读信息、bundle识别信息和代码可见性信息。
可读信息:为使用者提供该bundle的相关帮助信息。
Bundle-Name: 作为bundle的一个缩写名;
Bundle-Description: 描述bundle的功能;
Bundle-DocURL:提供有关bundle的文档;
Bundle-Category:定义了一组由逗号分隔的分类名;
Bundle-Vendor:有关bundle提供商的信息;
Bundle-ContactAddress:有关bundle提供商的信息;
Bundle-Copyright:有关bundle提供商的信息;
bundle识别信息:识别bundle的必要信息。
安装到OSGI框架中的每个bundle都必须有一个唯一标识,这个标识由bundle符号名称和bundle版本号两部分组成。
Bundle-SymbolicName:符号名称,它和java中包命名方法一致。可直接采用包名作为符号名称。
Bundle-Version:版本号,OSGI规范约定的bundle的版本号格式为:主版本号.次版本号.微版本号.限定符;
Bundle-ManifestVersion:OSGI框架根据此元数据信息确定采用哪个版本的OSGI规范来处理bundle。
代码可见性信息:定义哪些代码内部可见和哪些代码外部可见的必要信息。
Export-Package:导出内部代码,一个为了与其他bundle共享而公开的、由逗号分隔的内部bundle包;
Import-Package:导入外部代码,内部bundle代码需要的、来自其他bundle并由逗号分隔的一组包。
本发明还提供了一种基于Android***的应用增量升级方法的较佳实施例的流程图,如图1所示,其中,方法包括:
步骤S100、检测到应用启动,***从云端服务器获取应用的云端配置文件版本号,同时获取应用的本地配置文件版本号。
具体实施时,当在基于Android***的终端启动应用时,***从云端服务器获取该应用的云端配置文件版本号,即该应用的最新版本号,同时获取该应用的本地配置版本号信息。
步骤S200、***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载与云端配置文件版本号对应的云端配置文件。
具体实施时,若获取的云端配置文件版本号高于本地配置文件版本号,则从云端服务器中下载云端配置文件版本号对应的云端配置文件。
步骤S300、***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件的bundle ID,卸载bundle ID对应的第二bundle文件。
具体实施时,***解析配置文件,获取云端配置文件对应的第一bundle文件,获取第一bundle文件包名,第一bundle文件为待更新的应用的升级安装包,获取第一bundle文件在本地配置文件中对应的第二bundle文件,并卸载。
步骤S400、***安装下载的第一bundle文件并启动,更新数据库,应用升级结束。
具体实施时,安装已下载的bundle文件,并启动,更新***数据库,应用升级结束,此时应用的版本已经是最新版本。
所述步骤S100之前还包括:
步骤S1、通过Android***中的服务管理器将OSGI框架服务添加至***服务中,***服务器向应用层提供获取OSGI框架服务的代理;
步骤S2、获取***中的应用,将应用按模块分类编写,生成bundle文件;
步骤S3、通过OSGI框架服务代理获取bundle文件,并安装bundle文件;
步骤S4、获取Android***中已安装的bundle文件信息,建立数据库存储。
具体实施时,通过Android***中的服务管理器将该OSGI框架服务添加进***服务中,并向应用层提供获取该服务的代理。将应用按模块分类编写为各个java文件,将编写的每个模块java文件编译为jar,再讲jar转化为bundle文件。应用通过OSGI框架服务代理获取到BundleContext,通过调用BundleContext.install()方法安装bundle文件,获取已安装的bundle信息,并建立数据库存储。其中bundle文件信息包括bundle ID 、bundle文件包名、bundle的符号名称和版本号、输入包属性和输出包属性。
在 OSGI服务平台中,生命周期层由 Bundle、BundleContext 和BundleActivator这三个核心接口构成。Android 平台模块动态加载框架中生命周期层核心部分仍然由这三个接口组成,但接口中的方法需要进行删减和扩充。进行删减的原因是这些方法在Android 平台的框架中使用不到,将多余的方法删除使框架更加轻量级。同时还需要添加新的方法使得接口能够获取 Android 平台模块特有的一些属性,如:图标、主 Activity、包信息等。
Bundle接口代表了一个已安装到框架中的bundle,允许对其执行状态操作。
在 OSGI 框架中每个 Bundle 实体都对应一个 Bundle 对象,Bundle 对象是对Bundle 实体的抽象。每个 Bundle 都对应一个唯一的并且在生命周期中保持不变的 ID号码,该 ID 由框架进行分配。Bundle 接口中定义了 Bundle 的基本信息的获取方法,包括:状态的获取、版本的获取、ID 的获取等,还定义了 Bundle 的管理方法,包括:更新、卸载、启动、停止等。
BundleContext接口为应用提供执行时操作OSGI框架的方法。
BundleContext 是指模块在框架中运行时的上下文,该上下文提供了模块与框架进行交互的方法。启动模块时,框架会创建一个对应的 BundleContext 对象,但该对象不能在模块之间进行传递,这是为了保障模块的安全和资源的正确分配。
为了便于描述,本提案将在Android***中嵌入OSGI框架称为OSGIFramework。将该OSGIFramework实现为Android***服务,即Servie。步骤如下:
便于描述,bundle指bundle文件,Bundle指OSGI框架接口。
实现运行OSGI框架的服务,如建立GetFramework继承自Android中的服务(Service)。
便于描述,将该服务称为GetFrameworkService,服务实现完毕,并通过Android***中的服务管理器ServiceManager将该服务添加进***服务中。这样,每次***启动时随着***服务启动起来,该GetFrameworkService服务也启动起来。
在该服务中获取OSGI框架实例,通过FrameWorkFactory.newFrameWork()获取框架实例。获取到框架实例时,并启动框架实例,如通过Framework.start()方法。
以上,就在Android***中启动GetFrameworkService服务,通过Android***binder机制,向应用层提供GetFrameworkService服务的代理,如GetFrameworkServiceProxy,通过该OSGI框架服务代理,就可以访问到GetFrameworkService服务中相关接口,如获取框架实例接口。
具体地,当应用开发完毕,可根据前文所述方法将应用各个模块文件转化为bundle文件, 即将编写的每个模块java文件编译为jar,再将jar转化为bundle文件。而应用被划分为不同模块,每一个模块对应一个bundle文件,各个bundle文件之间互相调用的协议如下:
调用bundle向被调用bundle输入预设参数,启动被调用bundle以执行该模块对应的功能。在这里,接口协议中包括输入部分和输出部分。其中,输入部分定义了调用bundle要向被调用bundle模块输入的参数,比如调用bundle包名。输出部分定义了被调用的bundle模块的执行结果的存储目录,优选为/data/data/应用程序包名/files/被调用的bundle模块的功能名称/……。
假设调用bundle调用的功能模块为下载模块,在调用下载模块时,按照接口协议向下载模块传输调用bundle包名、下载地址参数,以启动下载模块根据下载地址进行下载。下载模块在下载完毕后,通知调用bundle下载功能已经执行完毕,并将下载结果存储至“/data/data/应用程序包名/files/下载模块的功能名称/”的目录中。
当接收到被调用bundle模块返回的执行结束信息时,按照接口协议获取所述功能模块的执行结果。在这里,当接收到功能模块返回的执行结束信息,则从接口协议定义的存储目录中获取功能模块的执行结果。如上,当调用的下载模块返回执行结束信息后,则从目录“/data/data/应用程序包名/files/下载模块的功能名称/”中查找执行结果,获取下载的内容。
进一步地,步骤S200具体包括:
步骤S201、***判断本地配置文件版本号与云端配置文件版本号是否一致;
步骤S202、若不一致,则将本地配置文件版本号更新为云端配置文件版本号,从云端服务器下载与云端配置文件版本号对应的第一bundle文件包名、第一bundle文件下载url。
具体实施时,从云端服务器获取云端配置文件版本号后,将云端配置文件版本号与本地配置文件版本号进行比较,如果获取的云端配置文件版本号比本地配置文件版本号高,将本地配置文件版本号更新为云端配置文件版本号,从云端下载配置文件,配置文件格式:bundle文件包名 、bundle文件下载url。
进一步的实施例,所述步骤S300具体包括:
步骤S301、***解析下载的云端配置文件,根据第一bundle文件下载url下载第一bundle文件,直至云端配置文件中的第一bundle文件全部下载完毕;
步骤S302、验证下载的第一bundle文件名与云端配置文件中的第一bundle文件包名是否一致;
步骤S303、若一致,从数据库中查询与第一bundle文件包名相同的第二bundle文件,获取第二bundle文件的bundle ID;
步骤S304、根据bundle ID卸载第二bundle文件。
具体实施时,解析配置文件,根据bundle文件下载url下载bundle文件,直至配置文件中bundle文件全部下载完毕,如果下载文件是bundle文件, 验证下载的bundle文件名与配置文件中的bundle包名是否一致,如果一致,根据下载的bundle文件包名,从数据库中查询与该包名相同的bundle文件,从数据库获取到查找到的bundle文件的bundle ID,卸载获取的bunlde文件。
本发明提供了一种基于Android***的应用增量升级方法的具体应用实施例中应用启动流程图,如图2所示,方法包括:
步骤S10、通过OSGI框架服务代理获取框架实例;
具体地,通过GetFrameworkService服务的代理GetFrameworkServiceProxy,获取到OSGI框架实例。如getFrameworkInstance()方法。
步骤S20、通过框架实例获取BundleContext;
具体地,通过调用Framework.getBundleContext()方法获取BundleContext。
步骤S30、通过BundleContext安装bundle文件;
具体实施时,通过调用BundleContext.install(String location)方法安装bundle文件,直至所有bundle文件安装完毕。其中参数location是该bundle文件存放路径。当安装成功后,会返回已安装的Bundle的 Bundle ID(Bundle Identifier)。Bundle ID是运行期最常用的标识符。它是由OSGI框架自动分配的一个长整型数字,在Bundle整个生命周期内(包括Bundle更新、卸载之后)都不会改变, 甚至在OSGI框架重启后都能保留下来。Bundle ID是在Bundle安装过程中由OSGI框架根据Bundle安装时间的先后次序, 由小到大进行分配的。可以通过Bundle接口的getBundleId ()方法来获取当前Bundle的ID。
步骤S40、获取bundle ID、版本号、符号名称等信息;
具体地,通过调用安装成功返回的Bundle的getBundleId()方法来获取当前Bundle的ID。并通过调用Bundle的getSymbolicName()方法和getVersion()分别获取到该bundle的符号名称和版本号。
步骤S50、建立数据库存储bundle信息;
具体地,建立数据库存储每一个bundle ID 、bundle文件包名、bunlde的符号名称版本号、Import-Package和 Export-Package属性。
步骤S60、启动bundle;
具体地,通过BundleContext.start()方法启动bundle文件。至此,应用启动起来,会获取本地配置文件版本号,以及从云端获取云端配置文件版本号
步骤S70、判断本地配置文件版本号是否小于云端配置文件版本号,如果是,则执行步骤S80,如果否,则执行步骤S90;
步骤S80、执行更新模块功能;
步骤S90、应用启动完毕正常运行。
具体地,获取本地配置文件版本号,以及从云端获取云端配置文件版本号,并比较两者,如果本地配置文件版本号不低于云端获取的配置文件版本号,则应用正常进行,否则,执行更新模块功能。
本发明还提供了一种基于Android***的应用增量升级***的较佳实施例的功能原理框图,如图3所示,其中,***包括:
检测与获取模块100,用于检测到应用启动,***从云端服务器获取应用的云端配置文件版本号,同时获取应用的本地配置文件版本号;具体如上方法实施例所述。
判断与下载模块200,用于***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载与云端配置文件版本号对应的云端配置文件;具体如上方法实施例所述。
解析与卸载模块300,用于***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件的bundle ID,卸载bundle ID对应的第二bundle文件;具体如上方法实施例所述。
安装升级模块400,用于***安装下载的第一bundle文件并启动,更新数据库,应用升级结束;具体如上方法实施例所述。
所述的基于Android***的应用增量升级***,其中,所述***还包括:
OSGI框架服务添加模块,用于通过Android***中的服务管理器将OSGI框架服务添加至***服务中,***服务器向应用层提供获取OSGI框架服务的代理;具体如上方法实施例所述。
bundle文件生成模块,用于获取***中的应用,将应用按模块分类编写,生成bundle文件;具体如上方法实施例所述。
bundle文件安装模块,用于通过OSGI框架服务代理获取bundle文件,并安装bundle文件;具体如上方法实施例所述。
存储模块,用于获取Android***中已安装的bundle文件信息,建立数据库存储;具体如上方法实施例所述。
所述的基于Android***的应用增量升级***,其中,所述判断与下载模块具体包括:
判断单元,用于***判断本地配置文件版本号与云端配置文件版本号是否一致;具体如上方法实施例所述。
下载单元,用于若不一致,则将本地配置文件版本号更新为云端配置文件版本号,从云端服务器下载与云端配置文件版本号对应的第一bundle文件包名、第一bundle文件下载url;具体如上方法实施例所述。
所述的基于Android***的应用增量升级***,其中,所述解析与卸载模块具体包括:
解析单元,用于***解析下载的云端配置文件,根据第一bundle文件下载url下载第一bundle文件,直至云端配置文件中的第一bundle文件全部下载完毕;具体如上方法实施例所述。
验证单元,用于验证下载的第一bundle文件名与云端配置文件中的第一bundle文件包名是否一致;具体如上方法实施例所述。
bundle ID获取单元,用于若一致,从数据库中查询与第一bundle文件包名相同的第二bundle文件,获取第二bundle文件的bundle ID;具体如上方法实施例所述。
bundle文件卸载单元,用于根据bundle ID卸载第二bundle文件;具体如上方法实施例所述。
所述的基于Android***的应用增量升级***,其中,所述bundle文件信息包括bundle ID 、bundle文件包名、bundle的符号名称和版本号、输入包属性和输出包属性;具体如上方法实施例所述。
综上所述,本发明提供了一种基于Android***的应用增量升级方法及***,方法包括:检测到应用启动,获取应用的云端配置文件版本号及本地配置文件版本号;***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载对应的云端配置文件;***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件并卸载;***安装下载的第一bundle文件并启动,更新数据库。本发明中当应用中的某个模块和/或多个模块有更新时,只需更新对应的bundle文件,节省了升级步骤,为应用增量升级带来了方便。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (8)
1.一种基于Android***的应用增量升级方法,其特征在于,方法包括:
A、检测到应用启动,***从云端服务器获取应用的云端配置文件版本号,同时获取应用的本地配置文件版本号;
B、***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载与云端配置文件版本号对应的云端配置文件;
C、***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件的bundle ID,卸载bundle ID对应的第二bundle文件;
D、***安装下载的第一bundle文件并启动,更新数据库,应用升级结束;
所述步骤A之前还包括:
S1、通过Android***中的服务管理器将OSGI框架服务添加至***服务中,***服务器向应用层提供获取OSGI框架服务的代理;
S2、获取***中的应用,将应用按模块分类编写,生成bundle文件;
S3、通过OSGI框架服务代理获取bundle文件,并安装bundle文件;
S4、获取Android***中已安装的bundle文件信息,建立数据库存储;
将应用按模块分类编写为各个java文件,将编写的每个模块java文件编译为jar,再将jar转化为bundle文件。
2.根据权利要求1所述的基于Android***的应用增量升级方法,其特征在于,所述步骤B具体包括:
B1、***判断本地配置文件版本号与云端配置文件版本号是否一致;
B2、若不一致,则将本地配置文件版本号更新为云端配置文件版本号,从云端服务器下载与云端配置文件版本号对应的第一bundle文件包名、第一bundle文件下载url。
3.根据权利要求2所述的基于Android***的应用增量升级方法,其特征在于,所述步骤C具体包括:
C1、***解析下载的云端配置文件,根据第一bundle文件下载url下载第一bundle文件,直至云端配置文件中的第一bundle文件全部下载完毕;
C2、验证下载的第一bundle文件名与云端配置文件中的第一bundle文件包名是否一致;
C3、若一致,从数据库中查询与第一bundle文件包名相同的第二bundle文件,获取第二bundle文件的bundle ID;
C4、根据bundle ID卸载第二bundle文件。
4.根据权利要求1所述的基于Android***的应用增量升级方法,其特征在于,所述bundle文件信息包括bundle ID、bundle文件包名、bundle的符号名称和版本号、输入包属性和输出包属性。
5.一种基于Android***的应用增量升级***,其特征在于,***包括:
检测与获取模块,用于检测到应用启动,***从云端服务器获取应用的云端配置文件版本号,同时获取应用的本地配置文件版本号;
判断与下载模块,用于***判断本地配置文件版本号与云端配置文件版本号是否一致,若不一致,则从云端服务器下载与云端配置文件版本号对应的云端配置文件;
解析与卸载模块,用于***解析下载的云端配置文件,并获取云端配置文件中的第一bundle文件,从数据库中查找与第一bundle文件包名一致的本地配置文件中的第二bundle文件的bundle ID,卸载bundle ID对应的第二bundle文件;
安装升级模块,用于***安装下载的第一bundle文件并启动,更新数据库,应用升级结束;
所述***还包括:
OSGI框架服务添加模块,用于通过Android***中的服务管理器将OSGI框架服务添加至***服务中,***服务器向应用层提供获取OSGI框架服务的代理;
bundle文件生成模块,用于获取***中的应用,将应用按模块分类编写,生成bundle文件;
bundle文件安装模块,用于通过OSGI框架服务代理获取bundle文件,并安装bundle文件;
存储模块,用于获取Android***中已安装的bundle文件信息,建立数据库存储;
将应用按模块分类编写为各个java文件,将编写的每个模块java文件编译为jar,再将jar转化为bundle文件。
6.根据权利要求5所述的基于Android***的应用增量升级***,其特征在于,所述判断与下载模块具体包括:
判断单元,用于***判断本地配置文件版本号与云端配置文件版本号是否一致;
下载单元,用于若不一致,则将本地配置文件版本号更新为云端配置文件版本号,从云端服务器下载与云端配置文件版本号对应的第一bundle文件包名、第一bundle文件下载url。
7.根据权利要求6所述的基于Android***的应用增量升级***,其特征在于,所述解析与卸载模块具体包括:
解析单元,用于***解析下载的云端配置文件,根据第一bundle文件下载url下载第一bundle文件,直至云端配置文件中的第一bundle文件全部下载完毕;
验证单元,用于验证下载的第一bundle文件名与云端配置文件中的第一bundle文件包名是否一致;
bundle ID获取单元,用于若一致,从数据库中查询与第一bundle文件包名相同的第二bundle文件,获取第二bundle文件的bundle ID;
bundle文件卸载单元,用于根据bundle ID卸载第二bundle文件。
8.根据权利要求5所述的基于Android***的应用增量升级***,其特征在于,所述bundle文件信息包括bundle ID、bundle文件包名、bundle的符号名称和版本号、输入包属性和输出包属性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610185453.5A CN105657191B (zh) | 2016-03-29 | 2016-03-29 | 一种基于Android***的应用增量升级方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610185453.5A CN105657191B (zh) | 2016-03-29 | 2016-03-29 | 一种基于Android***的应用增量升级方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105657191A CN105657191A (zh) | 2016-06-08 |
CN105657191B true CN105657191B (zh) | 2020-03-31 |
Family
ID=56495718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610185453.5A Active CN105657191B (zh) | 2016-03-29 | 2016-03-29 | 一种基于Android***的应用增量升级方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105657191B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502685B (zh) * | 2016-11-01 | 2020-10-27 | Tcl科技集团股份有限公司 | 一种数据库的升级方法及*** |
CN108733391A (zh) * | 2017-04-18 | 2018-11-02 | 北京京东尚科信息技术有限公司 | 一种资源动态配置的方法和装置 |
US10749743B2 (en) | 2017-06-12 | 2020-08-18 | Microsoft Technology Licensing, Llc | Upgrade a version of a service |
CN109697076A (zh) * | 2017-10-24 | 2019-04-30 | Tcl集团股份有限公司 | 一种应用软件资源的动态更新方法、装置及设备 |
CN108021343A (zh) * | 2017-11-10 | 2018-05-11 | 维沃移动通信有限公司 | 一种应用程序的显示方法、装置及移动终端 |
CN108008971A (zh) * | 2017-12-04 | 2018-05-08 | 科大国创软件股份有限公司 | 一种基于html5的离线压缩包下载实现移动app模块升级的方法 |
CN107844318B (zh) * | 2017-12-11 | 2021-08-24 | 维沃移动通信有限公司 | 一种操作***的升级方法及移动终端和服务器 |
CN110457052A (zh) * | 2018-05-08 | 2019-11-15 | 优酷网络技术(北京)有限公司 | 应用升级方法及装置 |
CN108833482B (zh) * | 2018-05-21 | 2020-12-08 | 平安科技(深圳)有限公司 | Mdl文件自动下载方法、***、计算机设备和存储介质 |
CN108845824A (zh) * | 2018-07-10 | 2018-11-20 | 平安科技(深圳)有限公司 | 应用更新方法和装置及计算机可读存储介质 |
CN109032631B (zh) * | 2018-07-12 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 应用程序补丁包获取方法、装置、计算机设备及存储介质 |
CN109101256A (zh) * | 2018-08-01 | 2018-12-28 | 北京奇安信科技有限公司 | 一种代理Agent动态加载方法及装置 |
CN109309582A (zh) * | 2018-08-23 | 2019-02-05 | 深圳点猫科技有限公司 | 一种基于教育操作***的云端同步方法及电子设备 |
CN110874226B (zh) * | 2018-08-29 | 2023-05-02 | 山东华软金盾软件股份有限公司 | 一种android***功能升级的方法 |
CN109285298A (zh) * | 2018-09-30 | 2019-01-29 | 苏州浪潮智能软件有限公司 | 一种应用于银行自助***的远程更新方法 |
CN111026424A (zh) * | 2019-12-10 | 2020-04-17 | 中国银行股份有限公司 | 一种服务更新方法及装置 |
CN111399940A (zh) * | 2020-03-12 | 2020-07-10 | 深圳创维-Rgb电子有限公司 | 一种智能***的数据处理方法、存储介质及智能终端 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770366B (zh) * | 2009-11-27 | 2014-03-19 | 山东中创软件商用中间件股份有限公司 | 一种基于Web服务的eclipse插件存储及管理的方法 |
CN103793257B (zh) * | 2014-03-07 | 2016-08-24 | 中南大学 | 一种Android程序的流式执行方法 |
CN105323269A (zh) * | 2014-06-17 | 2016-02-10 | 中兴通讯股份有限公司 | 安卓***中app的更新方法、终端及存储介质 |
CN104951339B (zh) * | 2015-06-05 | 2018-03-20 | 烽火通信科技股份有限公司 | 一种基于Bundle依赖关系的自动搜索安装***及方法 |
-
2016
- 2016-03-29 CN CN201610185453.5A patent/CN105657191B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN105657191A (zh) | 2016-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105657191B (zh) | 一种基于Android***的应用增量升级方法及*** | |
CN105511902B (zh) | 一种安卓平台模块动态加载的方法及*** | |
CN110912724B (zh) | 一种基于参数驱动的自动业务编排方法及装置 | |
CN106569880B (zh) | 一种Android应用间动态共享资源的方法及*** | |
CN107391104B (zh) | 一种客户端与react native代码的更新依赖管理方法、装置及*** | |
CN106020873B (zh) | 补丁包加载方法及装置 | |
US20040088397A1 (en) | System and method for management of software applications | |
JP5542796B2 (ja) | モバイル・デバイス・ソフトウェアの管理方法及び装置 | |
CN105490860A (zh) | 部署应用程序运行环境的方法、装置及*** | |
CN110321131B (zh) | 业务组件打包方法、***及服务器 | |
CN111045717B (zh) | 获取项目依赖包的方法、装置、计算机设备及存储介质 | |
CN101937336A (zh) | 软件资产打包和消费方法和*** | |
CN111857801B (zh) | 一种移动应用的构建方法 | |
CN105373406B (zh) | 基于Android平台的应用布局动态切换方法及*** | |
CN110716786B (zh) | 一种页面展示方法、***及存储介质 | |
CN106502685B (zh) | 一种数据库的升级方法及*** | |
CN109857444B (zh) | 应用程序的更新方法、装置、电子设备和可读存储介质 | |
CN112506518A (zh) | 基于配置文件的编译方法和装置 | |
CN115509515A (zh) | 一种组件重用方法、装置、电子设备和存储介质 | |
CN112035122A (zh) | 一种接口部署方法、***及存储介质 | |
CN115794214B (zh) | 应用模块元数据管理方法、设备、存储介质及装置 | |
CN106778270B (zh) | 一种恶意应用程序的检测方法及*** | |
CN115857999A (zh) | 基于vue的***架构改造获得微前端***架构的方法及*** | |
CN115129348A (zh) | 应用程序的资源更新方法、装置、设备及可读存储介质 | |
CN115237631A (zh) | 一种基于数据共享插件的易扩展式数据共享***及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |