如何为模糊的 Flutter Android 应用程序包提供符号

und*_*der 6 obfuscation android google-play flutter

我有一个针对 Android 的 Flutter 应用程序。我曾经使用以下命令构建应用程序包:

flutter build appbundle --release 
Run Code Online (Sandbox Code Playgroud)

然后,我会从文件夹中压缩并上传本机调试符号build\app\intermediates\merged_native_libs\release\out\lib

我正在尝试使用混淆,因此我已切换到以下命令:

flutter build appbundle --release --obfuscate --split-debug-info=./build/symbols
Run Code Online (Sandbox Code Playgroud)

这有效,它在我的“build/symbols”文件夹中创建了三个文件:

  • 应用程序.android-arm.符号
  • 应用程序.android-arm64.符号
  • app.android-x64.符号

当我将这三个文件压缩成symbols.zip文件并用于upload native debug symbolsPlay 商店时,它们被拒绝并出现以下错误:

本机调试符号包含意外文件:app.android-x64.symbols。应用程序.android-arm64.符号。app.android-arm.symbols。

我仍然可以build\app\intermediates\merged_native_libs\release\out\lib像以前一样上传符号。

有人可以解释一下这两组符号文件之间有什么区别以及我应该在商店提交中使用什么?

小智 5

我一直在研究这些主题,并且发现了其中的区别。

Flutter 应用程序中有两种类型的混淆:

  1. 原生库(java、kotlin 等)代码
  2. dart 库(所有 dart 代码)

当您上传build\app\intermediates\merged_native_libs\release\out\lib到播放控制台时,它用于对本机库进行反混淆。
该 zip 也称为本机调试符号。

Stack-trace因此,当本机代码发生崩溃时, Play 控制台将使用这些符号来反混淆。

另一方面,*.symbols由 flutter 命令创建的文件(在您的情况下是build/symbols文件夹中的文件)是调试符号,用于反混淆 dart 代码。

它们将用于反混淆Stack-trace与 dart 代码崩溃相关的内容。您会在类似的内容中看到这些崩溃Firebase Crashlytics

要将这些符号上传到 Firebase,请使用以下命令:

firebase crashlytics:symbols:upload --app=APP_ID PATH/TO/symbols
Run Code Online (Sandbox Code Playgroud)

在你的情况下PATH/TO/symbols将会是build/symbols