掌桥专利:专业的专利平台
掌桥专利
首页

动态APK的加载方法、装置、系统以及介质

文献发布时间:2023-06-19 11:44:10


动态APK的加载方法、装置、系统以及介质

技术领域

本发明涉及一种动态APK的加载方法、装置、系统以及介质。

背景技术

在App版本快速迭代的场景下,通常使用APK动态加载方案来进行版本的快速变更。在该应用场景下,有核心工程、主工程和动态APK工程,其中,核心工程提供基础调度服务,主工程是可以直接安装在安卓android设备的APK,而动态APK工程是无法直接安装在android设备上但可以通过主工程动态加载而间接加载在android设备上的APK。

主工程需要核心工程提供的基础调度服务,动态APK工程也需要核心工程提供的基础调度服务,即,主工程和动态APK工程都会依赖于核心工程,但是依赖的方式不同,主程序直接以aar包(aar(Android Archive)包是一个安卓Android库项目的二进制归档文件,其本身是一个修改了文件后缀的zip文件,包含了例如AndroidManifest.xml(配置文件)、classes.jar(全部.java类生成)、res(存储资源信息)、jni(存储so库)等一系列文件,aar提供一些程序的基础调度)的形式依赖,而动态APK工程是以jar包(由工程内.java文件组成的集合)的形式依赖,相当于动态APK使用的是编译过程中的中间产物,而核心工程是非可运行工程,依赖到可运行工程(即主工程)会改变一次资源识别号(ID),这样会造成主工程和动态APK工程引用的核心工程里使用到的资源ID无法对齐,从而造成程序运行的异常。如果通过改造系统来实现,则成本太高,需要适配不同版本。

此外,在现有技术中通常不支持主工程和动态APK资源的引用。例如,在中大型APP项目中,通常具有一些通用资源,如果不支持主工程和动态APK资源的引用,会造成相同资源在一个整体App中存在多份,从而导致最终打包的App包体积增大。同时,APP启动时会有拷贝动态APK的流程,同时动态APK体积的增大,对App启动时长造成一定影响,从而一定程度下造成用户的流失。

发明内容

针对以上问题,本发明提供动态APK的加载方法、装置、系统以及介质,能够解决主工程和动态APK工程的资源无法对齐的问题,从而能够有效地加载动态APK,实现App版本的快速变更。

根据本发明的一方面,提供一种动态APK的加载方法,包括:

获取APK主工程和动态APK工程;

通过对引用了核心工程的可运行工程进行打包编译,生成引用了所述核心工程的aar文件和jar文件;

将所述aar文件提供给所述APK主工程,并且将所述jar文件提供给所述动态APK工程,其中,基于生成的所述jar文件,经所述aar文件引入到所述APK主工程的所述核心工程的资源ID与经所述jar文件引入到所述动态APK工程的所述核心工程的资源ID一致;

将所述动态APK工程加载到所述APK主工程上。

优选地,通过打包编译所述可运行工程,在所述核心工程和所述可运行工程中均生成R.java文件,并且

在生成所述jar文件时,将所述可运行工程的R.java文件替换成所述核心工程的R.java文件。

优选地,所述核心工程的R.java文件中的资源ID以变量表示,并且所述可运行工程的R.java文件中的资源ID以常量表示。

优选地,所述核心工程以aar的形式被引用到所述可运行工程中。

优选地,所述核心工程为多个工程,并且所述可运行工程引用多个所述核心工程。

优选地,在生成引用所述核心工程的所述aar文件和所述jar文件之前,还包括:创建所述可运行工程,并且将所述核心工程引用到创建的所述可运行工程中。

优选地,所述核心工程包括基础调度服务。

根据本发明的另一方面,提供一种动态APK的加载装置,包括:

获取单元,其获取APK主工程和动态APK工程;

生成单元,其通过对引用了核心工程的可运行工程进行打包编译,生成引用了所述核心工程的aar文件和jar文件;

提供单元,其将所述aar文件提供给所述APK主工程,并且将所述jar文件提供给所述动态APK工程,其中,基于生成的所述jar文件,经所述aar文件引入到所述APK主工程的所述核心工程的资源ID与经所述jar文件引入到所述动态APK工程的所述核心工程的资源ID一致;以及

