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 ディレクトリに生成されたファイルが表示されます。
より包括的な技術記事については、https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh をご覧ください。