我有一个针对 Android 的 Flutter 应用程序。我曾经使用此命令构建应用程序包:
flutter build appbundle --release
然后我会从
build\app\intermediates\merged_native_libs\release\out\lib
文件夹中压缩并上传本机调试符号。
我正在尝试使用混淆,所以我切换到这个命令:
flutter build appbundle --release --obfuscate --split-debug-info=./build/symbols
这有效,它在我的“build/symbols”文件夹中创建了三个文件:
当我将这三个文件压缩到
symbols.zip
文件并使用 upload native debug symbols
到 Play 商店时,它们被拒绝并出现以下错误:
本机调试符号包含意外文件: app.android-x64.symbols。 app.android-arm64.symbols。 应用程序.android-arm.symbols.
我仍然可以像以前一样从
build\app\intermediates\merged_native_libs\release\out\lib
上传符号。
有人能解释一下这两组符号文件有什么区别,我应该在我的商店提交中使用什么?
我一直在研究这些话题,我发现了不同之处。
Flutter 应用中有两种类型的混淆:
当您将
build\app\intermediates\merged_native_libs\release\out\lib
上传到播放控制台时,它用于对本机库进行反混淆。因此,当本机代码发生崩溃时,Play 控制台将使用这些符号对
Stack-trace
进行反混淆。
现在,另一方面,由 flutter 命令创建的
*.symbols
文件(在您的案例中,build/symbols
文件夹中的文件)是调试符号,用于去混淆 dart 代码。
它们将用于反混淆
Stack-trace
与 dart 代码崩溃相关。你会看到这些崩溃像 Firebase Crashlytics
.
要将这些符号上传到 Firebase,请使用以下命令:
firebase crashlytics:symbols:upload --app=APP_ID PATH/TO/symbols
在你的情况下
PATH/TO/symbols
将是build/symbols