Dart代码混淆
Dart代码混淆
代码混淆是修改应用程序的二进制文件以使其更难被人类理解的过程。混淆会在编译后的 Dart 代码中隐藏函数和类名称,将每个符号替换为另一个符号。
Flutter 的代码混淆仅适用于release版本。
请注意,混淆代码不会加密资源,也不会防止逆向工程。它只会重命名名称更晦涩的符号。
支持的target
- aar
- apk
- appbundle
- ios
- ios-framework
- ipa
- linux
- macos
- macos-framework
- windows
Web 应用程序不支持混淆。可以缩小 Web 应用程序,从而提供类似的结果。当构建 Flutter 网络应用程序的发布版本时,网络编译器会缩小该应用程序。
混淆
flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory>
混淆二进制文件后,保存符号文件。如果想要对堆栈跟踪进行去混淆处理,就需要这个符号文件。
在发布模式下使用带有 --obfuscate 和 --split-debug-info 选项的 flutter build 命令。 --split-debug-info 选项指定 Flutter 输出调试文件的目录。 在混淆的情况下,它输出一个符号映射。
--split-debug-info 选项也可以在没有 --obfuscate 的情况下使用,以提取 Dart 程序符号,减少代码大小。
读取混淆的堆栈
找到匹配的符号文件。例如,Android arm64 设备的崩溃需要 app.android-arm64.symbols。
向 flutter symbolize 命令提供堆栈跟踪(存储在文件中)和符号文件。例如:
flutter symbolize -i <stack trace file> -d out/android/app.android-arm64.symbols