Что такое обфускация?
Обфускация означает создание нечто сложного для понимания человеком. В коде это означает скрытие функций, имен классов, неявных значений или метаданных, которые использует Ваше приложение для предотвращения взлома и обратной разработки.
В Интернете есть много инструментов и способов для обратного проектирования вашего APK, и злоумышленники могут извлечь из него код. (Естественно, скомпилированные классы и ресурсы, а не весь код Flutter). Чтобы предотвратить это, мы должны замаскировать код Flutter при создании финальной версии нашего приложения.
Как обфусцировать приложение Flutter?
Подобно тому, как в Java есть Proguard, во Flutter есть флаг --obfuscate, который следует использовать вместе с --split-debug-infothat, указывающим каталог, куда Flutter может выводить файлы отладки и карты символов, которые впоследствии могут быть использованы для деобфускации трассировки стека.
flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory>
" - obfuscate" можно использовать только в сочетании с " - split-debug-info"
Что делает флаг 'split debug info'?
При сбоях и ANR (приложение не отвечает) на Android создается трассировка стека, которая представляет собой снимок серии вложенных функций, вызванных в Вашей программе до момента сбоя. Трассировка стека показывает нам имя класса и номер соответствующей строки, чтобы мы могли выявить причину сбоя. Наличие этой информации говорит о том, что приложение содержит всю информацию, необходимую для создания такого StackTrace, который будет занимать много места в памяти при сборке apk.
Флаг --split-debug-info удаляет все данные, необходимые для отображения человекочитаемой трассировки стека, что также значительно уменьшает размер приложения. Вместе с тем эта команда создает некоторые файлы символов, которые впоследствии могут быть использованы для чтения нечитаемого трасс стека.
Чтение трассировки стека обфусцированного приложения
Чтобы отладить трассировку стека, созданную обфусцированным приложением, и сделать ее человекочитаемой, необходимо выполнить следующие действия:
1. Найти файл с соответствующими символами. Например, при сбое на устройстве Android arm64 потребуется app.android-arm64.symbols.
2. Предоставить команде flutter symbolize трассировку стека (хранящуюся в файле) и файл символов. Например:
flutter symbolize -i <stack trace file> -d /out/android/app.android-arm64.symbols```
Поддержка обфускации во Flutter
Ниже приведенный список показывает, какие платформы поддерживают процесс обфускации во Flutter:
Android/iOS/macOS - Поддерживается.
Linux/Windows - Пока не поддерживается.
Web - Обфускация не поддерживается для веб-приложений, но они могут быть минифицированы, что практически одно и то же. Когда Вы создаете финальную версию веб-приложения Flutter, оно автоматически минифицируется.
На этом все. Спасибо, что дочитали до конца! С нетерпением ждем Ваших отзывов. Всем добра.
Переведено с сайта: https://medium.com/flutter-community/flutter-obfuscation-f37644ab4556