本发明涉及计算机技术领域,尤其涉及一种安卓应用插件化的实现方法、装置、设备及存储介质。
背景技术:
目前,智能终端已成为多数用户日常生活中必备的电子设备。随着智能终端技术的快速发展,智能终端中的功能也越来越完善,能够安装各种各样的应用程序,可满足用户多样的使用需求。
现有技术中,安卓应用程序通常需要经过编译android工程及打包等操作来生成应用程序安装包,并将应用程序安装包发布至安卓应用商店,待用户从安卓应用商店下载应用程序安装包并安装之后,才能使用应用功能。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
1、如果android工程过大,编译缓慢,严重影响开发效率;
2、所有功能统一发布,发布周期长,不能及时满足市场需求;
3、用户需要下载应用程序安装包并需要安装,耗时较长。
技术实现要素:
为了解决上述背景技术中提到的至少一个问题,本发明提供了一种安卓应用插件化的实现方法、装置、设备及存储介质。
本发明实施例提供的具体技术方案如下:
第一方面,提供了一种安卓应用插件化的实现方法,所述安卓应用包括宿主工程和插件工程,所述方法包括:
在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
在编译所述插件工程的过程中,将所述插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件,并在编译结束后生成插件apk文件;
将所述插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id,生成最终的插件apk文件;
发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
进一步地,所述在编译所述插件工程的过程中,将所述插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,包括:
根据预设的修改规则,修改所述插件工程的代码文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
进一步地,所述将所述插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,包括:
确定出所述插件apk文件中包含有资源id的资源文件;
根据预设的修改规则,修改所述插件apk文件的资源文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
进一步地,所述发布所述最终的插件apk文件,以供所述宿主应用加载所述插件apk文件之后,所述方法还包括:
在运行所述宿主应用时,若用户在所述宿主应用上的当前操作触发的目标功能所对应的资源处于所述插件apk文件中,则在所述宿主应用的apk文件中加载所述最终的插件apk文件以运行所述目标功能。
第二方面,提供了一种安卓应用插件化的实现方法,所述安卓应用包括宿主工程和插件工程,所述方法包括:
在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
在编译所述插件工程的过程中,若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件,并在编译结束后生成插件apk文件;
在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id,生成最终的插件apk文件;
发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
进一步地,所述方法还包括:
在运行宿主应用时,若用户在宿主应用上的当前操作触发的目标功能所对应的资源处于插件apk文件中,则在宿主应用中加载最终的插件apk文件以运行目标功能。
第三方面,提供了一种安卓应用插件化的实现装置,所述安卓应用包括宿主工程和插件工程,所述装置包括:
编译模块,用于在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
第一修改模块,用于在编译所述插件工程的过程中,将所述插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;
文件删除模块,还用于若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件;
第一生成模块,用于在编译结束后生成插件apk文件;
第二修改模块,用于将所述插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;
所述第二修改模块,还用于在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id;
第二生成模块,用于生成最终的插件apk文件;
插件发布模块,用于发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
进一步地,所述第一修改模块具体用于:
根据预设的修改规则,修改所述插件工程的代码文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
进一步地,所述第二修改模块具体用于:
确定出所述插件apk文件中包含有资源id的资源文件;
根据预设的修改规则,修改所述插件apk文件的资源文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
进一步地,所述装置还包括:
运行模块,用于在运行所述宿主应用时,若用户在所述宿主应用上的当前操作触发的目标功能所对应的资源处于所述插件apk文件中,则在所述宿主应用的apk文件中加载所述最终的插件apk文件以运行所述目标功能。
第四方面,提供了一种安卓应用插件化的实现装置,所述安卓应用包括宿主工程和插件工程,所述装置包括:
编译模块,用于在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
文件删除模块,用于在编译所述插件工程的过程中,若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件;
第一生成模块,用于在编译结束后生成插件apk文件;
第二生成模块,用于在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id,生成最终的插件apk文件;
插件发布模块,用于发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
进一步地,所述装置还包括:
运行模块,用于在运行所述宿主应用时,若用户在所述宿主应用上的当前操作触发的目标功能所对应的资源处于所述插件apk文件中,则在所述宿主应用的apk文件中加载所述最终的插件apk文件以运行所述目标功能。
第五方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述所述方法的步骤。
第六方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述方法的步骤。
本发明实施例提供的技术方案具有如下有益效果:
1、解决android应用工程过大问题,将不同的功能分成多个工程,不但编译快、耦合低、研发效率更高,而且也能避免各个功能研发期间的物理干扰;
2、解决统一发布,发布周期长的问题,采用即时研发、即时发布、即时使用的模式,满足市场需求且无需等待;
3、解决用户下载后需要安装的问题,轻量下载、快速启用无需安装。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为实施例一提供的安卓应用插件化的实现方法的流程示意图;
图2为实施例二提供的安卓应用插件化的实现方法的流程示意图;
图3为实施例三提供的安卓应用插件化的实现装置的结构示意图;
图4为实施例四提供的安卓应用插件化的实现装置的结构示意图;
图5为本发明实施例提供的计算机设备的内部结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本申请的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
实施例一
本发明实施例提供了一种安卓应用插件化的实现方法,该安卓应用包括宿主工程和插件工程,如图1所示,该方法可以包括:
步骤s11,在对宿主工程编译生成宿主应用的apk文件后,编译插件工程。
本实施例中,为解决android工程过大而导致编译缓慢的问题,可以将安卓应用拆分成一个宿主工程和多个插件工程,并分别进行编译。这里,一个插件工程通常对于一个业务模块,插件工程中可以包含需要对应用程序下发的新的功能或者需要实时修复bug。
具体地,可以使用androidstudio对宿主工程进行编译,并在编译生成宿主应用apk文件之后,使用androidstudio对安卓应用的插件工程进行编译,以生成插件apk文件。
其中,编译宿主工程的代码和资源,生成宿主应用apk文件,宿主应用apk文件中包含宿主工程的代码文件、资源文件和依赖文件,宿主应用apk文件可以独立安装并运行在android系统中;编辑插件工程,生成插件apk文件,插件应用apk文件中包含插件工程的代码文件、资源文件和依赖文件,插件apk文件不能独立安装和运行,需要加载到宿主应用中才能运行。上述的宿主应用安装在智能终端上,智能终端包括但不限于智能手机、平板电脑、穿戴式智能设备等。
步骤s12,在编译插件工程的过程中,将插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
其中,各种资源分配有唯一的资源id,资源id用于唯一标识资源,资源id为8位十六进制整数,例如0x01010001、0x7f010001,格式为pptteeee,其中,“pp”表示package类型,安卓系统规定package字段为“01”时,表示系统的资源,系统资源会存放在系统资源文件夹下,package字段为“7f”时,表示应用的资源,应用资源会存放在应用资源文件夹下,同时规定所有位于[0x01-0x7f]之间的package字段都是合法的;“tt”表示资源类型,资源类型包括但不限于文本、图片、控件、动画、颜色、尺码等android支持的类型;“eeee”为自增序号。
本实施例中,当资源id的package字段位于[0x02-0x7e]时,该资源id是属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
具体地,在编译插件工程的过程中,对于编译生成的插件工程的代码文件,识别出代码文件中的资源id所属的资源id类型是否为应用资源id类型,若是,则修改插件工程的代码文件中的资源id。
在一个优选实施方式中,上述步骤s12中,在编译插件工程的过程中,将插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,可以包括:
根据预设的修改规则,修改插件工程的代码文件中资源id的package字段,以使得修改后的资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
具体地,在插件工程的所有r.java文件生成之后,若插件工程的代码文件中资源id为安卓系统规定的应用资源id,则按照预设的修改规则,自动修改插件工程的r.java文件中的资源id的package字段,这里,修改规则可以设定为:在package字段数值减去预设值之后得到的字段数值作为修改后的资源id的package字段,预设值包含在预设范围内,预设范围例如预设值介于1到5之间。本发明实施例对具体的修改规则不作限定,只要保证插件工程中资源id的package字段位于[0x02-0x7e]且资源id的唯一性即可。
举例来说,假设宿主工程的r.java文件中资源id为0x7f020101,编译生成的插件工程的r.java文件中资源id也包含0x7f020101,二者冲突,则对插件工程的r.java文件中资源id中作为package字段的“7f”减去2(这里以“2”作为预设值),得到“7d”,那么修改后的插件工程的r.java文件中资源id即为0x7d020101。
本实施例中,通过在编译插件工程的过程中,将插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,这样在无需修改android工程结构的情况下,不但能够保证所有工程资源id的唯一性,而且能够使插件在调用资源时无需遍历系统资源id以及应用资源id,提高了插件功能运行速度,并避免资源加载出错。
步骤s13,若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件。
其中,插件apk文件主要包括插件工程的代码文件、资源文件和依赖文件。
本实施例中,通过对插件工程的依赖文件进行去重,使得插件apk文件的容量更小、更轻量化。
步骤s14,将插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
这里,资源文件可以是resources.arsc文件、res目录下的xml文件等。
具体地,解压步骤s13编译结束后生成的插件apk文件,修改插件工程的资源文件中的资源id,得到修改后的插件apk文件,最后将修改后的插件apk文件进行压缩并签名,形成最终的插件apk文件。
在一个优选实施方式中,上述步骤s14中,将插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,可以包括:
确定出插件apk文件中包含有资源id的资源文件;
根据预设的修改规则,修改插件apk文件的资源文件中资源id的package字段,以使得修改后的资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
具体地,遍历出插件apk文件中包含有资源id的资源文件,按照预设的修改规则,修改插件apk文件的资源文件中资源id的package字段,这里,修改规则可以设定成与步骤s12中的修改规则相同的规则,即:在package字段数值减去预设值之后得到的字段数值作为修改后的资源id的package字段,预设值包含在预设范围内,预设范围例如预设值介于1到5之间,当然也可以设定成与步骤s11中的修改规则不同的规则,只要保证所有资源id的唯一性以及修改后的资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型即可,本实施例对具体的修改规则不作限定。
步骤s15,在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件。
示例性地,插件工程引用的资源id1对应的资源为图片a,图片a包含在插件工程的依赖文件a中,假如插件工程的依赖文件a在步骤s13中因同时被宿主工程依赖而删除,那么需要在插件apk文件中,使用宿主工程中对应图片a的资源id2替换资源id1。
本实施例中,为了避免插件工程引用的资源id对应的资源因删除依赖文件而不存在,需要对插件工程引用的资源id进行修改,以保证成功加载到该插件工程中的资源id所对应的资源。
本实施例中,通过修改插件apk文件的资源文件中的资源id,以及在判定插件apk文件中插件工程引用的资源id对应的资源因删除依赖文件不存在时,使用宿主工程中对应资源的资源id替换插件工程引用的资源id,从而生成最终的插件apk文件。
步骤s16,发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
具体地,将最终的插件apk文件存储到宿主应用可以获取到的存储空间内(例如宿主应用apk文件内、远程服务器等),以供宿主应用加载最终的插件apk文件。
本实施例中,通过发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件,加载实现插件即时发布以及即时使用的目的。
在一个优选实施方式中,步骤s16之后,方法还可以包括:
在运行宿主应用时,若用户在宿主应用上的当前操作触发的目标功能所对应的资源处于插件apk文件中,则在宿主应用中加载最终的插件apk文件以运行目标功能。
本实施例中,用户预先通过智能终端下载宿主应用的apk文件并安装,在运行宿主应用时,判断宿主应用中加载的插件apk文件中是否包含有用户在宿主应用上的当前操作触发的目标功能所对应的资源,若包含,则直接运行该插件apk文件中的目标功能,若不包含,则通过远程服务器获取用户在宿主应用上的当前操作触发的目标功能所对应的资源所在的插件apk文件,并加载该插件apk文件到在宿主应用中,之后再运行目标功能。
本发明实施例提供了一种安卓应用插件化的实现方法,通过在对宿主工程进行编译生成宿主应用的apk文件后,编译插件工程,在编译插件工程的过程中,修改插件工程的代码文件中的资源id,若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件,以及修改插件apk文件的资源文件中的资源id,并在判定插件apk文件中插件工程引用的资源id对应的资源因删除依赖文件不存在时,使用宿主工程中对应资源的资源id替换插件工程引用的资源id,生成最终的插件apk文件;发布最终的插件apk文件,以供宿主应用加载插件apk文件。如此,将不同的功能分成多个工程,不但编译快、耦合低、研发效率更高,而且也能避免各个功能研发期间的物理干扰,解决了android应用工程过大而导致开发效率较低的问题;另外,采用即时研发、即时发布、即时使用的模式,及时满足市场需求且无需等待,解决了统一发布,发布周期长的问题;此外,也能实现轻量下载、快速启用无需安装的目的,解决了现有技术中用户下载后需要安装的问题。
实施例二
本发明实施例提供了一种安卓应用插件化的实现方法,该安卓应用包括宿主工程和插件工程,如图2所示,该方法可以包括:
步骤s21,在对宿主工程编译生成宿主应用的apk文件后,编译插件工程。
具体地,步骤s21的实现过程可以参照步骤s11,此处不再赘述。
步骤s22,在编译插件工程的过程中,若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件。
步骤s23,在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件。
具体地,步骤s23的实现过程可以参照步骤s15,此处不再赘述。
步骤s24,发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
具体地,步骤s24的实现过程可以参照步骤s16,此处不再赘述。
在一个优选实施方式中,步骤s24之后,方法还可以包括:
在运行宿主应用时,若用户在宿主应用上的当前操作触发的目标功能所对应的资源处于插件apk文件中,则在宿主应用中加载最终的插件apk文件以运行目标功能。
本实施例中,用户预先通过智能终端下载宿主应用的apk文件并安装,在运行宿主应用时,判断宿主应用中加载的插件apk文件中是否包含有用户在宿主应用上的当前操作触发的目标功能所对应的资源,若包含,则直接运行该插件apk文件中的目标功能,若不包含,则通过远程服务器获取用户在宿主应用上的当前操作触发的目标功能所对应的资源所在的插件apk文件,并加载该插件apk文件到在宿主应用中,之后再运行目标功能。
本发明实施例提供一种安卓应用插件化的实现方法,在插件编译过程中,通过对插件工程的依赖文件进行去重以及当插件工程引用的资源id所对应的资源因删除依赖文件而不存在,使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件并发布,这样不但能够使得插件apk文件的容量更小、更轻量化,而且也能够极大地提高插件加载速度。
实施例三
本发明实施例提供了一种安卓应用插件化的实现装置,安卓应用包括宿主工程和插件工程,如图3所示,装置包括:
编译模块31,用于在对宿主工程编译生成宿主应用的apk文件后,编译插件工程;
第一修改模块32,用于在编译插件工程的过程中,将插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;
文件删除模块33,还用于若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件;
第一生成模块34,用于在编译结束后生成插件apk文件;
第二修改模块35,用于将插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;
第二修改模块35,还用于在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id;
第二生成模块36,用于生成最终的插件apk文件;
插件发布模块37,用于发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
进一步地,第一修改模块32具体用于:
根据预设的修改规则,修改插件工程的代码文件中资源id的package字段,以使得修改后的资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
进一步地,第二修改模块35具体用于:
确定出插件apk文件中包含有资源id的资源文件;
根据预设的修改规则,修改插件apk文件的资源文件中资源id的package字段,以使得修改后的资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
进一步地,装置还包括:
运行模块,用于在运行宿主应用时,若用户在宿主应用上的当前操作触发的目标功能所对应的资源处于插件apk文件中,则在宿主应用的apk文件中加载最终的插件apk文件以运行目标功能。
需要说明的是:本实施例提供的安卓应用插件化的实现装置中,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,本实施例的安卓应用插件化的实现装置与上述实施例一中的安卓应用插件化的实现方法实施例属于同一构思,其具体实现过程和有益效果详见安卓应用插件化的实现方法实施例,这里不再赘述。
实施例四
本发明实施例提供了一种安卓应用插件化的实现装置,安卓应用包括宿主工程和插件工程,如图4所示,装置包括:
编译模块41,用于在对宿主工程编译生成宿主应用的apk文件后,编译插件工程;
文件删除模块42,用于在编译插件工程的过程中,若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件;
第一生成模块43,用于在编译结束后生成插件apk文件;
第二生成模块44,用于在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件;
插件发布模块45,用于发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
进一步地,装置还包括:
运行模块,用于在运行宿主应用时,若用户在宿主应用上的当前操作触发的目标功能所对应的资源处于插件apk文件中,则在宿主应用的apk文件中加载最终的插件apk文件以运行目标功能。
需要说明的是:本实施例提供的安卓应用插件化的实现装置中,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,本实施例的安卓应用插件化的实现装置与上述实施例二中的安卓应用插件化的实现方法实施例属于同一构思,其具体实现过程和有益效果详见安卓应用插件化的实现方法实施例,这里不再赘述。
图5为本发明实施例提供的计算机设备的内部结构图。该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种安卓应用插件化的实现方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
在对安卓应用的宿主工程编译生成宿主应用的apk文件后,编译安卓应用的插件工程;
在编译插件工程的过程中,将插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件;
将插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件;
发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
在一个实施例中,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
在对安卓应用的宿主工程编译生成宿主应用的apk文件后,编译安卓应用的插件工程;
在编译插件工程的过程中,若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件;
在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件;
发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
在对安卓应用的宿主工程编译生成宿主应用的apk文件后,编译安卓应用的插件工程;
在编译插件工程的过程中,将插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件;
将插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件;
发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
在对安卓应用的宿主工程编译生成宿主应用的apk文件后,编译安卓应用的插件工程;
在编译插件工程的过程中,若插件工程的依赖文件同时被宿主工程依赖,则删除插件工程的依赖文件,并在编译结束后生成插件apk文件;
在插件apk文件中,判断插件工程引用的资源id对应的资源是否因删除依赖文件而不存在,若是,则使用宿主工程中对应资源的资源id以替换的方式进行修改插件工程引用的资源id,生成最终的插件apk文件;
发布最终的插件apk文件,以供宿主应用加载最终的插件apk文件。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
1.一种安卓应用插件化的实现方法,其特征在于,所述安卓应用包括宿主工程和插件工程,所述方法包括:
在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
在编译所述插件工程的过程中,将所述插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件,并在编译结束后生成插件apk文件;
将所述插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;以及
在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id,生成最终的插件apk文件;
发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
2.根据权利要求1所述的方法,其特征在于,所述在编译所述插件工程的过程中,将所述插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,包括:
根据预设的修改规则,修改所述插件工程的代码文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
3.根据权利要求1所述的方法,其特征在于,所述将所述插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型,包括:
确定出所述插件apk文件中包含有资源id的资源文件;
根据预设的修改规则,修改所述插件apk文件的资源文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
4.根据权利要求1至3任一所述的方法,其特征在于,所述发布所述最终的插件apk文件,以供所述宿主应用加载所述插件apk文件之后,所述方法还包括:
在运行所述宿主应用时,若用户在所述宿主应用上的当前操作触发的目标功能所对应的资源处于所述插件apk文件中,则在所述宿主应用的apk文件中加载所述最终的插件apk文件以运行所述目标功能。
5.一种安卓应用插件化的实现方法,其特征在于,所述安卓应用包括宿主工程和插件工程,所述方法包括:
在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
在编译所述插件工程的过程中,若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件,并在编译结束后生成插件apk文件;
在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id,生成最终的插件apk文件;
发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
6.一种安卓应用插件化的实现装置,其特征在于,所述安卓应用包括宿主工程和插件工程,所述装置包括:
编译模块,用于在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
第一修改模块,用于在编译所述插件工程的过程中,将所述插件工程的代码文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;
文件删除模块,还用于若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件;
第一生成模块,用于在编译结束后生成插件apk文件;
第二修改模块,用于将所述插件apk文件的资源文件中的资源id修改为属于非系统资源id类型以及非应用资源id类型的合法资源id类型;
所述第二修改模块,还用于在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id;
第二生成模块,用于生成最终的插件apk文件;
插件发布模块,用于发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
7.根据权利要求6所述的装置,其特征在于,所述第一修改模块具体用于:
根据预设的修改规则,修改所述插件工程的代码文件中所述资源id的package字段,以使得修改后的所述资源id为属于非系统资源id类型以及非应用资源id类型的合法资源id类型。
8.一种安卓应用插件化的实现装置,其特征在于,所述安卓应用包括宿主工程和插件工程,所述装置包括:
编译模块,用于在对所述宿主工程编译生成宿主应用的apk文件后,编译所述插件工程;
文件删除模块,用于在编译所述插件工程的过程中,若所述插件工程的依赖文件同时被所述宿主工程依赖,则删除所述插件工程的依赖文件;
第一生成模块,用于在编译结束后生成插件apk文件;
第二生成模块,用于在所述插件apk文件中,判断所述插件工程引用的资源id对应的资源是否因删除所述依赖文件而不存在,若是,则使用所述宿主工程中对应所述资源的资源id以替换的方式进行修改所述插件工程引用的资源id,生成最终的插件apk文件;
插件发布模块,用于发布所述最终的插件apk文件,以供所述宿主应用加载所述最终的插件apk文件。
9.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至5任一所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一所述方法的步骤。
技术总结