安卓app动态加载资源功能模块的方法及***
技术领域
本发明涉及视频应用技术领域,尤其是涉及一种安卓应用动态加载资源功能模块的方法及***。
背景技术
当前,视频直播方式已经得到了广泛的应用。人们可以通过互联网随时随地在平板电脑、手机等多种客户端,通过安装的应用来观看视频直播。
对于视频直播行业来说,直播间改版和直播间需求增加以前播放性能优化是常有的事情,但是通过现有的技术每开发一个新功能都将会触发升级来让用户去体验这些新功能,导致新功能覆盖时间久,版本碎片化严重。
这个时候,动态加载技术就显得非常重要,在将用户体验提升到最好的情况下,也能不断的更新应用本身的功能及资源。
相关术语及解释如下:
App Android***需要安装的应用,Application的缩写
url 统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
assert Android应用包自带的资源文件包
versioncode Android应用的版本号,每次新版本该版本号会随之增加
文件hash 确定文件唯一性的一串字符,用以确定该文件的唯一性
plugin 安卓app动态加载功能模块的总称
md5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
Api API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力
发明内容
针对现有技术的以上缺陷,本发明提供了一种安卓app动态加载资源功能模块的方法及***。
本发明的技术方案包括一种安卓app动态加载资源功能模块的方法,包括模块生成过程、动态验证更新过程和加载过程,
所述模块生成过程,包括在服务器端生成单独的资源功能模块;
所述动态验证更新过程,用于在客户端检验资源功能模块的安全性和更新资源功能模块,
所述加载过程,用于在客户端下载及加载资源功能模块。
而且,所述动态验证更新过程包括以下步骤,
步骤A1,当用户打开资源功能模块,首先用包名判断是否加载,如果已加载,进入步骤A9,否则进入步骤A2;
步骤A2,扫描plugin目录下该包名的文件是否存在,存在则进入步骤A3,否则进入步骤A5;
步骤A3,判断有几个文件,大于1则取最新的版本进入步骤A4,否则直接进入步骤A4;
步骤A4,进行加载,加载成功则进入步骤A9,加载失败则进入步骤A5;
步骤A5,在assert目录下寻找是否存在该文件,存在则进入步骤A6,不存在则进入步骤A7;
步骤A6,从assert目录复制到plugin目录,然后进入步骤A4;
步骤A7,请求api,加上包名,进入步骤A8;
步骤A8,下载该插件,进入步骤A4;
步骤A9,联网判断安全性及更新;
步骤A10,判断返回数据,若插件不安全或有更新返回步骤A8,若插件安全且没有更新,打开插件;
所述加载过程包括以下步骤,
步骤B1,传入包名、versioncode和渠道号生成md5字符串,并传入url下载地址,文件hash;
步骤B2,在plugin目录中新建名称为temp的文件夹,并根据url下载地址下载该资源功能模块,下载完成则进入步骤B3,下载失败则任务终止;
步骤B3,校验hash,并移动到plugin文件夹中;如果校验成功则进入步骤B4,否则任务终止;
步骤B4,扫描plugin目录下该包名的文件是否大于预设的本地缓存模块数量n,是则进入步骤B5,否则进入步骤B6;
步骤B5,根据扫描文件夹中所有该资源功能模块的版本号,并进行排序,删除较老版本的文件,直到剩下n个资源功能模块的文件,进入步骤B6;
步骤B6,进行加载并提示用户,实现下载回调。
而且,当安卓app作为主程序来打开资源功能模块时,主程序和服务器进行交互,主程序上传模块信息,服务器根据模块信息判断并返回标识,主程序根据标识确定后续处理逻辑。
而且,服务器判断并返回标识的方式如下,
服务器根据主程序上传的模块信息与服务器本地最新的模块信息进行对比,首先,如果md5与服务的md5匹配,则直接返回标识1,如果不匹配,则开始进行其他的数据匹配如下,
如果包名不对,则返回标识-2,
如果签名或校验码不对,则返回标识-1,并将正确的模块地址一并下发给主程序;如果版本不对,则需要更新,获取服务器后台设定的参数,确定该更新是2“建议更新”、3“强制更新”或4“静默更新”,然后再下发信息到手机的主程序;
最后判断客户端版本,与服务器存储的该模块所需要的客户端版本是否一致,如果不一致则下发标识5到手机的主程序,提示用户需要更新客户端才能打开该资源功能模块。
而且,主程序根据标识确定后续处理逻辑的实现方式如下,
如果返回是-1,则调用下载过程进行下载;
如果返回是1,则是调用动态验证更新过程打开;
如果返回是2,则是给予用户提示,由用户选择打开还是下载;
如果返回3,则是让用户等待,先调用下载过程进行下载,安装后再调用动态验证更新过程打开;
如果是返回4,则直接调用动态验证更新过程打开,并且在后台调用下载过程进行下载,用户感知不到下载;
如果是返回5,则提示用户需要跟新客户端app;
如果是返回-2或者请求失败,则终止启动资源功能模块,并给用户提示。
本发明还相应提供一种安卓app动态加载资源功能模块的***,包括在服务器端设置的模块生成单元,在客户端设置的动态验证更新单元和加载单元,
所述直播间模块生成单元,用于在服务器端生成单独的资源功能模块;
所述动态验证更新单元,用于在客户端检验资源功能模块的安全性和更新资源功能模块,
所述加载单元,用于在客户端下载及加载资源功能模块。
而且,所述动态验证更新单元包括以下子单元,
子单元A1,用于当用户打开资源功能模块,首先用包名判断是否加载,如果已加载,命令子单元A9工作,否则命令子单元A2工作;
子单元A2,用于扫描plugin目录下该包名的文件是否存在,存在则命令子单元A3工作,否则命令子单元A5工作;
子单元A3,用于判断有几个文件,大于1则取最新的版本命令子单元A4工作,否则直接命令子单元A4工作;
子单元A4,用于进行加载,加载成功则命令子单元A9工作,加载失败则命令子单元A5工作;
子单元A5,用于在assert目录下寻找是否存在该文件,存在则命令子单元A6工作,不存在则命令子单元A7工作;
子单元A6,用于从assert目录复制到plugin目录,然后命令子单元A4工作;
子单元A7,用于请求api,加上包名,命令子单元A8工作;
子单元A8,用于下载该插件,命令子单元A4工作;
子单元A9,用于联网判断安全性及更新;
子单元A10,用于判断返回数据,若插件不安全或有更新返回子单元A8,若插件安全且没有更新,打开插件;
所述加载单元包括以下子单元,
子单元B1,用于传入包名、versioncode和渠道号生成md5字符串,并传入url下载地址,文件hash;
子单元B2,用于在plugin目录中新建名称为temp的文件夹,并根据url下载地址下载该资源功能模块,下载完成则命令子单元B3工作,下载失败则任务终止;
子单元B3,用于校验hash,并移动到plugin文件夹中;如果校验成功则命令子单元B4工作,否则任务终止;
子单元B4,用于扫描plugin目录下该包名的文件是否大于预设的本地缓存模块数量n,是则命令子单元B5工作,否则命令子单元B6工作;
子单元B5,用于根据扫描文件夹中所有该资源功能模块的版本号,并进行排序,删除较老版本的文件,直到剩下n个资源功能模块的文件,命令子单元B6工作;
子单元B6,用于进行加载并提示用户,实现下载回调。
而且,当安卓app作为主程序来打开资源功能模块时,主程序和服务器进行交互,主程序上传模块信息,服务器根据模块信息判断并返回标识,主程序根据标识确定后续处理逻辑。
而且,服务器判断并返回标识的方式如下,
服务器根据主程序上传的模块信息与服务器本地最新的模块信息进行对比,首先,如果md5与服务的md5匹配,则直接返回标识1,如果不匹配,则开始进行其他的数据匹配如下,
如果包名不对,则返回标识-2,
如果签名或校验码不对,则返回标识-1,并将正确的模块地址一并下发给主程序;如果版本不对,则需要更新,获取服务器后台设定的参数,确定该更新是2“建议更新”、3“强制更新”或4“静默更新”,然后再下发信息到手机的主程序;
最后判断客户端版本,与服务器存储的该模块所需要的客户端版本是否一致,如果不一致则下发标识5到手机的主程序,提示用户需要更新客户端才能打开该资源功能模块。
而且,主程序根据标识确定后续处理逻辑的实现方式如下,
如果返回是-1,则调用下载过程进行下载;
如果返回是1,则是调用动态验证更新过程打开;
如果返回是2,则是给予用户提示,由用户选择打开还是下载;
如果返回3,则是让用户等待,先调用下载过程进行下载,安装后再调用动态验证更新过程打开;
如果是返回4,则直接调用动态验证更新过程打开,并且在后台调用下载过程进行下载,用户感知不到下载;
如果是返回5,则提示用户需要跟新客户端app;
如果是返回-2或者请求失败,则终止启动资源功能模块,并给用户提示。
本发明将资源文件及新的功能打包成一个资源功能模块文件放置在服务器,当用户通过客户端请求服务器时,服务器会将这个模块文件的信息返回给客户端。用户如果需要打开这个新的功能时,客户端会调用下载来下载这个模块文件,然后在本地验证安全性并打开。本发明所提供安卓app动态加载功能模块的用途包括不限于直播间动态加载,具有重要的市场价值。
附图说明
图1为本发明实施例的与服务器交互的流程图。
图2为本发明实施例的模块安全验证及动态更新流程图。
图3为本发明实施例的流程图。
具体实施方式
下面通过实施例并结合附图,对本发明的技术方案作进一步具体的说明。
为了能更好的说明本发明的技术方案,实施例以直播间动态加载为例来说明,但本发明技术方案包括而不限于直播间动态加载,聊天、社区、扩展功能、广告、主题、游戏、工具等资源功能模块同样能够适用。
1.可以独立维护的功能模块
实施例的模块生成过程,包括在服务器端生成单独的资源功能模块。在开发中,将直播间单独做成模块,当用户需要使用直播间时,客户端会向服务器请求下载该直播间模块。下载成功后,客户端将对该模块进行安全验证。验证通过后,将会向模块中传入房间号,及用户信息来打开该直播间。其他的请求服务,弹幕服务等都是由该模块来完成的。这样直播间的整体功能及资源就可以单独维护,可以大大缩小主App的安装包的大小。
这样的好处除了可以单独维护和缩小主App的安装包大小外,还有一点就是独立模块的运行对主App是没有任何影响的。如果模块因为某些原因出问题了,不会让主App崩溃。并且这个时候会启动模块的自动修复功能,让模块继续正确运行。
2.安卓app动态加载资源功能模块安全验证及动态更新
在App的不断发展中,总会迎来App中功能的更新,这样的更新在给用户带来新功能体验的同时也会带来不太好的体验(用户需要不断的升级)。如果有一种技术能让用户的App功能自动升级,这就解决了该用户体验不太好的问题。为了解决这个问题,动态更新应运而生。
在用户打开模块的时候,程序将模块的包名及其他信息传入进行判断。首先通过该包名判断程序中是否已经加载了该模块。如果加载了该模块,则联网判断该模块的安全性及更新状况。如果没有加载该模块,则去模块目录中扫描是否有文件的包名与之符合,如果有符合的话,取版本最高的。如果没有符合的,则去assert目录中寻找是否有符合的,有就加载,如果还是没有,则带上该包名去请求api,返回该模块最新的下载信息,去下载,下载完毕后则重复进行加载的过程。
实施例的动态验证更新过程,用于在客户端检验资源功能模块的安全性和更新资源功能模块,具体流程参见图2所示:
步骤1,当用户打开模块,首先用包名判断是否加载,如果已加载,进入步骤9,否则进入步骤2;
步骤2,扫描plugin目录下该包名的文件是否存在,存在则进入步骤3,否则进入步骤5;
步骤3,判断有几个文件,大于1则取最新的版本进入步骤4,否则直接进入步骤4;
步骤4,进行加载,加载成功则进入步骤9,加载失败则进入步骤5;
步骤5,在assert目录下寻找是否存在该文件,存在则进入步骤6,不存在则进入步骤7;
步骤6,从assert目录复制到plugin目录,然后进入步骤4;
步骤7,请求api,加上该包名,进入步骤8;
步骤8,下载该插件,进入步骤4;
步骤9,联网判断安全性及更新;
步骤10,判断返回数据,若插件不安全或有更新返回步骤8,若插件安全且没有更新,打开插件。
3.加载模块
直播间模块在第一次使用或更新的时候是需要下载的,为了统一用户下载该模块的版本及正确性,需要约定下载逻辑。
在需要下载之前,开发者需要传入url下载地址,文件hash,md5(由包名,versioncode,渠道号生成)这三个参数,并在plugin目录中新建名称为temp的文件夹(如果存在则可省略不新建)。接着开始执行下载,将下载的文件名命名为md5,下载完毕后,检测该文件的hash是否与传入的hash一致,如果一致的话则将文件移动到模块目录中,并检测目录中是否有大于n个该包名的文件,如果有,则删除最老的版本。执行完操作后通过下载回调返回。
实施例的加载过程,用于在客户端下载及加载资源功能模块,具体逻辑如图3所示:
步骤1,传入包名、versioncode和渠道号生成md5字符串,并传入url下载地址,文件hash;
步骤2,在plugin目录中新建名称为temp的文件夹,并根据url下载地址,下载该模块,下载完成则进入步骤3,下载失败则任务终止;
步骤3,校验hash,并移动到plugin文件夹中;如果校验成功则进入步骤4,否则任务终止;
步骤4,扫描plugin目录下该包名的文件是否大于n(n为本地缓存的该模块数量,具体实施时可以根据不同的需求来进行调整,由本领域技术人员预先设定),是则进入步骤5,否则小于等于n,进入步骤6;
步骤5,根据扫描文件夹中所有该模块的版本号,并进行排序,删除较老版本的模块文件,直到剩下n个模块的文件,为了防止用户升级后的版本出现致命错误,可以回退做备份,进入步骤6;
步骤6,本次下载完成,开始进行加载并提示用户,实现下载回调。
任务终止是,可以用户提示下载失败,请稍后再试。
4.打开模块前的交互
在手机上的安卓app作为主程序来打开直播间模块,这个主程序和服务器进行交互。为了解决恶意用户篡改和模块升级这个模块,本发明进一步提出,在打开模块之前加上图1的判断,这部分是需要跟服务器交互的,将模块的各种信息上传到服务器进行验证,验证通过后返回信息给手机进行相应的操作,如果是返回-2,或者请求失败则终止启动模块,并给用户提示。
参见图2,网络验证开始,手机主程序上传模块网络信息,包括包名、签名、校验码、版本、渠道、文件hash、客户端版本,然后服务器判断并返回标识,手机客户端主程序根据标识确定后续处理逻辑:
如果返回是-1,则调用图3所示流程下载。
如果返回是1,则是调用图2所示流程打开。
如果返回是2,则是给予用户提示,由用户选择打开还是下载。
如果返回3,则是让用户等待,先调用图3所示流程下载,安装后再调用图2所示流程打开。
如果是返回4,则直接调用图2所示流程打开,并且在后台调用图3所示流程下载,用户感知不到下载。
如果是返回5,则提示用户需要跟新客户端app。
如果是返回-2或者请求失败,则终止启动模块,并给用户提示。
服务器判断并返回标识的具体方式可以为:
服务器根据手机传过来的模块信息与服务器本地最新的模块信息进行对比,首先,如果md5与服务的md5匹配,则直接返回标识1,如果不匹配,则开始进行其他的数据匹配:
如果包名不对,则返回标识-2,
如果签名或校验码不对,则返回标识-1,并将正确的模块地址一并下发给手机的主程序;
如果版本不对,则需要更新,获取服务器后台设定的参数,来确定该更新是2“建议更新”、3“强制更新”或4“静默更新”,然后再下发信息到手机的主程序;
最后会判断客户端版本,与服务器存储的该模块所需要的客户端版本是否一致,如果不一致则下发标识5到手机的主程序,提示用户需要更新客户端才能打开该模块。
具体实施时,本发明所提供方法可基于软件技术实现自动运行流程,也可采用模块化方式实现相应***。
本发明还相应提供一种安卓app动态加载资源功能模块的***,包括在服务器端设置的模块生成单元,在客户端设置的动态验证更新单元和加载单元,
所述直播间模块生成单元,用于在服务器端生成单独的资源功能模块;
所述动态验证更新单元,用于在客户端检验资源功能模块的安全性和更新资源功能模块,该单元包括以下子单元,
子单元A1,用于当用户打开资源功能模块,首先用包名判断是否加载,如果已加载,命令子单元A9工作,否则命令子单元A2工作;
子单元A2,用于扫描plugin目录下该包名的文件是否存在,存在则命令子单元A3工作,否则命令子单元A5工作;
子单元A3,用于判断有几个文件,大于1则取最新的版本命令子单元A4工作,否则直接命令子单元A4工作;
子单元A4,用于进行加载,加载成功则命令子单元A9工作,加载失败则命令子单元A5工作;
子单元A5,用于在assert目录下寻找是否存在该文件,存在则命令子单元A6工作,不存在则命令子单元A7工作;
子单元A6,用于从assert目录复制到plugin目录,然后命令子单元A4工作;
子单元A7,用于请求api,加上包名,命令子单元A8工作;
子单元A8,用于下载该插件,命令子单元A4工作;
子单元A9,用于联网判断安全性及更新;
子单元A10,用于判断返回数据,若插件不安全或有更新返回子单元A8,若插件安全且没有更新,打开插件;
所述加载单元,用于在客户端下载及加载资源功能模块,该单元包括以下子单元,
子单元B1,用于传入包名、versioncode和渠道号生成md5字符串,并传入url下载地址,文件hash;
子单元B2,用于在plugin目录中新建名称为temp的文件夹,并根据url下载地址下载该资源功能模块,下载完成则命令子单元B3工作,下载失败则任务终止;
子单元B3,用于校验hash,并移动到plugin文件夹中;如果校验成功则命令子单元B4工作,否则任务终止;
子单元B4,用于扫描plugin目录下该包名的文件是否大于预设的本地缓存模块数量n,是则命令子单元B5工作,否则命令子单元B6工作;
子单元B5,用于根据扫描文件夹中所有该资源功能模块的版本号,并进行排序,删除较老版本的文件,直到剩下n个资源功能模块的文件,命令子单元B6工作;
子单元B6,用于进行加载并提示用户,实现下载回调。
各模块具体实现可参见相应步骤,本发明不予赘述。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。