如何为混淆的 Flutter Android 应用程序包提供符号

问题描述 投票:0回答:1

我有一个针对 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”文件夹中创建了三个文件:

  • app.android-arm.symbols
  • app.android-arm64.symbols
  • app.android-x64.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
上传符号。

有人能解释一下这两组符号文件有什么区别,我应该在我的商店提交中使用什么?

android flutter google-play obfuscation
1个回答
0
投票

我一直在研究这些话题,我发现了不同之处。

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

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

当您将

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

因此,当本机代码发生崩溃时,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

© www.soinside.com 2019 - 2024. All rights reserved.