Ehu*_*unu 9 deployment obfuscation flutter
Flutter的Wiki提到混淆是发布模式的一种选择。
但是,flutter build命令没有相关选项-请参阅:
flutter help -v build apk
我在这里想念什么吗?
他们是否将混淆设置为默认设置?
混淆甚至与颤动有关吗?
任何对此的指针将不胜感激。
jit*_*555 15
上面所有的答案都是正确的,但是没有答案告诉你我们需要在生成build.gradle文件时添加相对路径或目录路径。
使用相对路径的示例:
flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug
Run Code Online (Sandbox Code Playgroud)
使用文件夹路径的示例:
flutter build apk --obfuscate --split-debug-info=/Users/apple/Desktop/items/debug
Run Code Online (Sandbox Code Playgroud)
上面的命令将在给定的项目目录中生成一个构建,它将ProjectFolderName在相应的命令上创建一个名为“debug”的新文件夹,您可以在其中找到发布构建。
Cop*_*oad 12
对于 AppBundle:
不拆分:
flutter build appbundle --obfuscate --split-debug-info=/<directory>
Run Code Online (Sandbox Code Playgroud)
带分裂:
flutter build appbundle --target-platform android-arm,android-arm64,android-x64 --obfuscate --split-debug-info=/<directory>
Run Code Online (Sandbox Code Playgroud)
对于 APK:
不拆分:
flutter build apk --obfuscate --split-debug-info=/<directory>
Run Code Online (Sandbox Code Playgroud)
带分裂:
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi --obfuscate --split-debug-info=/<directory>
Run Code Online (Sandbox Code Playgroud)
仅适用于 Flutter 版本 v1.16.2 或更高版本。
PS:关于拆分:
默认情况下,fat apk 包含 arm v7、arm v8 和 x64,这会增加 apk 大小,这是您不想要的。所以,当你拆分它时,你有单独的二进制文件,你可以上传到商店,从而减少用户需要下载的 apk 的大小。
对于 Android,该过程在https://flutter.dev/docs/deployment/obfuscate的文档中非常清楚。例如:
export version=1.0.0
flutter build apk --release --shrink --obfuscate --split-debug-info=misc/mapping/${version}
Run Code Online (Sandbox Code Playgroud)
将创建几个文件,例如misc/mapping/1.0.0/app.android-arm64.symbols(您可能希望将其保留在 VCS 中)
对于 iOS,这不太明显,因为您经常使用 Xcode 菜单:Product > Archive
flutter build ios --release --obfuscate --split-debug-info=misc/mapping/${version}
Run Code Online (Sandbox Code Playgroud)
它创建文件misc/mapping/1.0.0/app.ios-arm64.symbols
ios/Flutter/Generated.xcconfig为包括DART_OBFUSCATION=true
SPLIT_DEBUG_INFO=misc/mapping/1.0.0
Run Code Online (Sandbox Code Playgroud)
Product > Archive这将使用Release.xcconfig其中包括更新的Generated.xcconfig#include "Generated.xcconfig"
Run Code Online (Sandbox Code Playgroud)
因此,您上传的存档现在将被混淆(您不需要进行更改Release.xcconfig)
另请参阅 - https://github.com/flutter/flutter/issues/64626#issuecomment-736081173
需要进行混淆-Flutter应用程序知道其函数名称,可以使用Dart的StackTrace类显示该函数名称。有下测试的混淆支持。要启用它:
对于Android:
添加到文件[ProjectRoot]/android/gradle.properties:
extra-gen-snapshot-options=--obfuscate
Run Code Online (Sandbox Code Playgroud)
对于iOS:
首先,编辑[FlutterRoot]/packages/flutter_tools/bin/xcode_backend.sh:
找到该build aot呼叫,并为其添加一个标志,
${extra_gen_snapshot_options_or_none}
Run Code Online (Sandbox Code Playgroud)
定义为:
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
Run Code Online (Sandbox Code Playgroud)
要应用更改,请在[FlutterRoot]中运行
git commit -am "Enable obfuscation on iOS"
flutter
Run Code Online (Sandbox Code Playgroud)
(在提交重建Flutter工具后运行“ flutter”。)
接下来,在您的项目中,将以下内容添加到[ProjectRoot]/ios/Flutter/Release.xcconfig文件中:
EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate
Run Code Online (Sandbox Code Playgroud)
PS:还没有尝试过https://github.com/dart-lang/sdk/issues/30524中提到的--save-obfuscation-map标志 ,正如@mraleph所提到的
,对混淆的测试还不是很好。
对于 iOS 编辑ios/Flutter/Release.xcconfig
该文件应包含类似内容
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
Run Code Online (Sandbox Code Playgroud)
如果你检查Generated.xcconfig有一条线DART_OBFUSCATION=false
因此,在文件末尾添加相反的内容Release.xcconfig以覆盖:
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
DART_OBFUSCATION=true
SPLIT_DEBUG_INFO=obj_maps
Run Code Online (Sandbox Code Playgroud)
TREE_SHAKE_ICONS=true您也可以选择在此处添加树摇图标
| 归档时间: |
|
| 查看次数: |
3498 次 |
| 最近记录: |