本公开涉及软件开发,尤其涉及一种资源包构建方法及装置。
背景技术:
1、目前的资源包自动构建流程中常常需要在编译期动态覆盖资源。在编译期动态覆盖资源是指:通过资源下发服务器向编译设备下发一些资源,编译设备在编译过程中通过服务器下发的资源替代原始资源集中的资源,从而保证资源能够被统一管理,无会被开发者自行修改。例如:通过资源下发服务器向编译设备下发图标,编译设备在编译流程中通过资源下发服务器下发的图标替代原始资源集中的相应图标,以实现对软件中的该图标的统一管理。
2、目前,使用较为广泛的一种编译期动态覆盖资源方案为:通过安卓gradle插件(android gradle plugin)自带的resvalue方法实现编译期动态覆盖资源。具体为:在编译脚本中调用resvalue命令将指定资源插入默认的资源集中,在后续编译流程通过该默认资源集中的资源替代原始资源集中的相应的资源,从而实现编译期动态覆盖资源。然而,由于通过resvalue方法实现编译期动态覆盖资源时只能将资源插入默认的资源集中,且在一个资源集中同一资源只能存在一个可生效的资源文件,因此对于同一图像资源或文本资源,该默认资源集中只会存在一个可生效的图像资源或文本资源,而无法同时存在多个不同分辨率的可生效图像资源或多个不同语言的可生效文本资源,因此通过resvalue方法实现编译期动态覆盖资源时,同一图像资源只能包括一种分辨率的可生效图像,同一文本资源也只能包括一种语言的可生效文本,而无法实现多分辨率或多语言的动态覆盖资源。
技术实现思路
1、有鉴于此,本公开提供了一种资源包构建方法及装置,用于解决现有的编译期动态覆盖资源方案无法实现多分辨率或多语言的动态覆盖资源的问题。
2、为了实现上述目的,本公开实施例提供技术方案如下:
3、第一方面,本公开的实施例提供了一种资源包构建方法,应用于编译设备,所述方法包括:
4、在构建目标应用程序的资源包时,获取所述目标应用程序的资源补丁;所述资源补丁包括至少一个覆盖资源的编译文件;
5、解析所述资源补丁获取所述至少一个覆盖资源的编译文件;
6、将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中;
7、合并各个工程编译参数对应的编译文件,生成编译文件集合;其中,所述覆盖资源的编译文件的优先级高于所述目标应用程序的原始资源的编译文件的优先级;
8、对所述编译文件集合中的编译文件进行打包,生成所述目标应用程序的资源包。
9、作为本公开实施例一种可选的实施方式,所述获取所述目标应用程序的资源补丁,包括:
10、向资源下发服务器发送第一请求信息;
11、接收所述资源下发服务器发送的索引文件;
12、解析所述索引文件获取第一文件名称,所述第一文件名称为所述资源下发服务器存储的所述目标应用程序的第一资源补丁的文件名称;
13、获取第二资源补丁的第二文件名称;所述第二文件名称为本地缓存的所述目标应用程序的第二资源补丁的文件名称;
14、若所述第一文件名称与所述第二文件名称不同,则从所述资源下发服务器下载所述第一资源补丁,并将所述第一资源补丁作为所述目标应用程序的资源补丁;
15、若所述第一文件名称与所述第二文件名称相同,则从本地缓存中读取所述第二资源补丁,并将所述第二资源补丁作为所述目标应用程序的资源补丁。
16、作为本公开实施例一种可选的实施方式,所述下载所述第一资源补丁,包括:
17、根据所述第一文件名称生成所述第一资源补丁的下载地址;
18、根据所述下载地址向所述资源下发服务器发送第二请求信息;
19、接收所述资源下发服务器发送的所述第一资源补丁。
20、作为本公开实施例一种可选的实施方式,在下载所述第一资源补丁之后,所述方法还包括:
21、将本地缓存的所述目标应用程序的资源补丁由所述第二资源补丁更新为所述第一资源补丁。
22、作为本公开实施例一种可选的实施方式,所述第一文件名称中包括第一校验码;在将所述第一资源补丁作为所述目标应用程序的资源补丁,并解析所述资源补丁获取所述至少一个覆盖资源的编译文件之后,所述方法还包括:
23、根据所述至少一个覆盖资源的编译文件计算第二校验码;
24、判断所述第一校验码与所述第二校验码是否相同;
25、在所述第一校验码与所述第二校验码不同的情况下,输出用于提示资源补丁获取异常的提示信息。
26、作为本公开实施例一种可选的实施方式,所述将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中,包括:
27、将各个覆盖资源的编译文件对应的链接参数添加到所述工程编译参数的尾部,以使所述覆盖资源的编译文件的优先级高于所述目标应用程序的原始资源的编译文件的优先级。
28、作为本公开实施例一种可选的实施方式,在通过增量编译的方式构建所述目标应用程序的资源包的情况下,所述方法还包括:
29、在将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中之前,对各个所述覆盖资源的编译文件进行重命名。
30、第二方面,本公开的实施例提供了一种资源包构建方法,应用于资源下发服务器,所述方法包括:
31、接收资源打包服务器发送的目标应用程序的资源补丁;
32、保存所述资源补丁并将索引文件中存储的索引值更新为所述资源补丁的文件名称;
33、接收所述编译设备发送的第一请求信息;
34、响应于所述第一请求信息,向所述编译设备发送所述索引文件;
35、接收所述编译设备发送的第二请求信息;
36、响应于所述第二请求信息,向所述编译设备发送所述资源补丁。
37、第三方面,本公开的实施例提供了一种资源包构建方法,应用于资源打包服务器,所述方法包括:
38、以预设时长为周期,周期性获取目标应用程序的各个覆盖资源;
39、对各个所述覆盖资源进行编译,获取各个所述覆盖资源的编译文件;
40、根据各个所述覆盖资源的编译文件确定所述目标应用程序的覆盖资源是否具有更新;
41、若确定所述目标应用程序的覆盖资源具有更新,则根据各个所述覆盖资源的编译文件生成所述目标应用程序的资源补丁,并向资源下发服务器发送所述目标应用程序的资源补丁。
42、作为本公开实施例一种可选的实施方式,所述根据各个所述覆盖资源的编译文件确定所述目标应用程序的覆盖资源是否具有更新,包括:
43、根据各个所述覆盖资源的编译文件计算得到校验码;
44、判断所述校验码是否与上一周期计算得到的校验码相同;
45、若相同,则确定所述目标应用程序的覆盖资源没有更新;
46、若不同,则确定所述目标应用程序的覆盖资源具有更新。
47、作为本公开实施例一种可选的实施方式,所述在根据各个所述覆盖资源的编译文件生成所述目标应用程序的资源补丁之后,所述方法还包括:
48、根据所述校验码对所述目标应用程序的资源补丁进行命名。
49、第四方面,本公开的实施例提供了一种编译设备,包括:
50、获取单元,用于在构建目标应用程序的资源包时,获取所述目标应用程序的资源补丁;所述资源补丁包括至少一个覆盖资源的编译文件;
51、解析单元,用于解析所述资源补丁获取所述至少一个覆盖资源的编译文件;
52、处理单元,用于将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中;
53、链接单元,用于合并各个工程编译参数对应的编译文件,生成编译文件集合;其中,所述覆盖资源的编译文件的优先级高于所述目标应用程序的原始资源的编译文件的优先级;
54、生成单元,用于对所述编译文件集合中的编译文件进行打包,生成所述目标应用程序的资源包。
55、作为本公开实施例一种可选的实施方式,所述获取单元,具体用于向资源下发服务器发送第一请求信息;接收所述资源下发服务器发送的索引文件;解析所述索引文件获取第一文件名称,所述第一文件名称为所述资源下发服务器存储的所述目标应用程序的第一资源补丁的文件名称;获取第二资源补丁的第二文件名称;所述第二文件名称为本地缓存的所述目标应用程序的第二资源补丁的文件名称;若所述第一文件名称与所述第二文件名称不同,则从所述资源下发服务器下载所述第一资源补丁,并将所述第一资源补丁作为所述目标应用程序的资源补丁;若所述第一文件名称与所述第二文件名称相同,则从本地缓存中读取所述第二资源补丁,并将所述第二资源补丁作为所述目标应用程序的资源补丁。
56、作为本公开实施例一种可选的实施方式,所述获取单元,具体用于根据所述第一文件名称生成所述第一资源补丁的下载地址;根据所述下载地址向所述资源下发服务器发送第二请求信息;接收所述资源下发服务器发送的所述第一资源补丁。
57、作为本公开实施例一种可选的实施方式,所述获取单元,还用于在下载所述第一资源补丁之后,将本地缓存的所述目标应用程序的资源补丁由所述第二资源补丁更新为所述第一资源补丁。
58、作为本公开实施例一种可选的实施方式,所述第一文件名称中包括第一校验码;所述获取单元,还用于根据所述至少一个覆盖资源的编译文件计算第二校验码;判断所述第一校验码与所述第二校验码是否相同;在所述第一校验码与所述第二校验码不同的情况下,输出用于提示资源补丁获取异常的提示信息。
59、作为本公开实施例一种可选的实施方式,所述处理单元,具体用于将各个覆盖资源的编译文件对应的链接参数添加到所述工程编译参数的尾部,以使所述覆盖资源的编译文件的优先级高于所述目标应用程序的原始资源的编译文件的优先级。
60、作为本公开实施例一种可选的实施方式,在通过增量编译的方式构建所述目标应用程序的资源包的情况下,所述处理单元,还用于在将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中之前,对各个所述覆盖资源的编译文件进行重命名。
61、第五方面,本公开实施例提供了一种资源下发服务器,包括:
62、接收单元,用于接收资源打包服务器发送的目标应用程序的资源补丁;
63、处理单元,用于保存所述资源补丁并将索引文件中存储的索引值更新为所述资源补丁的文件名称;
64、所述接收单元,还用于接收所述编译设备发送的第一请求信息;
65、发送单元,用于响应于所述第一请求信息,向所述编译设备发送所述索引文件;
66、所述接收单元,还用于接收所述编译设备发送的第二请求信息;
67、所述发送单元,还用于响应于所述第二请求信息,向所述编译设备发送所述资源补丁。
68、第六方面,本公开实施例提供了一种资源打包服务器,包括:
69、获取单元,用于以预设时长为周期,周期性获取目标应用程序的各个覆盖资源;
70、编译单元,用于对各个所述覆盖资源进行编译,获取各个所述覆盖资源的编译文件;
71、处理单元,用于根据各个所述覆盖资源的编译文件确定所述目标应用程序的覆盖资源是否具有更新,以及在确定所述目标应用程序的覆盖资源具有更新的情况下,则根据各个所述覆盖资源的编译文件生成所述目标应用程序的资源补丁;
72、发送单元,用于向资源下发服务器发送所述目标应用程序的资源补丁。
73、作为本公开实施例一种可选的实施方式,所述处理单元,具体用于根据各个所述覆盖资源的编译文件计算得到校验码;判断所述校验码是否与上一周期计算得到的校验码相同;若相同,则确定所述目标应用程序的覆盖资源没有更新;若不同,则确定所述目标应用程序的覆盖资源具有更新。
74、作为本公开实施例一种可选的实施方式,所述处理单元,还用于所述在根据各个所述覆盖资源的编译文件生成所述目标应用程序的资源补丁之后,根据所述校验码对所述目标应用程序的资源补丁进行命名。
75、第七方面,本公开实施例提供一种电子设备,包括:存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于在执行计算机程序时,使得所述电子设备实现上述任一实施方式所述的资源包构建方法。
76、第八方面,本公开实施例提供一种计算机可读存储介质,当所述计算机程序被计算设备执行时,使得所述计算设备实现上述任一实施方式所述的资源包构建方法。
77、第九方面,本公开实施例提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现上述任一实施方式所述的资源包构建方法。
78、本公开实施例提供的资源包构建方法在构建目标应用程序的资源包时,首先获取包括至少一个覆盖资源的编译文件的资源补丁,然后解析所述资源补丁获取所述至少一个覆盖资源的编译文件,再将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中,并合并各个工程编译参数对应的编译文件,生成编译文件集合,以及对所述编译文件集合中的编译文件进行打包,生成所述目标应用程序的资源包。由于所述覆盖资源的编译文件的优先级高于所述目标应用程序的原始资源的编译文件的优先级,因此覆盖资源的编译文件可以替换相应的原始资源的编译文件,进而实现资源的动态部署与覆盖。又因为本公开实施例提供中是通过将各个所述覆盖资源的编译文件对应的链接参数添加到工程编译参数中来实现资源的动态部署与覆盖的,无需将覆盖资源插入指定的资源集中,因此本公开实施例在实现资源的动态部署与覆盖的同时,还可以解决现有的编译期动态覆盖资源方案无法实现多分辨率或多语言的动态覆盖资源的问题。