How to obfuscate Flutter apps?

Flutter's wiki mentions obfuscation is an opt-in in release mode.
And yet, the flutter build command has no relevant option - see:
flutter help -v build apk

Am I missing something here?
Did they make obfuscation the default?
Is obfuscation even relevant for flutter?

Any pointers on this would be very appreciated.

At the moment obfuscation is not directly exposed via the flutter CLI.

You can try to explicitly pass arguements to the gen_snapshot like this:

flutter build --extra-gen-snapshot-options=--obfuscate,--save-obfuscation-map=build/symbols.json --release


Note: that obfuscation support is not very well tested and might not work at the moment.

Obfuscation is needed - a flutter app knows its function names,
which can be shown using Dart's StackTrace class.

There's under-tested support for obfuscation. To enable it:

For Android:
Add to the file [ProjectRoot]/android/gradle.properties :
extra-gen-snapshot-options=--obfuscate

For iOS:
First, edit [FlutterRoot]/packages/flutter_tools/bin/xcode_backend.sh :
Locate the "build aot" call, and add a flag to it,
${extra_gen_snapshot_options_or_none},
defined as:

local extra_gen_snapshot_options_or_none=""
if [[ -n "$EXTRA_GEN_SNAPSHOT_OPTIONS" ]]; then
extra_gen_snapshot_options_or_none="--extra-gen-snapshot-options=$EXTRA_GEN_SNAPSHOT_OPTIONS"
fi


To apply your changes:
in [FlutterRoot], run git commit -am "Enable obfuscation on iOS",
and then run flutter.

Next, in your project,
add to the file [ProjectRoot]/ios/Flutter/Release.xcconfig :
EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate

*Haven't tried the --save-obfuscation-map flag mentioned at
https://github.com/dart-lang/sdk/issues/30524
*Again, obfuscation isn't very well tested,
as mentioned by @mraleph .

Comments

Popular posts from this blog

Meaning of `{}` for return expression

Get current scroll position of ScrollView in React Native

flutter websocket connection issue