Flutter's wiki提到混淆是一种在发布模式下的选择
然而,颤动构建命令没有相关选项 - 请参阅:
SQL> create index billcrown_grir_ix on billcrown(grir);
Index created.
SQL> select grirno, grirdate
2 from grirmain
3 where grirno not in
4 ( select grir
5 from billcrown
6 where grir is not null );
900000 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 794905065
---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 901K| 15M| | 2018 (1)| 00:00:01 |
|* 1 | HASH JOIN RIGHT ANTI | | 901K| 15M| 1664K| 2018 (1)| 00:00:01 |
|* 2 | INDEX FAST FULL SCAN| BILLCROWN_GRIR_IX | 100K| 488K| | 62 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL | GRIRMAIN | 1000K| 12M| | 687 (1)| 00:00:01 |
---------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("GRIRNO"="GRIR")
2 - filter("GRIR" IS NOT NULL)
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
62577 consistent gets
223 physical reads
0 redo size
24221330 bytes sent via SQL*Net to client
660596 bytes received via SQL*Net from client
60001 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
900000 rows processed
我在这里遗漏了什么吗?
他们是否将混淆作为默认值?
混淆甚至与颤动有关吗?
对此的任何指示都将非常感激。
答案 0 :(得分:8)
对于AppBundle:
不拆分:
flutter build appbundle --obfuscate --split-debug-info=/<directory>
拆分:
flutter build appbundle --target-platform android-arm,android-arm64,android-x64 --obfuscate --split-debug-info=/<directory>
对于APK:
不拆分:
flutter build apk --obfuscate --split-debug-info=/<directory>
拆分:
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi --obfuscate --split-debug-info=/<directory>
仅适用于Flutter v1.16.2或更高版本。
PS:关于拆分:
默认情况下,fat apk包含arm v7,arm v8和x64,这会增加apk大小,而您不想这样做。因此,拆分时,您具有单独的二进制文件,可以将其上传到商店中,从而减小了用户需要下载的apk的大小。
答案 1 :(得分:5)
https://flutter.dev/docs/deployment/obfuscate请参阅此链接以获取更多信息
注意:Flutter的代码混淆,从Flutter 1.16.2开始受支持。
答案 2 :(得分:2)
对于 iOS 编辑 ios/Flutter/Release.xcconfig
这个文件应该包含类似的内容
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
如果您选中 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
您也可以选择在此处添加 TREE_SHAKE_ICONS=true
到摇树图标
答案 3 :(得分:1)
目前,通过扑动的CLI没有直接暴露出模糊处理。
你可以试着像这样明确地将争论传递给gen_snapshot
:
flutter build --extra-gen-snapshot-options=--obfuscate,--save-obfuscation-map=build/symbols.json --release
注意:混淆支持的测试不是很好,目前可能无法正常工作。
答案 4 :(得分:1)
需要混淆 - 一个颤动的应用程序知道它的函数名称,可以使用Dart的StackTrace类显示。对于模糊处理有测试不足支持。启用它:
适用于Android :
添加到文件[ProjectRoot]/android/gradle.properties
:
extra-gen-snapshot-options=--obfuscate
对于iOS:
首先,修改[FlutterRoot]/packages/flutter_tools/bin/xcode_backend.sh
:
找到build 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
要应用更改,请在[FlutterRoot]中运行
git commit -am "Enable obfuscation on iOS"
flutter
(运行&#34; flutter&#34;提交后重建颤振工具。)
接下来,在您的项目中,将以下内容添加到[ProjectRoot]/ios/Flutter/Release.xcconfig
文件中:
EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate
PS:Haven没有尝试https://github.com/dart-lang/sdk/issues/30524中提到的--save-obfuscation-map标志 再次,如@mraleph所述,混淆不是非常好测试。
答案 5 :(得分:1)
对于 Android,该过程在 https://flutter.dev/docs/deployment/obfuscate 的文档中非常清楚。例如:
export version=1.0.0
flutter build apk --release --shrink --obfuscate --split-debug-info=misc/mapping/${version}
将创建多个文件,例如 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}
它创建文件 misc/mapping/1.0.0/app.ios-arm64.symbols
ios/Flutter/Generated.xcconfig
以包含DART_OBFUSCATION=true
SPLIT_DEBUG_INFO=misc/mapping/1.0.0
Product > Archive
将使用 Release.xcconfig
,其中包括更新的 Generated.xcconfig
#include "Generated.xcconfig"
因此您上传的档案现在将被混淆(您无需对 Release.xcconfig
进行更改)
另见 - https://github.com/flutter/flutter/issues/64626#issuecomment-736081173
答案 6 :(得分:0)
以上所有答案都是正确的,但是没有答案告诉您在生成版本时我们需要添加相对路径或目录路径。
使用相对路径的示例:
flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug
使用文件夹路径的示例:
flutter build apk --obfuscate --split-debug-info=/Users/apple/Desktop/items/debug
以上命令将在给定的项目目录中生成一个内部版本,它将在相应的命令上创建一个名为ProjectFolderName
或'debug'的新文件夹,您可以在此处找到发行版本。