总结:打包时增加一个--obfuscate 字段就行,flutter在打包时会根据android和iOS的配置自动进行代码混淆
打包命令
--obfuscate
启用代码混淆--split-debug-info=./build
是将调试信息(生成的符号映射文件)放到build下--release
构建release版本
shell
flutter build apk --release --obfuscate --split-debug-info=./build
shell
flutter build ipa --release --obfuscate --split-debug-info=./build
android配置
android/app/build.gradle
- 在
release
中新增混淆规则 minifyEnabled
: 是否开启了代码混淆功能,会对应用程序的代码进行优化和缩减,以减小 APK 的大小并提高安全性shrinkResources
:是否删除未使用的资源文件proguardFiles
:配置混合规则proguard-android-optimize.txt
是 Android SDK(proguard)提供的一个默认配置文件,还有一个常用的配置文件是:proguard-android.txt
proguard-android-optimize.txt
启用更多的优化策略,减少 APK 大小并进行代码优化。proguard-android.txt
只是基本的混淆和压缩功能,不需要额外的优化。
kotlin
buildTypes {
release {
....
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug{
....
}
}
- 新增混淆配置文件
proguard-rules.pro
ignorewarnings
:该规则会忽略任何警告信息。即使ProGuard/R8在混淆过程中发现一些潜在问题或警告,也不会阻止构建过程。-keep class
保持某些包或类不被混淆
kotlin
# Flutter Obfuscation
-ignorewarnings
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.embedding.** { *; }
-keep class io.flutter.embedding.engine.** { *; }
-keep class io.flutter.embedding.android.** { *; }
-keep class io.flutter.embedding.engine.plugins.** { *; }
-keep class io.flutter.plugin.common.** { *; }
-keep class io.flutter.plugin.platform.** { *; }
- 上传调试文件(可选)
- google play上架使用,否则会有警告:此 App Bundle 包含原生代码,您尚未上传调试符号文件
arduino
defaultConfig {
...
ndk {
debugSymbolLevel 'SYMBOL_TABLE'
}
....
}
iOS配置
Xcode
打开代码,OTHER_SWIFT_FLAGS
增加-D DART_OBFUSCATION
宏