Deployment 如何混淆颤振应用程序?

Deployment 如何混淆颤振应用程序?,deployment,flutter,obfuscation,Deployment,Flutter,Obfuscation,提及模糊处理是在发布模式中的一种选择。 然而,颤振构建命令没有相关选项-请参阅: flatter帮助-v build apk 我是不是遗漏了什么? 他们是否将模糊设置为默认设置? 混淆是否与颤振相关 任何关于这方面的指示都将非常感谢。目前,模糊处理不会通过flift CLI直接暴露出来 您可以尝试显式地将参数传递给gen_快照,如下所示: flutter build --extra-gen-snapshot-options=--obfuscate,--save-obfuscation-map=b

提及模糊处理是在发布模式中的一种选择。
然而,颤振构建命令没有相关选项-请参阅:
flatter帮助-v build apk

我是不是遗漏了什么?
他们是否将模糊设置为默认设置?
混淆是否与颤振相关


任何关于这方面的指示都将非常感谢。

目前,模糊处理不会通过flift CLI直接暴露出来

您可以尝试显式地将参数传递给
gen_快照
,如下所示:

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

注意:模糊处理支持没有经过很好的测试,目前可能无法工作。

需要模糊处理-颤振应用程序知道其函数名,可以使用Dart的StackTrace类显示。有未经测试的对模糊处理的支持。要启用它,请执行以下操作:


适用于Android
添加到文件
[ProjectRoot]/android/gradle.properties

extra-gen-snapshot-options=--obfuscate

对于iOS:
首先,编辑
[flatterroot]/packages/flatter\u tools/bin/xcode\u backend.sh

找到
构建aot
调用,并向其添加标志

${extra_gen_snapshot_options_or_none}
定义为:

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
要应用您的更改,请在[flatterroot]中运行

git commit -am "Enable obfuscation on iOS"  
flutter  
(提交后运行“颤振”将重建颤振工具。)

接下来,在项目中,将以下内容添加到
[ProjectRoot]/ios/flatter/Release.xcconfig
文件中:

EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate

PS:尚未尝试在
同样,正如@mraleph所提到的,模糊处理没有得到很好的测试 有关更多信息,请参阅此链接


注:颤振代码混淆,从颤振1.16.2开始支持。

适用于AppBundle:

flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug
                                
flutter build apk --obfuscate --split-debug-info=/Users/apple/Desktop/items/debug
不拆分:

flutter build appbundle --obfuscate --split-debug-info=/<directory>
flutter build apk --obfuscate --split-debug-info=/<directory>
flatterbuildappbundle——混淆——分割调试信息=/
使用拆分:

flutter build appbundle --target-platform android-arm,android-arm64,android-x64 --obfuscate --split-debug-info=/<directory>
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi --obfuscate --split-debug-info=/<directory>
flatterbuildappbundle——目标平台安卓arm、安卓arm64、安卓x64——混淆——分割调试信息=/

对于APK:

flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug
                                
flutter build apk --obfuscate --split-debug-info=/Users/apple/Desktop/items/debug
不拆分:

flutter build appbundle --obfuscate --split-debug-info=/<directory>
flutter build apk --obfuscate --split-debug-info=/<directory>
flatterbuildapk——混淆——分割调试信息=/
使用拆分:

flutter build appbundle --target-platform android-arm,android-arm64,android-x64 --obfuscate --split-debug-info=/<directory>
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi --obfuscate --split-debug-info=/<directory>
flatterbuildapk——目标平台安卓arm、安卓arm64、安卓x64——按abi拆分——混淆——拆分调试信息=/
仅适用于颤振版本v1.16.2或更高版本

PS:关于拆分:

默认情况下,fat apk包含arm v7、arm v8和x64,这会增加apk大小,这是您不希望看到的。因此,当您拆分它时,您可以将单独的二进制文件上载到存储中,从而减少用户需要下载的apk的大小。

以上所有答案都是正确的,但没有答案告诉您在生成构建时需要添加相对路径或目录路径

使用相对路径的示例:

flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug
                                
flutter build apk --obfuscate --split-debug-info=/Users/apple/Desktop/items/debug
使用文件夹路径的示例:

flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug
                                
flutter build apk --obfuscate --split-debug-info=/Users/apple/Desktop/items/debug

上面的命令将在给定的项目目录中生成一个版本,它将在相应的命令上创建一个名为
ProjectFolderName
或“debug”的新文件夹,在那里您可以找到发布版本。

对于iOS edit
iOS/flatter/release.xcconfig

此文件应包含以下内容

#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
如果选中
Generated.xcconfig
则有一行
DART\u OBFUSCATION=false

因此,在
Release.xcconfig
文件的末尾添加相反的内容以覆盖:

#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

DART_OBFUSCATION=true


您也可以选择在此处添加
TREE\u SHAKE\u ICONS=true
到TREE SHAKE图标

为什么您认为需要进行模糊处理?Dart被编译成二进制代码。@GünterZöchbauer这能保证没有暴露变量/方法/类型名称吗?我的代码很难反编译?我来自C#背景,请原谅我的无知……我问mraleph为什么他们添加了模糊功能,他提到有些东西可能是可以恢复的——不记得细节了。我将尝试找到问题。我还没有找到讨论内容,但可能会提供一些提示。这是无效的:找不到名为“额外生成快照选项”的选项。关于
flatter build aot--extra gen snapshot options=…
flatter build aot
似乎对该标志做出响应,但是apk/ipa在哪里?
flatter build aot
不幸的是,它没有构建apk,我查看了代码,目前似乎没有一种方法来构建ipk并传递这些标志。您必须编辑颤振工具源。@mraleph我通过Gradle的Gradle.properties设置了额外的gen快照选项标志,并得到了一个工作的、模糊的apk。在iOS中,这与什么是等效的?这种当前的模糊技术是否使代码的反向工程变得困难,或者我们是否可以遵循任何其他步骤使反向工程变得困难?我找不到xcode_backend.sh该文件位于何处,/packages也不存在于该位置。唯一的/packages文件夹位于/ios/flatter/App.framework/flatter_assets/packages上,但它不包含flatter_工具。@i6x86我相信您是在错误地查找自己的项目-xcode_backend.sh位于您的flatter安装位置。(无论是那个还是弗利特在我回答后改变了。不管怎样,请让我知道)谢谢,伙计,你是对的,我在查看项目文件夹,我的错误。在哪里定义这个?如果[-n“$extra\u gen\u snapshot\u options\u或\u none=”“如果[-n“$extra\u gen\u snapshot\u options”];那么extra_gen_snapshot_options_或_none=“--extra gen snapshot options=$extra_gen_snapshot_options”fi您所说的“拆分”是什么意思?谢谢,我在正式文档中询问后立即阅读了它,它仍然会对那些只限于此页面的人有所帮助!您可能需要编辑您的答案以添加此精度。请注意,建议使用appbundle,因为它的大小很重要。它可以极大地减少你的应用程序的大小。太棒了!我不知道iOS部分,但即使在添加了
DA之后