Обфускация - процесс преобразования кода, чтобы он перестал быть понятным для человека, но его работоспособность не изменилась.
Как обфусцировать сборку?
Делать это, разумеется, необходимо при сборке для публикации. Например, мы собираем Android App Bundle:
flutter build appbundle --obfuscate --split-debug-info=/symbols
Параметр
obfuscate запускает саму обфускацию, а уже split-debug-info выдает специальные файлы, которые помогут расшифровать информацию. Для этого мы указываем директорию, куда их нужно сложить.Как расшифровать Stack Trace?
Для расшифровки также существует команда, в которую нужно будет передать файл Stack Trace и файл для расшифровки.
flutter symbolize \
-i <stack-trace-file> \
-d <obfuscated-symbols-file>
Сам файл расшифровки нужен для нужной нам архитектуры. Например, для Android на arm64 нужен будет файл
app.android-arm64.symbols.Добавляем файл в Crashlytics
Если мы используем Firebase Crashlytcs или любую подобную систему, то и там мы будем видеть нерасшифрованный Stack Trace. Чтобы этого не случалось, нужно выполнить команду для загрузки символов. Для Firebase она такая:
firebase crashlytics:symbols:upload --app=<firebase-app-id> <path-to-symbols>/symbols
Учтите, что Firebase App ID должен еще и соответствовать платформе - отдельно для Android, отдельно для iOS.
Если вы уже автоматически отправляете dSYM файлы для iOS в Crashlytics, то вам ничего не нужно делать, так как символы уже будут загружены.
Делитесь в комментариях, используете ли обфускацию на проектах?
