当前位置:   article > 正文

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

android mapping文件

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

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

【开启混淆】

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

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

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

  1. com.example.atomictest.widget.controller.FormControllerManager -> com.example.atomictest.a.a.b:
  2. ohos.hiviewdfx.HiLogLabel TAG -> a
  3. com.example.atomictest.widget.controller.FormControllerManager managerInstance -> b
  4. java.util.HashMap controllerHashMap -> c
  5. ohos.app.Context context -> d
  6. ohos.data.preferences.Preferences preferences -> e
  7. void <init>(ohos.app.Context) -> <init>
  8. com.example.atomictest.widget.controller.FormControllerManager getInstance(ohos.app.Context) -> a
  9. com.example.atomictest.widget.controller.FormController createFormController(long,java.lang.String,int) -> a
  10. com.example.atomictest.widget.controller.FormController getController(long) -> a
  11. com.example.atomictest.widget.controller.FormController newInstance(java.lang.String,int,ohos.app.Context) -> a
  12. void deleteFormController(long) -> b
  13. java.lang.String getClassNameByFormName(java.lang.String) -> a
  14. 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以外,还有以下常用的配置命令,提供给大家参考

  1. # 包内所有 class 的内部结构
  2. -dump dump.txt
  3. # 没有被混淆的类和成员
  4. -printseeds seeds.txt
  5. # 被移除的代码
  6. -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 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/31400
推荐阅读
相关标签
  

闽ICP备14008679号