智能客服
你问我答,随时在线为你解决问题

























不同包类型的用途和构建流程存在差异,对不同包类型使用混淆时,开发者需要注意不同事项。本文针对HAP、HAR和HSP三种包类型,分别提供混淆建议,帮助开发者高效使用混淆。简要对应关系如下:HAP为应用安装与运行的功能模块,适用于应用端功能开发与发布;HAR为静态共享包,适用于组件化、能力沉淀与多模块/多工程复用;HSP为应用内动态共享包,适用于同一应用内多模块在运行时共享代码与资源。
为了对混淆在不同包类型下的行为有更清晰的理解,建议开发者在对不同包类型进行配置前,充分了解混淆原理及开启源码混淆步骤,并优先阅读Stage模型应用程序包结构(了解不同包类型之间的差异点)。
推荐开发者在默认混淆(包含局部变量和参数混淆)的基础上,开启混淆配置文件中的以下四项基础混淆选项:
开启混淆功能后,需配置白名单以保证应用运行功能正常。
当应用功能调试正常后,可继续开启代码压缩(-compact)与日志删除(-remove-log、-remove-nosideeffects-calls)等功能,以增强代码混淆效果,然后发布release应用包。
开启混淆规则。建议开启推荐的四项规则,其它选项按需添加。
HAP包的开发者需要重点知悉混淆规则的合并策略,确认清楚了解所有潜在影响本模块编译时混淆规则的情况。
在此基础上,还需了解哪种依赖包内的代码会跟随本模块一起参与编译混淆,因为这会影响混淆新生成的名称和部分全局生效(如属性名称)的白名单,从而影响到本模块最终的混淆效果。具体而言:
为保证与发布态三方库交互使用的正确性,ArkGuard会自动将工程级oh_modules目录下的远程HAR包的导出名称及其相关属性添加到不混淆名单中。由于开发者可以引用依赖模块中的任意路径下的文件,因此这种导出名称的收集范围并不局限于入口文件如Index.ets,而是工程级oh_modules中的所有文件中的导出名称。
对于本地源码HAR包和本地HSP包,ArkGuard不会自动将其模块源码目录下各 .ets、.ts 源文件中的export导出名称收集到不混淆名单中。此类依赖属于工程内本地模块(非发布态、未安装至工程级 oh_modules),不参与与远程发布包相同的跨模块依赖解析及export自动收集流程,因此需由开发者按需配置白名单或借助混淆助手生成保留规则。
下表总结了常见依赖包的编译混淆情况:
| 依赖模块 | 实际参与编译的文件 | 是否跟随本模块参与混淆 | 是否会传递保留配置给本模块 | 是否收集导出名称到不混淆名单中 |
|---|---|---|---|---|
| 本地源码HAR包 | 模块在本地的源码目录 | 是 | 是 | 否 |
| 发布态源码HAR包 | 工程级的oh_modules下的模块目录 | 是 | 是 | 是 |
| 发布态字节码HAR包 | 二进制字节码和声明文件 | 否 | 是 | 是 |
| 本地源码HSP包 | 不参与本模块编译 | 否 | 是 | 否 |
| 集成态HSP包 | 二进制字节码和声明文件 | 否 | 是 | 是 |
请先阅读ArkGuard混淆保留选项文档,了解在哪些场景下需要为各选项手动配置白名单。然后,将配置好的白名单添加到obfuscation-rules.txt文件中。
构建应用,验证HAP包功能。若功能异常,需排查白名单是否遗漏。
应用功能正常,即可发布应用包。
作为一个未发布的静态包,本地源码HAR包不会独立进行编译混淆,而是会跟随依赖它的主模块(如HAP)一同进行编译混淆,开发者需参阅HAP包混淆建议了解相关行为。
由于本地源码HAR包会随着主模块一同进行混淆,多个HAP或HSP依赖相同本地源码HAR时,本地源码HAR在不同模块中的混淆结果可能不同。当开启useNormalizedOHMUrl(即在工程级build-profile.json5文件中,将strictMode属性的useNormalizedOHMUrl字段设置为true)时,运行时只会加载一份HAR,导致HAP和HSP无法找到对应的HAR,从而在调用HAR的方法时出现找不到的问题。
解决方案:
当被其他模块依赖时,有以下两点需要注意:
字节码HAR开启混淆后,无需在consumer-rules.txt中配置白名单,其余适配流程与发布态源码HAR包保持一致。这是因为ArkGuard是源码混淆工具,在发布构建字节码HAR包时只对本模块混淆一次。当其他依赖方引入该HAR包并开启混淆时,ArkGuard不会对其进行二次混淆。
HSP生成obfuscation.txt的规则仅来源于当前模块的consumer-rules.txt文件。不包括依赖模块的consumer-rules.txt文件或obfuscation.txt文件。
开发者可以参阅HAP包混淆建议中的所有建议,确保集成态HSP包的内部混淆效果。集成态HSP包发布后需验证使用方开启混淆时接口可以被正常调用。
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功