【HarmonyOS】元服务混淆打包以及反混淆mapping文件生成

news/2024/7/21 8:57:48 标签: harmonyos, 华为

 大家所知的Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,从而可以减少包体积。

一般应用release发布的时候都会选择开启混淆,防止应用被反编译后窃取源码。在HarmonyOS元服务开发中,我们也可以通过开启混淆提高应用的安全性和压缩包体积。元服务低版本工程中使用的gradle作为构建工具,下文以API6 JS工程为例,高版本暂时不做相关说明。

【开启混淆】

在HarmonyOS工程开启代码混淆很简单,只需要在模块级的build.gradle中的buildTypes中设置以下代码就可以了:

buildTypes {
    release {
    proguardOpt {
        proguardEnabled true    //开启代码混淆功能              
            rulesFiles 'proguard-rules.pro'    // 配置混淆规则文件相对路径              
            consumerRulesFiles 'consumer-rules.pro'    // 配置打包混淆规则文件相对路径,仅在HarmonyOS Library模块中配置
        }
    }
}

混淆会通过缩短应用的类、方法和字段的名称来缩减应用的大小。混淆后代码大概如下图中所示:

com.example.atomictest.widget.controller.FormControllerManager -> com.example.atomictest.a.a.b:
    ohos.hiviewdfx.HiLogLabel TAG -> a
    com.example.atomictest.widget.controller.FormControllerManager managerInstance -> b
    java.util.HashMap controllerHashMap -> c
    ohos.app.Context context -> d
    ohos.data.preferences.Preferences preferences -> e
    void <init>(ohos.app.Context) -> <init>
    com.example.atomictest.widget.controller.FormControllerManager getInstance(ohos.app.Context) -> a
    com.example.atomictest.widget.controller.FormController createFormController(long,java.lang.String,int) -> a
    com.example.atomictest.widget.controller.FormController getController(long) -> a
    com.example.atomictest.widget.controller.FormController newInstance(java.lang.String,int,ohos.app.Context) -> a
    void deleteFormController(long) -> b
    java.lang.String getClassNameByFormName(java.lang.String) -> a
    void <clinit>() -> <clinit>

【另一个问题】

当我们使用混淆配置后,对外发布的应用运行在手机上时,发生异常的报错也不会是原来的包名和类名,都会变成a.b.c这种混淆后代码,行号也会发生变化。对于熟悉Android开发的同学,大家一定想到了使用mapping.txt文件来还原混淆后的代码,不了解的同学可以看下面这个文档:Android 利用 proguardgui.bat 还原混淆代码 - 知乎 (zhihu.com)

Android中的mapping.txt 文件会在 模块/outputs/mapping/release/mapping.txt 中,但是通过相同的方法我们在DevEco Studio工程目录下是找不到mapping.txt,这是为什么呢?

【寻找mapping.txt】

造成这个问题的原因是Android中使用的R8代替了Proguard ,因此不需要增加额外的配置就可以直接生成mapping.txt文件。HarmonyOS中使用的Proguard,针对Proguard,我们需要在proguard-rules.pro配置以下代码才可以生成mapping.txt

printmapping mapping.txt

除了printmapping以外,还有以下常用的配置命令,提供给大家参考

# 包内所有 class 的内部结构
-dump dump.txt

# 没有被混淆的类和成员
-printseeds seeds.txt

# 被移除的代码
-printusage usage.txt

最后在我们通过Build HAP,生成HAP,就可以在/entry/build/intermediates/proguard_profile/release目录下看到生成的这些文件了。

cke_5467.png

 欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh 


http://www.niftyadmin.cn/n/335443.html

相关文章

RabbitMQ 运维备忘录(一)

文章目录 1. 基础信息参考一些官方的链接单节点安装 RabbitMQ开启 web 端管理界面 2. 一些基本操作应用管理服务端口开放信息用户管理虚拟主机 vhost 管理web 界面管理队列信息查询交换器信息查询绑定关系的信息查询TCP/IP 连接信息查询信道信息查询消费者信息查询服务状态查询…

【Linux】信号概述

目录 1、信号概念2、Linux常用信号表3、信号的5种默认处理动作 橙色 1、信号概念 信号是 Linux进程间通信的最古老的方式之一&#xff0c;是事件发生时对进程的通知机制&#xff0c;有时也称之为软件中断&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种…

重塑职业未来:在竞争激烈的职场上脱颖而出的关键策略

在竞争激烈的职场上&#xff0c;各种职场难题时常出现&#xff0c;如何进行有效沟通、如何应对工作压力、如何提升职业能力等&#xff0c;这都是需要去克服的问题。下面分享一下职场老人的经验&#xff01; 一、你遇到过哪些职场问题&#xff1f;分享一下你是怎么解决的呢&…

前端三剑客

一.前端是什么&#xff1a; 前端主要是考虑怎样能让用户觉得用起来更舒服&#xff0c;考虑界面布局、交互效果、页面加载速度等等&#xff0c;主要是偏向用户看得见的部分&#xff0c;客户端&#xff08;pc、手机、pad&#xff09;上浏览web。网站的“前端”是与用户直接交互的…

win11亮度条消失解决方法之一

一、前言 1、本人电脑情况&#xff1a;联想小新Pro16&#xff0c;win11家庭版 2、联想技术工程师三种方式联系方式&#xff08;需提供电脑背后的编号&#xff09;&#xff1a; 1&#xff09; 通过预装的联想电脑管家&#xff0c;获取在线人工专家支持&#xff08;管家链接 h…

【历史上的今天】5 月 18 日:微软反垄断诉讼;携程旅行网上线;谷歌首次公布 TPU

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 18 日&#xff0c;在 1939 年的今天&#xff0c;彼得格伦伯格&#xff08;Peter Grunberg&#xff09;出生。格伦伯格是一名德国物理学家&#xff0c;是诺…

论文中文翻译——Double-Fetch情况如何演变为Double-Fetch漏洞:Linux内核中的双重获取研究

本论文相关内容 论文下载地址——Web Of Science论文中文翻译——How Double-Fetch Situations turn into Double-Fetch Vulnerabilities A Study of Double Fetches in the Linux Kernel 文章目录 本论文相关内容前言Double-Fetch情况如何演变为Double-Fetch漏洞&#xff1a;…

Higg网站已改名为Worldly

【Higg网站已改名为Worldly】 最近&#xff0c;相信有不少工厂朋友在登录Higg 网站上出现类似的困惑&#xff1a; Higg 网站名字不同了&#xff0c;出现Worldly字眼 无法一键登录 收到邮件通知说相关的数据已经被删除 Higg 网站更名 Higg网站已改名为Worldly&#xff0c;网址变…