加载单元,其将所述动态APK工程加载到所述APK主工程上。

根据本发明的另一方面,提供一种动态APK的加载系统,包括:

一个或多个处理器;以及

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如以上方面所述的动态APK的加载方法。

根据本发明的另一方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现如以上方面所述的动态APK的加载方法。

发明的有益效果

根据本发明实施例的动态APK的加载方法、装置、系统以及介质,能够解决主工程和动态加载APK工程中引用中间产物资源的问题,使得动态APK和主工程引用的核心工资资源ID对齐,从而能够有效地加载动态APK,实现App版本的快速变更,并提升了App的稳定性和易用性,同时使得代码无法侵入,并且使得动态APK技术能够广泛使用。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,但其说明仅用于解释本发明,并不构成对本发明的不当限定。

图1示出根据本发明的一优选实施例的动态APK的加载方法。

图2示出了本发明的具体实例中的修改核心工程的编译流程。

图3示根据本发明的一优选实施例的动态APK的加载方法的具体实例。

图4示出根据本发明的一优选实施例的动态APK的加载装置。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件并没有详细叙述。

结合图1-3说明本发明的动态APK的加载方法。图1示出根据本发明的一优选实施例的动态APK的加载方法。图2示出了本发明的具体实例中的修改核心工程的编译流程。图3示根据本发明的一优选实施例的动态APK的加载方法的具体实例。

本发明提供了一种动态APK的加载方法。如图1所示,本发明的一优选实施例的动态APK的加载方法,包括:步骤S101,获取APK主工程和动态APK工程;步骤S102,通过对引用了核心工程的可运行工程进行打包编译,生成引用了核心工程的aar文件和jar文件;步骤S103,将aar文件提供给APK主工程,并且将jar文件提供给动态APK工程,其中,基于生成的jar文件,经aar文件引入到APK主工程的核心工程的资源ID与经jar文件引入到动态APK工程的核心工程的资源ID一致;步骤S104,将动态APK工程加载到APK主工程上。

优选地,通过打包编译可运行工程,在核心工程和可运行工程中均生成R.java文件。在生成jar文件时,将可运行工程的R.java文件替换成核心工程的R.java文件。

进一步优选地,核心工程的R.java文件中的资源ID以变量表示,并且可运行工程的R.java文件中的资源ID以常量表示。

优选地,核心工程以aar的形式被引用到可运行工程中。

优选地,核心工程为多个工程,并且可运行工程引用多个所述核心工程。

在生成引用核心工程的aar文件和jar文件之前,本发明实施例的动态APK的加载方法还包括:创建可运行工程,并且将核心工程引用到创建的可运行工程中。

在本发明实施例的动态APK的加载方法中,核心工程例如包括基础调度服务。

在本发明中,基于中间Java语言的特性,将引用文件的常量改成变量,这样在Android系统引用时,会直接引用原文件路径,而这种方案在打包时即可完成。因此,根据本发明实施例的动态APK的加载方法,能够解决主工程和动态加载APK工程中引用中间产物资源的问题,使得动态APK和主工程引用的核心工资资源ID对齐,从而能够有效地加载动态APK,实现App版本的快速变更,并提升了App的稳定性和易用性,同时使得代码无法侵入,并且使得动态APK技术能够广泛使用。

以下将参考图2和3描述根据本发明的加载APK资源的方法的一具体实例。

首先,获取主工程、动态APK工程和核心工程,其中,主工程是可以直接安装在安卓android设备的APK,动态APK工程是无法直接安装在android设备上但可以通过主工程动态加载而间接加载在android设备上的APK,核心工程包括基础调度服务。

然后,修改核心工程的编译流程。在编译核心工程时,不对该核心工程进行直接流程的编译,而是手动创建可运行的虚拟主工程,废弃核心工程的编译流程。将核心工程以aar的形式依赖到创建的虚拟主工程中,通过编译虚拟主工程来替代核心工程的编译。具体编译流程如图2所示。此外,如图3所示,将核心工程例如为多个工程。在编译核心工程时,不对核心工程进行直接流程的编译,而是创建虚拟主工程,使核心工程的编译在虚拟主工程中进行。

