目录

混淆加固

DevEco Studio原先默认开启源码混淆功能,会对API 10及以上的Stage工程,且编译模式是release时,自动进行简单的源码混淆,仅对参数名和局部变量名进行混淆。

从DevEco Studio NEXT Developer Beta3(5.0.3.600)版本开始,新建工程及模块默认关闭源码混淆功能,如果在模块级build-profile.json5配置文件中开启源码混淆,则混淆规则配置文件obfuscation-rules.txt中默认开启推荐的混淆规则,包含-enable-property-obfuscation、-enable-toplevel-obfuscation、-enable-filename-obfuscation、-enable-export-obfuscation四个混淆选项,开发者可进一步在obfuscation-rules.txt文件中选择开启的混淆选项,关于混淆选项的介绍请查看ArkGuard混淆配置选项。

使用约束

字段说明

可在模块级build-profile.json5文件中进行源码混淆相关配置。obfuscation字段说明如下:

配置项

类型

是否必填

说明

ruleOptions

对象

否

混淆规则配置。

  

enable

布尔值

是

是否启用源码混淆:

  • true:启用。
  • false(默认值):不启用。
说明:

从DevEco Studio NEXT Developer Beta3(5.0.3.600)版本开始,默认值由true改为false。

files

字符串数组

否

配置混淆规则文件的相对路径,默认使用obfuscation-rules.txt文件。文件中配置的混淆规则仅在本模块编译时生效(包含依赖代码)。

说明:
  • 规则文件中支持配置所有混淆规则,包括混淆选项和保留选项。
  • 支持配置多个文件,文件名称支持自定义,当存在多个混淆规则文件时,规则合并以及合并后的作用范围可参考混淆规则合并策略。

consumerFiles

字符串/字符串数组

否

仅HAR/HSP模块可配置,配置传递给集成方的混淆规则文件的相对路径,支持配置多个文件,文件名称支持自定义。

说明:
  • 为保证HAR/HSP模块可被正确集成使用,若有不希望被集成方混淆的内容,建议在规则文件中配置对应的保留选项,例如HAR/HSP模块中导出的变量或函数。
  • 规则文件中配置的混淆选项会与集成方的混淆规则进行合并,进而影响集成方的编译混淆,因此,建议仅配置保留选项。
  • 从DevEco Studio 5.1.0 Release版本开始支持在HSP模块中配置该字段。

使能混淆

为保护代码资产,建议开启混淆,您可以在模块级的build-profile.json5配置文件中开启源码混淆功能:

"arkOptions": {
  "obfuscation": {
    "ruleOptions": {
      "enable": true  // 配置true,即可开启源码混淆功能
    }
  }
}

从DevEco Studio NEXT Developer Beta3(5.0.3.600)版本开始,开启混淆后,混淆规则配置文件obfuscation-rules.txt中默认开启推荐的混淆规则,包含-enable-property-obfuscation、-enable-toplevel-obfuscation、-enable-filename-obfuscation、-enable-export-obfuscation四项混淆项。

使用release模式编译发布时,建议开启混淆,需要正确配置混淆规则,否则可能会有运行时问题。

使能高阶混淆

在开启混淆后,若您需要更高阶的混淆能力,可以通过以下操作配置高阶混淆规则。

[h2]配置所有混淆规则

  1. 打开模块级build-profile.json5文件,在"files"字段下配置混淆规则文件的相对路径,支持配置多个文件,默认为./obfuscation-rules.txt。
    {
      "apiType": "stageMode",
      "buildOptionSet": [
        {
          "name": "release",
          "arkOptions": {
            "obfuscation": {
              "ruleOptions": {
                "enable": true,
                "files": [
                  "./obfuscation-rules.txt"  // 混淆规则文件
                ]
              }
            }
          }
        },
      ],
    }
  2. 打开模块目录内的obfuscation-rules.txt文件配置混淆规则,具体请参考混淆选项,对于不需要混淆的内容,请配置保留选项。

    当存在多个混淆规则文件时,规则合并以及合并后的作用范围可参考混淆规则合并策略。

[h2]HAR/HSP配置保留选项

为保证HAR/HSP模块可被正确集成使用,若有不希望被集成方混淆的内容,建议在规则文件中配置对应的保留选项,例如HAR/HSP模块中导出的变量或函数。

  1. 打开模块级build-profile.json5文件,在"consumerFiles"字段下配置传递给集成方的混淆规则文件的相对路径,支持配置多个文件,默认为./consumer-rules.txt,对应编译后HAR包中的obfuscation.txt文件。
    {
      "apiType": "stageMode",
      "buildOptionSet": [
        {
          "name": "release",
          "arkOptions": {
            "obfuscation": {
              "ruleOptions": {
                "enable": true,
                "files": [
                  "./obfuscation-rules.txt"   
                ]
              },
              "consumerFiles": [              // 该模块被依赖时的混淆规则
                "./consumer-rules.txt"   
              ]
            }
          }
        },
      ],
    }
  2. 打开模块目录内的consumer-rules.txt文件配置保留选项。

    当存在多个混淆规则文件时,规则合并以及合并后的作用范围可参考混淆规则合并策略。

通过混淆助手配置保留选项

开启混淆后,代码中的方法、属性或路径被混淆,但运行的时候访问的是未混淆的方法、属性或路径,可能导致功能不可用,因此需要将对应的字段配置保留选项。关于保留选项的排查场景及配置方式请参考保留选项。

需要排查的场景和配置的字段有很多,因此DevEco Studio提供了混淆助手工具(ObfuscationHelper),可以根据模块和场景对源码进行扫描,快速识别需要配置的保留选项和白名单字段,开发者可以一键生成白名单混淆规则文件。由于某些场景是动态访问名称、属性,需要在运行的时候才能确定的字段,ObfuscationHelper会识别该类场景,开发者需要根据业务进一步排查识别白名单后进行配置。

[h2]扫描代码

  1. 通过以下任意一种方式打开ObfuscationHelper:
    • 点击菜单栏Tools > ObfuscationHelper。
    • 在模块目录上点击鼠标右键,在弹出的菜单中选择ObfuscationHelper。

  2. 点击模块下拉选择框,选择待扫描的模块。
  3. 如果模块之前被扫描过,并且生成了排查白名单,则会生成相应的历史记录。选择对应的历史记录,在本次扫描完成后,会自动关联历史的排查记录,历史已经排查过的白名单字段无需再重复排查。

    从DevEco Studio 6.0.0 Beta1开始支持关联历史记录。

  4. 根据涉及的混淆场景,选择一个或多个扫描任务,点击开始扫描。关于扫描任务的介绍请参考扫描任务。

  5. 等待扫描成功后,进入推荐白名单和待排查白名单配置页面。在扫描的过程中,也可以点击停止扫描按钮,结束扫描。

[h2]配置推荐白名单

在推荐白名单配置页面,可以查看扫描出来的推荐配置的保留选项和白名单字段,并一键生成白名单混淆规则文件。

[h2]配置待排查白名单

在待排查白名单配置页面,可以查看扫描出来的关键代码,需要开发者根据业务进一步排查,识别白名单字段并配置到文件中。

[h2]查看历史记录

点击生成推荐白名单或者待排查白名单后,会生成一条历史记录,方便开发者后续查看和继续排查白名单。

在ObfuscationHelper的首页,点击底部的历史记录按钮,可查看所有的历史记录。

[h2]扫描任务

以下是ObfuscationHelper的扫描任务。

属性混淆

顶层作用域名称混淆

文件名名称混淆

导入/导出名称混淆