HarmonyOS 鸿蒙Next 疑惑,目前IDE打包release是不是存在混淆导致的严重问题

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

HarmonyOS 鸿蒙Next 疑惑,目前IDE打包release是不是存在混淆导致的严重问题

先说发现的问题,默认打包release开启了代码混淆,会导致一个严重的问题,并且在模拟器上无法调试发现。临时解决办法,关闭代码混淆

事情如下,受激励金诱惑,想开发一个元服务,舍不得买真机,于是一路模拟器摸索着开发,中间踩了非常多的坑,让我不得不吐糟一下,目前鸿蒙开发环境对开发者不友好,还有很多成长空间。
受模拟器与真机区别限制太多,砍了大部分功能,调试开发完成打包上架,被审核驳回两次,原因都是功能无法使用。但模拟器调试又无法复现,而release无法调试,不过好在可以运行,通过一路打印日志,发现这么一个问题。

1. 首先我定义一个类如下
```typescript
export class PlayItem {
  id:number=0
  name: string = ""
  short_path: string = ""
  full_path: string = ""
  ossurl: string = ""
  play: boolean = false
}
  1. 请求后台返回对象,并打印
let httpRequest = http.createHttp();
httpRequest.request ....省略get请求
 ...
    let item=res.result as PlayItem
 
    console.log("debug3==item=="+json.stringify(item))
    console.log("debug3 id "+item.id)
    console.log("debug3 ossurl "+item.ossurl)
    console.log("debug3 full_path "+item.full_path)
    console.log("debug3 short_path "+item.short_path)
    console.log("debug3 name "+item.name)
  1. 在模拟器/预览器debug调试,均正常返回,打印日志如下
debug3==item=={"full_path":"airdry.m4a","id":1,"name":"吹风机(止哭效果非常好)","ossurl":"airdry.m4a","short_path":"airdry.m4a","type":"1"}
debug3 id 1
debug3 ossurl https://data.kuizii.com/audio/airdry.m4a
debug3 full_path airdry.m4a
debug3 short_path airdry.m4a
debug3 name 吹风机(止哭效果非常好)
  1. 然而经过release运行过后,日志输出变成如下
debug3==item=={"full_path":"airdry.m4a","id":1,"name":"吹风机(止哭效果非常好)","ossurl":"airdry.m4a","short_path":"airdry.m4a","type":"1"}
debug3 id 1
debug3 ossurl undefined
debug3 full_path undefined
debug3 short_path undefined
debug3 name 吹风机(止哭效果非常好)

可以发现,id,name都还是正常打印,而其它属性取不到值了.这大无语事件

通过各种排查,查文档,论坛,最终在开发者群里经人提醒可能是默认release代码混淆开启导致,我查了下官方文档也没提到会对动态返回的对象有影响啊,可是经过我关闭混淆之后,一下就成功了。 这…我感觉是个非常严重的Bug啊。大家觉得呢?

附上关闭混淆,在对应模块的build-profile.json5文件中,找到obfuscation.ruleOptions.enable并设置为false

  "buildOptionSet": [
    {
      "name": "release",
      "arkOptions": {
        "obfuscation": {
          "ruleOptions": {
            "enable": false,
            "files": [
              "./obfuscation-rules.txt"
            ]
          }
        }
      }
    }
  ],

更多关于HarmonyOS 鸿蒙Next 疑惑,目前IDE打包release是不是存在混淆导致的严重问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

感谢您的发帖。

网络请求的返回数据,debug包正常, release包把token返回搞没了,但是其他字段正常。 很难排查。

谁能想到代码混淆能造成这样的影响。

更多关于HarmonyOS 鸿蒙Next 疑惑,目前IDE打包release是不是存在混淆导致的严重问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者您好

在5.0.3.600及以上DevEco Studio版本,创建的工程默认混淆是关闭的,且混淆配置仅适用于release构建模式,所以在debug模式构建不会触发混淆相关的问题。(参考文档:代码混淆

所以工程可能是在5.0.3.600之前的DevEco Studio创建,混淆字段默认配置为开启。

混淆导致类获取的http请求值异常这个问题,从代码看不出具体问题,建议提一个工单,附上可以复现的demo工程(主要体现obfuscation-rules.txt配置文件中含有哪些混淆配置项)

在线提单链接

在HarmonyOS鸿蒙Next的开发环境中,IDE(集成开发环境)在打包release版本时,确实会进行代码混淆处理以提高应用的安全性。代码混淆是一种通过改变代码中的类、方法、变量名等标识符来使代码难以被反编译和理解的技术。然而,这通常不会导致严重的功能问题,因为混淆过程主要是改变标识符的名称,而不改变代码的逻辑。

如果在release版本中遇到了由混淆导致的严重问题,这可能是由于以下几个原因:

  1. 混淆配置不当:检查混淆配置文件(如proguard规则文件),确保关键类和成员被正确保留。
  2. 第三方库兼容性:某些第三方库可能不兼容混淆处理,需要在混淆配置中排除这些库。
  3. 代码本身的问题:代码可能存在某些依赖于特定标识符名称的逻辑,这些逻辑在混淆后失效。

为了解决这些问题,可以重新检查并调整混淆配置,确保所有必要的类和成员都被正确保留。同时,也可以尝试使用IDE提供的调试工具来定位问题的具体原因。

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

回到顶部