[HarmonyOS] メタサービス難読化パッケージ化と難読化対策マッピング ファイルの生成

 Android のよく知られた「難読化」は 2 つの部分に分けることができ、1 つは proguard obfuscator によって実現される Java コードの最適化と難読化であり、もう 1 つはパッケージ サイズを削減できるリソース圧縮です。

一般に、アプリケーションがリリースされると、アプリケーションが逆コンパイルされた後にソース コードが盗まれるのを防ぐために、難読化を有効にすることが選択されます。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>

 

【別の問題】

難読化構成を使用すると、外部に公開したアプリケーションを携帯電話上で実行すると、異常エラーレポートが元のパッケージ名やクラス名ではなく、abcのような難読化されたコードになり、行番号も変わります。Android 開発に精通している学生であれば、誰でも、mapping.txt ファイルを使用して難読化されたコードを復元することを考えたことがあるはずです。理解できない学生は、次のドキュメントを読んでください: Android は、難読化されたコードを復元するために proguardgui.bat を使用します - Zhihu (zhihu ) .com)

Android のmapping.txt ファイルはモジュール /outputs/mapping/release/mapping.txt にありますが、同じ方法で DevEco Studio プロジェクト ディレクトリに Mapping.txt が見つかりません。なぜですか?

 

【mapping.txtを探してください】

この問題の理由は、Android で使用されている R8 が Proguard に置き換わる ため、追加の構成を行わなくても、mapping.txt ファイルを直接生成できるためです。HarmonyOS で使用される Proguard、Proguard の場合、mapping.txt を生成するには、proguard-rules.pro で次のコードを構成する必要があります。

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 をご覧ください。

{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4478396/blog/8806578