HarmonyOS 鸿蒙Next在hsp中开启混淆的规则

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next在hsp中开启混淆的规则

在hsp中,开启了混淆,混淆规则如下  -enable-property-obfuscation -enable-toplevel-obfuscation -enable-filename-obfuscation -enable-export-obfuscation -remove-log  打包后发现,build/outputs/hspA.har中,index.d.ets导出的类已经被混淆,内容如下 混淆前: export { AppEnvConstant } from “./src/main/ets/utils/AppEnvConstant”  混淆后: export { q1 } from “./src/main/ets/a/j”;  但是在entry中引用hspA内容时,引用的类名却还是使用 AppEnvConstant  import { AppEnvConstant } from “@normalized:N&commonutils&&commonutils/Index&”;  运行时报错 Error message:the requested module ‘@normalized:N&commonutils&&commonutils/Index&’ does not provide an export name ‘AppEnvConstant’ which imported by ‘&entry/src/main/ets/abilitystage/EntryAbilityStage&’    疑问: 在混淆时,hspA依赖库中,类已经被改名为q1。但是entry中使用import引用时却没有改名,依旧使用混淆前的类名,这样合理吗?如何一并修改。

2 回复

HSP 和主模块是独立编译的,混淆后名称会不一致,因此都需要配置白名单。可以给 export { AppEnvConstant } 类配置白名单,详情可参考:OpenHarmony 文档

配置选项

1. keep-file-name [,identifiers,...]

指定要保留的文件/文件夹的名称(不需要写文件后缀),支持使用名称类通配符。例如:

-keep-file-name
index
entry
-keep
./src/main/ets/fileName.ts    // fileName.ts中的名称不混淆
../folder                      // folder目录下文件及子文件夹中的名称都不混淆
 

具体参考保留选项:华为开发者文档

2. -keep filepath

保留指定相对路径中的所有名称(例如变量名、类名、属性名等)不被混淆。这个路径可以是文件与文件夹,若是文件夹,则文件夹下的文件及子文件夹中的文件都不混淆。

  • 路径仅支持相对路径,./ 与 ../ 为相对于混淆配置文件所在目录,支持使用路径类通配符。

示例:

-keep
./src/main/ets/fileName.ts    // fileName.ts中的名称不混淆
../folder                      // folder目录下文件及子文件夹中的名称都不混淆
../oh_modules/json5           // 引用的三方库 json5 里所有文件中的名称都不混淆
 

注意事项

  • 被 -keep filepath 所保留的文件,其依赖链路上的文件中导出名称及其属性都会被保留。
  • 该功能不影响文件名混淆 -enable-filename-obfuscation 的功能。
  • 如果需要保留特定属性名,则只能通过特定属性名来进行保留。

HarmonyOS 鸿蒙Next在hsp中开启混淆的规则如下:

  1. 确认环境:确保你的DevEco Studio版本支持代码混淆,且你的工程是基于Stage模型,编译模式设置为release。
  2. 配置文件:在hsp模块的build-profile.json5文件中,找到arkOptions下的obfuscation配置,确保enable字段为true。同时,配置好files字段指向的混淆规则文件,如obfuscation-rules.txt
  3. 添加混淆规则:在obfuscation-rules.txt文件中,根据需要添加混淆选项,如-enable-property-obfuscation(开启属性混淆)等。
  4. 编译:在DevEco Studio中选择目标模块,点击Build -> Make Module选项开始编译。编译过程中,代码混淆将按照你配置的规则进行。

请注意,混淆后的代码名称会发生更改,可能会影响运行时crash堆栈日志的理解。如果配置后混淆未生效,请检查是否满足所有条件,如编译模式是否为release等。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部