而后,打包编译的虚拟主工程。在虚拟主工程的打包编译完成之后,生成核心工程的aar包。此时,需要在打包逻辑完成之后生成给与动态APK依赖的jar包。虚拟主工程在打包编译完成之后在核心工程和虚拟主工程都生成R.java文件,R.java文件是资源ID的管理文件。由于核心工程是非可运行工程,所以生成的R.java文件中的ID是以变量表示的,而虚拟主工程是可运行工程,所以生成的R.java文件中的ID是以常量表示的,该常量以10进制数表示。以常量在真正引用地方会变成真实的ID,而变量在真正引用的地方是源代码的形式。需要引用源代码来保证资源ID的一致。因此,当生成jar包时,通过将虚拟主工程的R.java替换成核心工程的R.java,生成给核心工程依赖的jar包。

将生成的aar包提供给主工程,并且将jar包提供给动态APK工程(例如,为多个工程)。即,使主工程引用aar包,而动态APK工程引用自定义的jar包。从而,经aar包引入到主工程的核心工程的资源ID与经jar包引入到动态APK工程的核心工程的资源ID一致。

最后,将引入了核心工程的动态APK工程加载到引入了核心工程的主工程上。

根据本发明实施例的动态APK的加载方法的具体实例,能够解决主工程和动态加载APK工程中引用中间产物资源的问题,使得动态APK和主工程引用的核心工资资源ID对齐,从而能够有效地加载动态APK,实现App版本的快速变更,并提升了App的稳定性和易用性,同时使得代码无法侵入,并且使得动态APK技术能够广泛使用。

图4示出根据本发明的一优选实施例的加载APK资源的装置。

如图4所示,加载APK资源的装置200包括:获取单元201,其获取APK主工程和动态APK工程;生成单元202,其通过对引用了核心工程的可运行工程进行打包编译,生成引用了所述核心工程的aar文件和jar文件;提供单元203,其将所述aar文件提供给所述APK主工程,并且将所述jar文件提供给所述动态APK工程,其中,基于生成的所述jar文件,经所述aar文件引入到所述APK主工程的所述核心工程的资源ID与经所述jar文件引入到所述动态APK工程的所述核心工程的资源ID一致;和加载单元204,其将所述动态APK工程加载到所述APK主工程上。

优选地,生成单元202通过打包编译可运行工程,在核心工程和可运行工程中均生成R.java文件,并且在生成jar文件时,将可运行工程的R.java文件替换成核心工程的R.java文件。

进一步优选地,核心工程的R.java文件中的资源ID以变量表示,并且可运行工程的R.java文件中的资源ID以常量表示。

优选地,核心工程以aar的形式被引用到可运行工程中。

优选地,核心工程为多个工程,并且可运行工程引用多个所述核心工程。

本发明实施例的动态APK的加载装置还包括:创建单元,该创建单元创建可运行工程,并且将核心工程引用到创建的可运行工程中。

在本发明实施例的动态APK的加载装置中,核心工程例如包括基础调度服务。

作为另一方面,本发明还提供了一种动态APK的加载系统,包括:一个或多个处理器;以及存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述实施例中所描述的动态APK的加载方法。

作为又一方面,本发明还提供了一种计算机可读介质,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被处理器执行时,使得程序执行上述实施例中所描述的动态APK的加载方法。

根据本发明实施例的动态APK的加载方案,能够解决主工程和动态加载APK工程中引用中间产物资源的问题,使得动态APK和主工程引用的核心工资资源ID对齐,从而能够有效地加载动态APK,实现App版本的快速变更,并提升了App的稳定性和易用性,同时使得代码无法侵入,并且使得动态APK技术能够广泛使用。

本领域的技术人员容易理解的是,在不冲突的前提下,上述各优选方案可以自由地组合、叠加。以上示例性实施例仅仅是用于阐明本发明的原理,而并非用于限定本发明的保护范围。本领域技术人员在不背离本发明所揭示的精神和原理的范围内,可以对本发明做出各种改进,而不会超出由权利要求书限定的范围。

相关技术
  • 动态APK的加载方法、装置、系统以及介质
  • 一种APK的加固方法和装置,及动态加载方法和装置
技术分类

06120113034599