CN105511902B - 一种安卓平台模块动态加载的方法及系统 - Google Patents
一种安卓平台模块动态加载的方法及系统 Download PDFInfo
- Publication number
- CN105511902B CN105511902B CN201510754465.0A CN201510754465A CN105511902B CN 105511902 B CN105511902 B CN 105511902B CN 201510754465 A CN201510754465 A CN 201510754465A CN 105511902 B CN105511902 B CN 105511902B
- Authority
- CN
- China
- Prior art keywords
- file
- bundle
- module
- configuration file
- steps
- 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
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/62—Uninstallation
Abstract
本发明公开了一种安卓平台模块动态加载的方法及系统,方法包括:智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;解析配置文件,并执行与配置文件相对应的动态加载任务。本发明中通过在安卓平台中嵌入OSGI框架,并在OSGI框架的服务下将应用的apk或jar文件转化为bundle文件,实现了不通过重启智能终端来对应用进行的加载、更新或卸载操作,即实现了模块动态加载,极大的方便了用户。
Description
技术领域
本发明涉及智能终端技术领域,尤其涉及的是一种安卓平台模块动态加载的方法及系统。
背景技术
目前基于Android开发的应用,当需要实现新的功能时,一般是通过在原版本基础上,进行新功能模块的开发,待新功能模块开发完毕,通过升级方式替换掉系统中原版本,进而再运行新版本。然而这种方式一般是通过重启设备,从云端下载新版本应用,替换原版本来实现,若不重启设备就无法更换原版本中功能模块。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种安卓平台模块动态加载的方法及系统,旨在解决现有技术中搭载安卓系统的智能终端从云端下载新版本应用,替换原版本来实现,若不重启设备就无法更换原版本中功能模块的缺陷。
本发明的技术方案如下:
一种安卓平台模块动态加载的方法,其中,所述方法包括以下步骤:
A、智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;
B、当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;
C、解析配置文件,并执行与配置文件相对应的动态加载任务。
所述安卓平台模块动态加载的方法,其中,所述配置文件包括动作、bundle文件包名、bundle文件载体包名及bundle文件下载url。
所述安卓平台模块动态加载的方法,其中,所述动态加载任务包括加载模块、更新模块及卸载模块。
所述安卓平台模块动态加载的方法,其中,所述步骤C具体包括:
C201、解析配置文件,判断配置文件对应加载模块的动态加载任务时,则从bundle文件的数据库中查询是否存在与该bundle文件的载体包名相同的bundle文件,当存在时则执行步骤C202,当不存在时则执行步骤C204;
C202、从bundle文件的数据库中获取与该bundle文件的载体包名相对应的bundleID;
C203、调用安装程序安装bundle文件;
C204、从云端服务器获取bundle文件url,并下载;
C205、判断从云端服务器下载的文件是否为bundle文件,当是时则执行步骤C206,当否时则执行步骤C207;
C206、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤C209,当不一致时则执行步骤C212;
C207、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤C208,当否时则执行步骤C212;
C208、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
C209、启动安装程序及start进程;
C210、获取该bundle文件的bundle ID;
C211、根据bundle ID更新bundle文件的数据库;
C212、结束进程。
所述安卓平台模块动态加载的方法,其中,所述步骤C具体包括:
C301、解析配置文件,判断配置文件对应更新模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
C302、从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;
C303、启动卸载程序的进程;
C304、根据bundle ID更新bundle文件的数据库;
C305、从云端服务器获取该bundle文件的url,并下载;
C306、判断下载的文件是否为bundle文件,当是bundle文件时则执行步骤C307,当不是bundle文件时则执行步骤C308;
C307、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤C310,当不一致时则执行步骤C313;
C308、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤C309,当否时则执行步骤C313;
C309、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
C310、启动安装程序及start进程进行bundle文件的安装;
C311、获取已安装的bundle文件的bundle ID;
C312、根据bundle ID更新bundle文件的数据库;
C313、结束进程。
所述安卓平台模块动态加载的方法,其中,所述步骤C具体包括:
C401、解析配置文件,判断配置文件对应卸载模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
C402、从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;
C403、启动卸载程序的进程;
C404、根据bundle ID更新bundle文件的数据库。
一种安卓平台模块动态加载的系统,其中,包括:
版本比对模块,用于智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;
配置文件下载模块,用于当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;
任务执行模块,用于解析配置文件,并执行与配置文件相对应的动态加载任务。
所述安卓平台模块动态加载的系统,其中,所述配置文件包括动作、bundle文件包名、bundle文件载体包名及bundle文件下载url。
所述安卓平台模块动态加载的系统,其中,所述动态加载任务包括加载模块、更新模块及卸载模块。
所述安卓平台模块动态加载的系统,其中,所述操作响应模块具体包括:
文件获取单元,用于解析配置文件,判断配置文件对应卸载模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
ID获取单元,用于从bundle文件的数据库中获取与该bundle文件相对应的bundleID;
进程启动单元,用于启动卸载程序的进程;
数据库更新单元,用于根据bundle ID更新bundle文件的数据库。
本发明所述的安卓平台模块动态加载的方法及系统,方法包括:智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;解析配置文件,并执行与配置文件相对应的动态加载任务。本发明中通过在安卓平台中嵌入OSGI框架,并在OSGI框架的服务下将应用的apk或jar文件转化为bundle文件,实现了不通过重启智能终端来对应用进行的加载、更新或卸载操作,即实现了模块动态加载,极大的方便了用户。
附图说明
图1为本发明所述安卓平台模块动态加载的方法较佳实施例的流程图。
图2为本发明所述安卓平台模块动态加载的方法中进行加载模块的动态加载任务的具体流程图。
图3为本发明所述安卓平台模块动态加载的方法中进行更新模块的动态加载任务的具体流程图。
图4为本发明所述安卓平台模块动态加载的方法中进行卸载模块的动态加载任务的具体流程图。
图5为本发明所述安卓平台模块动态加载的系统较佳实施例的结构框图。
具体实施方式
本发明提供一种安卓平台模块动态加载的方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参见图1,图1是本发明所述安卓平台模块动态加载的方法较佳实施例的流程图。如图1所示,其包括以下步骤:
步骤S100、智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较。
本发明的实施例中,先通过建立GetFramework继承来自Android中的服务(Service),然后在该服务中通过FrameWorkFactory.NewFrameWork()获取OSGI框架实例,最后通过startService在Android 系统中启动OSGI框架的服务(即启动GetFramework服务)。
为了更清楚的理解本发明的技术方案,下面对OSGI框架及Android系统做如下介绍。
OSGI服务平台由两部分组成,即由OSGI框架和OSGI标准服务组成。OSGI框架是实现并提供OSGI功能的运行环境,OSGI标准服务定义了很多用于执行常见任务的可重用API。OSGI框架和标准服务的规范由OSGI联盟管理。OSGI框架在创建基于OSGI的应用时起着核心作用,因为它是应用的执行环境。
OSGI联盟在OSGI框架规范中定义了框架的正确行为,这样就可以基于一个定义清晰的API进行编程。这个框架是依据OSGI规范中定义的三个概念层设计的:
其中,模块层关注于打包和共享代码;
其中,生命周期层关注于提供执行时模块管理和对底层OSGI框架的访问。
其中,服务层关注于模块,特别是模块内的组件间的交互和通信。
模块层定义了OSGI模块的概念,并将之称为一个bundle。bundle是一个包含元数据(关于数据的数据)的jar文件,由类文件和相关资源组成。它是构成一个特定应用程序的多个逻辑模块。
生命周期层定义了在OSGI框架中是如何动态安装和管理来的。生命周期层定义了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 是 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 平台注册其所需要的服务和提供的服务。
本框架运行在Android体系结构的系统运行库层,它运行在Dalvik虚拟机上,从而打破一个 Dalvik 虚拟机上只能加载一个应用程序的限制,实现应用程序的模块动态加载。
OSGI平台上应用程序运行在Java 虚拟机上,Android 平台上的应用程序运行在Dalvik 虚拟机上。Android 平台上每个应用程序运行在各自的 Dalvik 虚拟机上,而OSGI 上一个虚拟机上可以运行多个应用程序 。
在 OSGI 平台上多个应用程序运行在一个虚拟机上,不同的应用程序之间就可以共享类库,甚至有依赖的关系,可以使用和修改彼此之间的数据,每个 bundle 都有与之相对应的类加载器,通过该类加载器bundle 可以有选择地导入依赖关系和导出内部包。
在 Android 平台中,每个应用程序运行在各自的虚拟机上,各个应用程序之间就不存在依赖关系,如果某个应用程序意外终止,也不会影响到其他应用程序的正常运行。
可知,生成apk 文件的过程是首先由Android 项目中的清单文件 Manifest、资源文件等通过Android Asset Packaging Tool工具打包生成 R 文件和打包的资源文件,R文件和源代码以及引用的类库通过 Java 编译器编译成 class 文件和 jar 文件,再由dx工具编译成 dex 文件,也就是 Dalvik 虚拟机所能识别的字节码,打包的资源文件和dex文件通过 apk Builder 生成apk 文件。
OSGI 平台中加载的是bundle文件,而在 Android 平台中可执行文件的格式是apk文件。本发明中通过将 OSGI框架应用到 Android 平台上,主要是解决OSGI框架对apk文件的识别。从上述的apk文件生成过程可知, apk 文件是经过特殊处理的jar 文件。
将apk文件转化成jar文件,以及将jar文件转化为bundle文件的步骤如下:
步骤S11、将智能终端中应用的apk文件进行反编译得到jar文件。
从apk生成过程可知,Android的.apk文件实际上就是一个zip压缩文件,可以直接使用压缩包管理器打开,比如winrar。该文件包括一个META-INF目录、一个res目录、一个AndroidManifest.xml文件和一个classes.dex。
其中,AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息。META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在Android平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。classes.dex是java源码编译后生成的java字节码文件。res 目录存放资源文件。esources.arsc是编译后的二进制资源文件。
dex2jar是一个工具,可将.dex格式转换到Android的Java类的格式。通过如下命令,可将apk反编译获取到.jar文件:dex2jar xxx.apk。
步骤S12、将应用的jar文件中添加可读信息、bundle识别信息和代码可见性信息后转化为bundle文件。
bundle是添加了特定元数据的jar文件,要将jar文件转化成bundle,需要为jar文件增加相应的元数据,元数据包括可读信息、bundle识别信息和代码可见性信息。
1)可读信息,用于为使用者提供该bundle的相关帮助信息,可读信息包括:
Bundle-Name,作为bundle的一个缩写名;
Bundle-Description,描述bundle的功能;
Bundle-DocURL,提供有关bundle的文档;
Bundle-Category,定义了一组由逗号分隔的分类名;
Bundle-Vendor,有关bundle提供商的信息;
Bundle-ContactAddress,有关bundle提供商的信息;
Bundle-Copyright,有关bundle提供商的信息。
2)bundle识别信息,用于识别bundle的必要信息;
安装到OSGI框架中的每个bundle都必须有一个唯一标识,这个标识由bundle符号名称和bundle版本号两部分组成。
Bundle-SymbolicName是符号名称,它和java中包命名方法一致,可直接采用包名作为符号名称;
Bundle-Version是版本号,OSGI规范约定的bundle的版本号格式为主版本号.次版本号.微版本号.限定符。
Bundle-ManifestVersion是OSGI框架根据此元数据信息确定采用哪个版本的OSGI规范来处理bundle。
3)代码可见性信息,用于定义哪些代码内部可见和哪些代码外部可见的必要信息,代码可见性信息包括:
Export-Package,其为导出内部代码,是一个为了与其他bundle共享而公开的、由逗号分隔的内部bundle包;
Import-Package,其为导入外部代码,内部bundle代码需要的、来自其他bundle并由逗号分隔的一组包。
当初始化启动OSGI框架的服务,并将第三方应用程序的jar文件转化为bundle文件后,通过调用BundleContext.install(String location)方法安装bundle文件,其中参数location是该bundle文件存放路径。当安装成功后,会返回已安装的bundle ID(BundleIdentifier),
bundle ID是运行期最常用的标识符,由OSGI框架自动分配的一个长整型数字,在bundle整个生命周期内(包括bundle更新、卸载之后)都不会改变,甚至在OSGI框架重启后都能保留下来。bundle ID是在bundle安装过程中由OSGI框架根据bundle安装时间的先后次序, 由小到大进行分配的,可以通过Bundle接口的getBundleId ()方法来获取当前bundle的ID。
此时,通过调用安装成功返回的bundle的getBundleId()方法来获取当前bundle的ID,并通过调用bundle的getSymbolicName()方法和getVersion()分别获取到该bundle的符号名称和版本号,建立数据库存储每一个bunlde的符号名称、版本号、Bundle ID、Import-Package和Export-Package属性。
通过返回的Bundle,调用该Bundle.start()方法启动该功能模块。至此,第三方应用就运行在具有OSGI框架服务的Android系统中。
当上述第三方APP有新功能模块增加时,可将新功能模块转化为bundle文件(如前所述,建立bundle文件时已经设置了该bundle文件的符号名称,即Bundle-SymbolicName),根据该bundle文件的符号名称查询数据库,获取到该符号名称对应的bundle ID。 通过获取BundleContext,并调用BundleContext.getBundle(long id)方法获取该bundle, 其中,参数id是bundle ID。
还通过调用Bundle.update()方法更新该bundle,并同时更新数据库该bundle id的对应bundle的版本号。
当第三方应用程序需要删除之前的功能模块时,通过获取到的BundleContext,并调用BundleContext.getBundle(long id)方法获取该bundle, 其中,参数id是bundle ID。根据bundle ID查询数据库获取到该bundle的Export-Package包,并查询数据库该系统中所有bundle的Import-Package包, 如果Import-Package包含有Export-Package包,则停止该bundle,如果系统中所有bundle的Import-Package包 没有包含Export-Package包,则可卸载该bundle.
当第三方应用程序需要运行已有应用程序内的相关功能模块,可通过前文所述方法将现有apk文件转化为bundle文件, 并安装和启动该bundle即可。
步骤S200、当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;
步骤S300、解析配置文件,并执行与配置文件相对应的动态加载任务。
进一步的,所述配置文件包括动作、bundle文件包名、bundle文件载体包名及bundle文件下载url;所述动态加载任务包括加载模块、更新模块及卸载模块。
进一步的,在所述安卓平台模块动态加载的方法中,还包括:
步骤S400、当智能终端本地配置文件的版本号等于或高于从云端服务器中获取配置文件的版本号时,则结束进程。
进一步的,如图2所示,所述步骤S300中进行加载模块的动态加载任务的具体流程包括:
步骤S3201、解析配置文件,判断配置文件对应加载模块的动态加载任务时,则从bundle文件的数据库中查询是否存在与该bundle文件的载体包名相同的bundle文件,当存在时则执行步骤S3202,当不存在时则执行步骤S3204;
步骤S3202、从bundle文件的数据库中获取与该bundle文件的载体包名相对应的bundle ID;
步骤S3203、调用安装程序安装bundle文件;
步骤S3204、从云端服务器获取bundle文件url,并下载;
步骤S3205、判断从云端服务器下载的文件是否为bundle文件,当是时则执行步骤S3206,当否时则执行步骤S3207;
步骤S3206、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤S3209,当不一致时则执行步骤S3212;
步骤S3207、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤S3208,当否时则执行步骤S3212;
步骤S3208、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
步骤S3209、启动安装程序及start进程;
步骤S3210、获取该bundle文件的bundle ID;
步骤S3211、根据bundle ID更新bundle文件的数据库;
步骤S3212、结束进程。
进一步的,如图3所示,所述步骤S300中进行更新模块的动态加载任务的具体流程包括:
步骤S3301、解析配置文件,判断配置文件对应更新模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
步骤S3302、从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;
步骤S3303、启动卸载程序的进程;
步骤S3304、根据bundle ID更新bundle文件的数据库;
步骤S3305、从云端服务器获取该bundle文件的url,并下载;
步骤S3306、判断下载的文件是否为bundle文件,当是bundle文件时则执行步骤S3307,当不是bundle文件时则执行步骤S3308;
步骤S3307、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤S3310,当不一致时则执行步骤S3313;
步骤S3308、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤S3309,当否时则执行步骤S3313;
步骤S3309、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
步骤S3310、启动安装程序及start进程进行bundle文件的安装;
步骤S3311、获取已安装的bundle文件的bundle ID;
步骤S3312、根据bundle ID更新bundle文件的数据库;
步骤S3313、结束进程。
进一步的,如图4所示,所述步骤S300中进行卸载模块的动态加载任务的具体流程包括:
步骤S3401、解析配置文件,判断配置文件对应卸载模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
步骤S3402、从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;
步骤S3403、启动卸载程序的进程;
步骤S3404、根据bundle ID更新bundle文件的数据库。
可见,本发明中通过在安卓平台中嵌入OSGI框架,并在OSGI框架的服务下将应用的apk或jar文件转化为bundle文件,实现了不通过重启智能终端来对应用进行的加载、更新或卸载操作,即实现了模块动态加载,极大的方便了用户。
基于上述方法实施例,本发明还提供一种安卓平台模块动态加载的系统,如图5所示,其包括:
版本比对模块100,用于智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;
配置文件下载模块200,用于当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;
任务执行模块300,用于解析配置文件,并执行与配置文件相对应的动态加载任务。
进一步的,在所述安卓平台模块动态加载的系统中,所述配置文件包括动作、bundle文件包名、bundle文件载体包名及bundle文件下载url。
进一步的,在所述安卓平台模块动态加载的系统中,所述动态加载任务包括加载模块、更新模块及卸载模块。
进一步的,在所述安卓平台模块动态加载的系统中,所述任务执行模块300具体包括:
文件获取单元,用于解析配置文件,判断配置文件对应卸载模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
ID获取单元,用于从bundle文件的数据库中获取与该bundle文件相对应的bundleID;
进程启动单元,用于启动卸载程序的进程;
数据库更新单元,用于根据bundle ID更新bundle文件的数据库。
综上所述,本发明所述的安卓平台模块动态加载的方法及系统,方法包括:智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;解析配置文件,并执行与配置文件相对应的动态加载任务。本发明中通过在安卓平台中嵌入OSGI框架,并在OSGI框架的服务下将应用的apk或jar文件转化为bundle文件,实现了不通过重启智能终端来对应用进行的加载、更新或卸载操作,即实现了模块动态加载,极大的方便了用户。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (7)
1.一种安卓平台模块动态加载的方法,其特征在于,所述方法包括以下步骤:
A、智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;
B、当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;
C、解析配置文件,并执行与配置文件相对应的动态加载任务;
当配置文件为apk文件时,将智能终端中应用的apk文件进行反编译得到jar文件,再将应用的jar文件添加可读信息、bundle识别信息和代码可见性信息后转化为bundle文件;所述动态加载任务包括加载模块、更新模块及卸载模块;
所述步骤C具体包括:
C201、解析配置文件,判断配置文件对应加载模块的动态加载任务时,则从bundle文件的数据库中查询是否存在与该bundle文件的载体包名相同的bundle文件,当存在时则执行步骤C202,当不存在时则执行步骤C204;
C202、从bundle文件的数据库中获取与该bundle文件的载体包名相对应的bundle ID;
C203、调用安装程序安装bundle文件;
C204、从云端服务器获取bundle文件url,并下载;
C205、判断从云端服务器下载的文件是否为bundle文件,当是时则执行步骤C206,当否时则执行步骤C207;
C206、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤C209,当不一致时则执行步骤C212;
C207、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤C208,当否时则执行步骤C212;
C208、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
C209、启动安装程序及start进程;
C210、获取该bundle文件的bundle ID;
C211、根据bundle ID更新bundle文件的数据库;
C212、结束进程。
2.根据权利要求1所述安卓平台模块动态加载的方法,其特征在于,所述配置文件包括动作、bundle文件包名、bundle文件载体包名及bundle文件下载url。
3.根据权利要求1所述安卓平台模块动态加载的方法,其特征在于,所述步骤C具体包括:
C301、解析配置文件,判断配置文件对应更新模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
C302、从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;
C303、启动卸载程序的进程;
C304、根据bundle ID更新bundle文件的数据库;
C305、从云端服务器获取该bundle文件的url,并下载;
C306、判断下载的文件是否为bundle文件,当是bundle文件时则执行步骤C307,当不是bundle文件时则执行步骤C308;
C307、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤C310,当不一致时则执行步骤C313;
C308、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤C309,当否时则执行步骤C313;
C309、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
C310、启动安装程序及start进程进行bundle文件的安装;
C311、获取已安装的bundle文件的bundle ID;
C312、根据bundle ID更新bundle文件的数据库;
C313、结束进程。
4.根据权利要求3所述安卓平台模块动态加载的方法,其特征在于,所述步骤C具体包括:
C401、解析配置文件,判断配置文件对应卸载模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
C402、从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;
C403、启动卸载程序的进程;
C404、根据bundle ID更新bundle文件的数据库。
5.一种安卓平台模块动态加载的系统,其特征在于,包括:
版本比对模块,用于智能终端绑定OSGI框架的服务后,从云端服务器中获取配置文件的版本号,并与智能终端本地配置文件的版本号进行比较;
配置文件下载模块,用于当智能终端本地配置文件的版本号低于从云端服务器中获取配置文件的版本号,则从云端下载配置文件;
任务执行模块,用于解析配置文件,并执行与配置文件相对应的动态加载任务;
当配置文件为apk文件时,将智能终端中应用的apk文件进行反编译得到jar文件,再将应用的jar文件添加可读信息、bundle识别信息和代码可见性信息后转化为bundle文件;所述动态加载任务包括加载模块、更新模块及卸载模块;
所述任务执行模块,还用于执行以下步骤:
S1、解析配置文件,判断配置文件对应加载模块的动态加载任务时,则从bundle文件的数据库中查询是否存在与该bundle文件的载体包名相同的bundle文件,当存在时则执行步骤S2,当不存在时则执行步骤S4;
S2、从bundle文件的数据库中获取与该bundle文件的载体包名相对应的bundle ID;
S3、调用安装程序安装bundle文件;
S4、从云端服务器获取bundle文件url,并下载;
S5、判断从云端服务器下载的文件是否为bundle文件,当是时则执行步骤S6,当否时则执行步骤S7;
S6、验证下载的bundle文件的包名与配置文件中bundle文件的包名是否一致,当一致时则执行步骤S9,当不一致时则执行步骤S12;
S7、判断从云端服务器下载的文件是否为apk文件,当是时则执行步骤S8,当否时则执行步骤S12;
S8、从apk文件中获取jar文件,并添加指定元数据后转化为bundle文件;
S9、启动安装程序及start进程;
S10、获取该bundle文件的bundle ID;
S11、根据bundle ID更新bundle文件的数据库;
S12、结束进程。
6.根据权利要求5所述安卓平台模块动态加载的系统,其特征在于,所述配置文件包括动作、bundle文件包名、bundle文件载体包名及bundle文件下载url。
7.根据权利要求5所述安卓平台模块动态加载的系统,其特征在于,所述任务执行模块具体包括:
文件获取单元,用于解析配置文件,判断配置文件对应卸载模块的动态加载任务时,则从bundle文件的数据库中获取与该bundle文件的载体包名相同的bundle文件;
ID获取单元,用于从bundle文件的数据库中获取与该bundle文件相对应的bundle ID;进程启动单元,用于启动卸载程序的进程;
数据库更新单元,用于根据bundle ID更新bundle文件的数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510754465.0A CN105511902B (zh) | 2015-11-09 | 2015-11-09 | 一种安卓平台模块动态加载的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510754465.0A CN105511902B (zh) | 2015-11-09 | 2015-11-09 | 一种安卓平台模块动态加载的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105511902A CN105511902A (zh) | 2016-04-20 |
CN105511902B true CN105511902B (zh) | 2019-11-12 |
Family
ID=55719909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510754465.0A Active CN105511902B (zh) | 2015-11-09 | 2015-11-09 | 一种安卓平台模块动态加载的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105511902B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778270B (zh) * | 2016-12-12 | 2020-07-21 | Tcl科技集团股份有限公司 | 一种恶意应用程序的检测方法及系统 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502685B (zh) * | 2016-11-01 | 2020-10-27 | Tcl科技集团股份有限公司 | 一种数据库的升级方法及系统 |
CN106569880B (zh) * | 2016-11-07 | 2020-12-22 | Tcl科技集团股份有限公司 | 一种Android应用间动态共享资源的方法及系统 |
CN106716371B (zh) * | 2016-11-09 | 2020-11-10 | 达闼科技(北京)有限公司 | 打开应用的方法、电子设备及管理服务器 |
CN106502754B (zh) * | 2016-11-25 | 2021-06-01 | Tcl科技集团股份有限公司 | Activity组件加载方法及装置 |
CN106648755B (zh) * | 2016-11-29 | 2020-02-25 | 北京奇虎科技有限公司 | 一种在安卓art环境中动态加载dex的方法及装置 |
CN108512747A (zh) * | 2017-02-23 | 2018-09-07 | 中兴通讯股份有限公司 | 家庭网关的插件管理方法以及家庭网关、通信系统 |
CN107038045B (zh) * | 2017-03-30 | 2022-10-14 | 腾讯科技(深圳)有限公司 | 加载库文件的方法及装置 |
CN108804236B (zh) * | 2017-05-04 | 2022-05-03 | Tcl科技集团股份有限公司 | 一种aidl文件的共享方法及系统 |
CN108874476B (zh) * | 2017-05-10 | 2021-09-14 | Tcl科技集团股份有限公司 | 一种禁止广告展示的方法及系统 |
CN109032684B (zh) * | 2017-06-09 | 2020-11-10 | Tcl科技集团股份有限公司 | 一种基于安卓系统广播插件的实现方法及终端 |
CN109213533B (zh) * | 2017-06-29 | 2021-08-06 | Tcl科技集团股份有限公司 | 一种广告sdk动态加载方法、装置及终端 |
CN109240733A (zh) * | 2017-07-03 | 2019-01-18 | Tcl集团股份有限公司 | 一种基于安卓系统更新广告sdk的方法及终端 |
CN108334360A (zh) * | 2017-07-12 | 2018-07-27 | 深圳市小牛在线互联网信息咨询有限公司 | 应用程序动态加载的方法、装置、存储介质和计算机设备 |
CN109697076A (zh) * | 2017-10-24 | 2019-04-30 | Tcl集团股份有限公司 | 一种应用软件资源的动态更新方法、装置及设备 |
CN109743342B (zh) * | 2018-02-12 | 2020-06-19 | 比亚迪股份有限公司 | 终端的更新方法、服务器及终端 |
CN108833482B (zh) * | 2018-05-21 | 2020-12-08 | 平安科技(深圳)有限公司 | Mdl文件自动下载方法、系统、计算机设备和存储介质 |
CN108897588B (zh) * | 2018-07-09 | 2021-08-13 | 广州市千钧网络科技有限公司 | 一种用于模块间通信的路由方法和路由装置 |
CN111124432B (zh) * | 2018-10-31 | 2023-10-20 | 成都鼎桥通信技术有限公司 | 一种针对apk的信息的存储方法和装置 |
CN112667306A (zh) * | 2019-10-15 | 2021-04-16 | 华为终端有限公司 | 安装插件的方法、装置和存储介质 |
CN111400334B (zh) * | 2020-06-04 | 2020-10-09 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、存储介质及电子装置 |
CN113835718A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 安卓应用程序包的生成方法、装置、终端设备及介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101330674A (zh) * | 2007-06-21 | 2008-12-24 | 上海美通无线网络信息有限公司 | 一种动态更新手机软件菜单的方法 |
CN101459740A (zh) * | 2007-12-14 | 2009-06-17 | 华为技术有限公司 | 部署SIP Servlet应用、管理SIP Servlet应用的方法及其系统 |
CN103530156A (zh) * | 2013-10-17 | 2014-01-22 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
AU2014221213A1 (en) * | 2007-06-19 | 2014-09-25 | Acei Ab | A method of controlling an update of game code in a gaming system |
CN104104691A (zh) * | 2014-08-01 | 2014-10-15 | 山东中创软件商用中间件股份有限公司 | 一种应用服务器启动方法和系统 |
CN104866349A (zh) * | 2015-05-25 | 2015-08-26 | 小米科技有限责任公司 | 应用更新方法及装置 |
-
2015
- 2015-11-09 CN CN201510754465.0A patent/CN105511902B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2014221213A1 (en) * | 2007-06-19 | 2014-09-25 | Acei Ab | A method of controlling an update of game code in a gaming system |
CN101330674A (zh) * | 2007-06-21 | 2008-12-24 | 上海美通无线网络信息有限公司 | 一种动态更新手机软件菜单的方法 |
CN101459740A (zh) * | 2007-12-14 | 2009-06-17 | 华为技术有限公司 | 部署SIP Servlet应用、管理SIP Servlet应用的方法及其系统 |
CN103530156A (zh) * | 2013-10-17 | 2014-01-22 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
CN104104691A (zh) * | 2014-08-01 | 2014-10-15 | 山东中创软件商用中间件股份有限公司 | 一种应用服务器启动方法和系统 |
CN104866349A (zh) * | 2015-05-25 | 2015-08-26 | 小米科技有限责任公司 | 应用更新方法及装置 |
Non-Patent Citations (1)
Title |
---|
基于OSGi的Android模块动态加载技术研究;朱晓佳;《中国优秀硕士学位论文全文数据库信息科技辑》;20150115(第1期);第14-56页、图4-9 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778270B (zh) * | 2016-12-12 | 2020-07-21 | Tcl科技集团股份有限公司 | 一种恶意应用程序的检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105511902A (zh) | 2016-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105511902B (zh) | 一种安卓平台模块动态加载的方法及系统 | |
CN105657191B (zh) | 一种基于Android系统的应用增量升级方法及系统 | |
Dearle | Software deployment, past, present and future | |
US9760365B2 (en) | Systems, methods, and computer program products for a software build and load process using a compilation and deployment service | |
US9075596B2 (en) | Deployment | |
CN107391104B (zh) | 一种客户端与react native代码的更新依赖管理方法、装置及系统 | |
US20140196022A1 (en) | Cloud Based Application Packaging | |
CN101937336B (zh) | 软件资产打包和消费方法和系统 | |
Ferry et al. | Genesis: Continuous orchestration and deployment of smart iot systems | |
CN106569880B (zh) | 一种Android应用间动态共享资源的方法及系统 | |
CN105373406B (zh) | 基于Android平台的应用布局动态切换方法及系统 | |
CN105516154B (zh) | 应用于SEAndroid系统的安全策略配置方法及装置 | |
CN112486547A (zh) | 多租户场景下的应用程序更新方法、装置及电子设备 | |
Saatkamp et al. | Generic driver injection for automated IoT application deployments | |
CN109857432A (zh) | 一种游戏应用的热更新方法和装置 | |
CN110716786B (zh) | 一种页面展示方法、系统及存储介质 | |
Hall | A policy-driven class loader to support deployment in extensible frameworks | |
CN110221855B (zh) | 一种app与服务器协同更新和离线运行的方法 | |
CN114253552B (zh) | 可编程的边缘设备自适配方法和装置 | |
CN109933355A (zh) | 应用程序升级方法及装置 | |
CN109697076A (zh) | 一种应用软件资源的动态更新方法、装置及设备 | |
CN113360156B (zh) | 一种ios编译方法及相关设备 | |
Ferry et al. | Model-based continuous deployment of sis | |
CN110874226A (zh) | 一种android系统功能升级的方法 | |
CN117668080A (zh) | 一种面向区块链的中间件系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |