發表日期:2018-08 文章編輯:小燈 瀏覽次數:2986
??原文鏈接:https://github.com/flutter/flutter/wiki/Obfuscating-Dart-Code
??以下內容均來自Flutter Github官方Wiki。
??代碼混淆可以隱藏你的Dart代碼中的函數和類名,讓反編譯App變得困難。
??注:Dart的混淆還沒有經過完全的測試,如果發現問題請到GitHub上提 issue 。關于混淆的問題,還可以參考 Stack Overflow 上的這個問題。
??Flutter中的混淆配置其實是在Android和iOS端分別配置的。
??在<ProjectRoot>/android/gradle.properties
文件中添加如下代碼:
extra-gen-snapshot-options=--obfuscate
??默認情況下,Flutter不會混淆或者縮減Android host,如果你使用了第三方的Java或者Android庫,那么你可能需要減小APK體積,或者防止你的App被反編譯。
/android/app/proguard-rules.pro
文件,然后添加如下配置:#Flutter Wrapper -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.**{ *; } -keep class io.flutter.util.**{ *; } -keep class io.flutter.view.**{ *; } -keep class io.flutter.**{ *; } -keep class io.flutter.plugins.**{ *; }
上面的配置只保護Flutter庫,其他額外的庫(比如Firebase)需要你自己添加配置。
/android/app/build.gradle
文件,定位到buildTypes
處,在release
配置中將minifiyEnabled
和useProguard
標志設為true,同時還需要指向Step1中創建的ProGuard文件:android {...buildTypes {release {signingConfig signingConfigs.debugminifyEnabled true useProguard trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'} } }
注意混淆和縮減無用代碼會加長App的編譯時間。
<ProjectRoot>/packages/flutter_tools/bin/xcode_backend.sh
文件中添加build aot
flag:${extra_gen_snapshot_options_or_none}
然后定義這個flag:
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
git commit -am "Enable obfuscation on iOS" flutter
<ProjectRoot>/ios/Flutter/Release.xcconfig
中添加下面這行:EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate