[HarmonyOS] Упаковка запутанных метасервисов и создание файлов сопоставления против запутывания

 Известную «обфускацию» в Android можно разделить на две части, одна часть — это оптимизация и обфускация Java-кода, которая реализуется обфускатором proguard; другая часть — сжатие ресурсов, позволяющее уменьшить размер пакета.

Как правило, когда приложение выпускается, оно выбирает включение обфускации, чтобы предотвратить кражу исходного кода после декомпиляции приложения. При разработке метасервиса HarmonyOS мы также можем улучшить безопасность приложений и размер сжатого пакета, включив обфускацию. Gradle, используемый в проекте метасервиса с низкой версией, используется в качестве инструмента построения.Проект API6 JS используется в качестве примера ниже, а версия с высокой версией временно не будет объясняться.

 

[Включить путаницу]

Включить обфускацию кода в проектах HarmonyOS очень просто, просто установите следующий код в buildTypes в build.gradle на уровне модуля:

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>

 

【Другая проблема】

Когда мы используем запутанную конфигурацию, когда приложение, выпущенное извне, запускается на мобильном телефоне, отчет об аномальной ошибке не будет исходным именем пакета и именем класса, а станет запутанным кодом, таким как abc, и номер строки также изменится. Для студентов, знакомых с разработкой Android, все должны были подумать об использовании файла mapping.txt для восстановления запутанного кода.Студенты, которые не понимают, могут прочитать следующий документ: Android использует proguardgui.bat для восстановления запутанного кода - Zhihu ( zhihu .com)

Файл mapping.txt в Android будет находиться в модуле /outputs/mapping/release/mapping.txt, но мы не можем найти map.txt в каталоге проекта DevEco Studio тем же способом, почему?

 

【Ищите map.txt】

Причина этой проблемы в том, что R8, используемый в Android, заменяет Proguard  , поэтому файл mapping.txt можно сгенерировать напрямую без дополнительной настройки. Proguard используется в HarmonyOS, для Proguard нам нужно настроить следующий код в proguard-rules.pro для создания файла mapping.txt.

printmapping mapping.txt

В дополнение к printmapping есть следующие часто используемые команды конфигурации для справки.

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

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

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

Наконец, после того как мы сгенерируем HAP с помощью Build HAP, мы сможем увидеть сгенерированные файлы в каталоге /entry/build/intermediates/proguard_profile/release.

cke_5467.png

 

 

 Более подробные технические статьи можно найти на странице https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh.

{{о.имя}}
{{м.имя}}

рекомендация

отmy.oschina.net/u/4478396/blog/8806578