HarmonyOS共享模块HAR的代码混淆问题

共享模块ThirdLibrary。obfuscation-rules.txt的配置:

-enable-toplevel-obfuscation 
  -enable-export-obfuscation 
  -enable-property-obfuscation 
  -enable-string-property-obfuscation 
  -enable-filename-obfuscation 
  -compact 
  -remove-log 
  -remove-comments 
consumer-rules.txt 
  -keep-file-name 
ThirdPage

build的har包发现./src/main/ets/pages/ThirdPage被混淆成了./src/main/ets/a/ThirdPage。因为要在其他模块配置路由跳转时进行模块导入,如:

import('ThirdLibrary/src/main/ets/pages/ThirdPage');

所以希望保持路径为src/main/ets/pages/ThirdPage不被混淆。该如何实现呢?

HarmonyOS
2024-08-27 14:35:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

可以考虑废弃router,将界面跳转功能替换到Navigation上,对应链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#navpathstack10

Router适用于模块间与模块内页面切换,通过每个页面的url实现模块间解耦。模块内页面跳转时,为了实现更好的转场动效场景不建议使用该模块,推荐使用Navigation。Navigation主要有两个优势:

1、界面跳转不许要将目标界面单独import路径;

2、Navigation支持传递参数未原型参数给二级界面,二级界面返回时可以收到callback回调。

这里贴下简单的demo示例:备注:目前版本上已支持 通过 -keep-file-name 配置 文件或文件夹不被混淆。不过这边在不混淆的情况下测试router依旧不能跳转。如果使用natigation做页面跳转可以参考如下方式:

import { Second } from './Second'; 
@Entry 
@Component 
struct Index { 
  @Provide('pathInfos') pathInfos: NavPathStack = new NavPathStack(); 
  // Navigation的navDestination属性方法设置的构造函数,在路由栈变化时触发该构建数创建新的路由页面 
  @Builder 
  PageMap(name: string, paramsInfo: Uint8Array) { 
    Second({ params: paramsInfo }) 
  } 
  build() { 
    Navigation(this.pathInfos) { 
      Row() { 
        Column() { 
          Text('Index Page') 
          Divider().strokeWidth(2).backgroundColor('red').margin(20) 
          Button('Goto Second') 
            .onClick(() => { 
              let params = new Uint8Array([0, 1]); 
              console.info('pushPathByName: ' + JSON.stringify(params)) 
              this.pathInfos.pushPathByName('Second', params, (data: PopInfo) => { 
                console.info('data: ' + JSON.stringify(data.result)) // 这里获取到界面Pop回调结果 
              }) 
            }) 
          Divider().strokeWidth(2).backgroundColor('red').margin(20) 
        } 
        .width('100%') 
      } 
      .height('100%') 
    } 
    .navDestination(this.PageMap) 
    .width('100%') 
    .mode(NavigationMode.Auto) 
    .title('设置') // 设置标题文字 
  } 
} 
@Entry 
@Component 
export struct Second { 
  @Consume('pathInfos') pathInfos?: NavPathStack; 
  @State message: string = 'Hello World'; 
  private params?: Uint8Array; 
  build() { 
    NavDestination() { 
      Row() { 
        Column() { 
          Text('Second Page') 
        } 
        .width('100%') 
      } 
      .height('100%') 
    }.title('Second') 
    // 这里需要注意,由于组件内嵌容器,所以不会回调 onPageShow 和 onPageHide,在这里挂载一个回调即可 
    .onShown(() => this.doPageShow()) 
    .onHidden(() => this.doPageHide()) 
    .onBackPressed(() => { 
      this.pathInfos?.pop(new Uint8Array([0, 2])); // 构造参数回传给上一个界面 
      return true; 
    }) 
  } 
  aboutToAppear(): void { 
    console.log('aboutToAppear'); 
  } 
  doPageShow(): void { 
    console.log('onPageShow'); 
    console.log('0088 外层 uint8Arr', JSON.stringify(this.params)); 
    // uint8Arr 原型链被修改 
    if (this.params) { 
      console.log('0088 内层 uint8Arr', typeof this.params, this.params instanceof Uint8Array, this.params.length) 
    } 
  } 
  doPageHide(): void { 
    console.log('onPageHide'); 
  } 
  aboutToDisappear(): void { 
    console.log('aboutToDisappear'); 
  } 
}
分享
微博
QQ
微信
回复
2024-08-27 19:05:25
相关问题
编译har,如何混淆混淆如何使用
788浏览 • 1回复 待解决
HarmonyOS如何做代码混淆
149浏览 • 1回复 待解决
HarmonyOS 静态har混淆配置参考
165浏览 • 1回复 待解决
HarmonyOS NAPI调用HAR模块失败
58浏览 • 1回复 待解决
如何判断har是否被混淆了?
517浏览 • 1回复 待解决
HarmonyOS 有关共享问题
143浏览 • 1回复 待解决
HarmonyOS关于混淆强度相关问题
173浏览 • 1回复 待解决
打包怎么对代码进行混淆
6147浏览 • 1回复 待解决
HarmonyOS entry模块声明问题
111浏览 • 1回复 待解决
HarmonyOS fs模块读取文件问题
110浏览 • 1回复 待解决
HarmonyOS har包依赖问题
192浏览 • 1回复 待解决
业务模块HAR如何获取宿主HAP数据
1711浏览 • 1回复 待解决
HarmonyOS HAR publish时需要密码问题
366浏览 • 1回复 待解决
HarmonyOS 代码转化问题
175浏览 • 1回复 待解决
HarmonyOS @Expend跨模块使用问题
125浏览 • 1回复 待解决
HarmonyOS har包生成问题
874浏览 • 1回复 待解决