UWA Pipeline小技巧|正则表达式的运用

UWA Pipeline小技巧|正则表达式的运用

几乎所有游戏研发项目组都希望将打包、上传、检测等需重复操作的工作交给自动化流水线进行处理,当执行这类自动化任务时,如果出现项目更改、Unity版本差异、出包变动等情况,项目组就需要重新配置相关参数,才能确保流水线正常运行。

如果可以不频繁改动参数,而用相同配置让任务灵活地适应不同情况,流水线运行的效率将会大幅提高,真正做到无需干预、自动运行。正则表达式就能起到这样的作用,它是一种在字符串操作中非常常见的处理模式,可以通过部分关键字或特定样式规格,快速筛选出符合要求的结果。

UWA Pipeline在部分功能的配置上已经支持正则表达式,可以实现对一类不同参数的适配。接下来我们就举例几种应用场景,供大家在UWA Pipeline内配置参数时参考。

一、上传至包管理——apk/ipa包路径

很多团队会根据包体的类型(比如Mono/IL2CPP)、迭代的版本号(比如v3.2.010)、或者时间日期(比如20230101),在出包时为安装包进行命名,把相应的标志性字符串作为名称的一部分,方便区分和管理。

通过“上传至包管理”步骤,将安装包自动上传,可以方便大家进行自动安装和测试。但由于上传功能,需要填写安装包的绝对路径,具体到“.apk/.aab/.ipa”文件,而每次出包时安装包的命名都有变化,所以相关的配置也得跟着修改才能确保流水线的正常运行。

这种情况下,在apk/ipa包路径的配置上使用正则表达式,就可以实现对某些关键字或特定格式的匹配,不再需要人工频繁修改,让流水线任务的执行实现真正的“自动化”。

1. 关键字的匹配
举例来说,项目出包的命名会固定带有“IL2CPP”这个关键字,前后可能会有其他不确定的字母和数字,比如“C:\Users\vip\Downloads\test\packIL2CPPempty.apk”。

UWA Pipeline在路径配置上支持“路径+正则”的形式,所以我们在填写apk包路径时,可以写成:
C:\Users\vip\Downloads\test\^[a-z0-9A-Z]*I{1}L{1}2{1}C{1}P{1}P{1}[a-z0-9A-Z]*\.apk$

Pipeline会以开始符“^”和结束符“$”作为对正则表达式内容的识别:非正则部分依旧使用路径字符串进行比对;正则部分则使用正则表达式的语法进行匹配。

因此我们可以把原有路径写为:
C:\Users\vip\Downloads\test^.*IL2CPP.*\.apk$

2. 特定格式的匹配
举例来说,我们在项目出包时的命名中,加入了当天日期以作区分。
比如“C:\Users\vip\Downloads\test\pack20230101empty.apk”,安装包命名的特征是“xxxx xx xx”样式的日期格式。

此时“路径+正则表达式”可以写作:C:\Users\vip\Downloads\test^.*\d{4}\d{1,2}\d{1,2}.*\.apk$

这里要注意“\d{n}”的使用,这个组合实现了对一串长度为n的未知数字的匹配,可以灵活匹配日期、版本号等固定的数字格式。


二、正则表达式的其余应用场合

除了“上传至包管理”步骤外,UWA Pipeline内还有很多功能在相关的配置上可以使用正则表达式,用“关键字”和“特定格式”的匹配,来适应大部分参数内容上的变动,降低人力修改的投入。主要应用场景有:

1.“真人真机测试”步骤中的安装包路径配置。

2.“本地资源检测”步骤中,UnityPath和projectPath的路径配置。

这里需要提醒大家的是:配置UnityPath时,路径要精确到Unity.exe;配置projectPath时,要精确到项目工程所在的目录,而不是其下某个具体的资源文件夹。

3.“AssetBundle检测”步骤中,扫描目录的路径配置。

和其他路径配置不同的是,“AssetBundle检测”扫描路径的配置可以不拘于项目工程目录一级,而可以指定到所需的任意文件夹。

4.“Build Report”步骤中的UnityPath、Unity工程路径、Android包体路径、iOS包体路径设定。

注意点基本同上:“UnityPath”要精确到Unity.exe;“Unity工程路径”要精确到项目工程所在目录;“Android包体路径”要精确到.apk;“iOS包体路径”要精确到.ipa。


三、本地资源检测Setting界面中路径的配置

在最近的本地资源检测3.1.0版本更新中,已经支持了正则表达式(详细可见《本地资源检测|单规则多阈值设置功能上线》),大家可以在指定规则下,对一类具有相同命名特征的文件夹或资源进行扫描。

在配置时,您可以选择使用路径字符串进行比对,或者使用正则表达式进行匹配。

1.Unity本地资源检测中,资源的路径都用“Assets”开头的相对路径进行表示,路径的匹配功能也对这个相对路径进行匹配。

2.为了和转义符号做区分,所有的路径分隔符,使用“/”。若要在正则表达式中对分隔符进行匹配,应当使用“ [/] ”。

3.如果使用正则表达式进行匹配,正则表达式匹配的策略是“部分匹配”,即只要资源的一部分路径被正则表达式匹配成功,该资源就被认为匹配成功,会列入要检测的资源清单。如果要对资源的路径做完整的匹配,可以使用符号“^”和“$”来表示路径的开始和结束。

本地资源检测中正则表达式主要的使用情况有以下两种:

1. 匹配具有某一类命名特征的文件夹
举例来讲,假如我们想扫描多个命名中带有“Texture”的文件夹下的资源,那么通过“.”、“*”等的组合使用,正则表达式可以写成:Assets[/].*Texture.*[/],从而划定规则的检测范围。

这里需要注意的是,项目中可能会存在带有“Texture”命名的具体资源,比如Assets\ABC001\Texture002.jpg。如果大家的正则表达式写得不严谨,那么这些本不在扫描范围内的资源很有可能也出现在扫描结果中。

所以我们要注意排除这些“同名”资源的干扰。这里有个比较简单的原则:文件夹的右侧一定会有斜杠;资源的右侧一定没有斜杠。

因为最终的扫描结果是资源,形式上一定是“Assets/文件夹1层/文件夹2层/文件夹N层/资源.格式”,所以当我们希望匹配的是文件夹时,在正则表达式的最后加上固定的“[/]”,如此就不会被“同名”资源干扰。

2. 匹配具有某一类命名特征的资源文件
举例来讲,假如我们想要扫描项目纹理资源中,命名带有“001”的一类纹理,结合我们之前的理解,正则表达式可以写成:Assets[/].*001[^/]*\.jpg

同样的,我们在写正则表达式的时候,要注意那些“同名”文件夹对检测结果的干扰。

基于“文件夹的右侧一定会有斜杠;资源的右侧一定没有斜杠”,我们要确保正则表达式筛选出的结果里排除“斜杠”的存在。所以我们可以写成“[^/]*”。


正则表达式在UWA Pipeline及各个产品中的使用,看似并不亮眼,但只要能合理运用,大家就能避免大量繁琐的设置和修改操作,减少对流水线任务的中断与干扰,让“自动化”的执行效率更上一层楼。

UWA Pipeline内还有很多类似的使用小技巧,可以起到很多意想不到的作用。今后我们也会给出更多的参考,也欢迎大家积极分享。

想要实际体验UWA Pipeline?请点击《免费试用 |UWA性能保障体系全体验》,15天Pipeline全服务试用就在眼前!