如何混淆Flutter应用程序?

9bfwbjaz  于 2023-05-23  发布在  Flutter
关注(0)|答案(8)|浏览(470)

Flutter的wiki提到混淆是发布模式下的一种选择。
然而,flutter build命令没有相关选项-请参阅:
flutter help -v build apk
我错过了什么吗?
他们是否将混淆作为默认设置?
模糊甚至与扑动有关吗?
任何关于这方面的指示将非常感谢。

9avjhtql

9avjhtql1#

要在Flutter中混淆Dart代码:
更新您的pubspec.yaml文件以包含flutter_dotenvflutter_obfuscate软件包:

dependencies:
  flutter_dotenv: ^3.1.0

dev_dependencies:
  flutter_obfuscate: ^1.0.0

在Flutter项目的根目录下创建一个.env文件,并定义以下环境变量:

DART_OBFUSCATION=true

main.dart文件中,导入flutter_dotenv包并修改main函数,如下所示:

import 'package:flutter_dotenv/flutter_dotenv.dart';

Future<void> main() async {
  await dotenv.load();
  runApp(MyApp());
}

使用--release标志构建Flutter项目以生成发布构建:> flutter build apk --release
构建过程完成后,运行以下命令以混淆Dart代码:> flutter pub run flutter_obfuscate
混淆后的代码将被放置在lib_obfuscated目录中。

blmhpbnm

blmhpbnm2#

需要混淆-flutter应用程序知道它的函数名称,可以使用Dart的StackTrace类显示。有under-tested支持混淆。要启用此功能,请执行以下操作:

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

(在提交后运行“flutter”将重建flutter工具。
接下来,在项目中,将以下内容添加到[ProjectRoot]/ios/Flutter/Release.xcconfig文件中:

EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate

同样,模糊处理没有很好测试,正如@mraleph所提到的。*

rmbxnbpk

rmbxnbpk3#

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>

PS:关于拆分:

默认情况下,脂肪apk包含手臂v7,手臂v8和x64,这增加了apk大小,这是你不想的。所以,当你拆分它时,你有单独的二进制文件,你可以上传到商店,从而减少用户需要下载的apk的大小。

irtuqstp

irtuqstp4#

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

使用相对路径示例:

flutter build apk --obfuscate --split-debug-info=./ProjectFolderName/debug

使用文件夹路径示例:

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

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

qjp7pelc

qjp7pelc5#


https://flutter.dev/docs/deployment/obfuscate参考此链接了解更多信息
注意:Flutter的代码混淆,从Flutter 1.16.2开始支持。

p8ekf7hl

p8ekf7hl6#

对于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

1.为iOS制作一个模糊的构建

flutter build ios --release --obfuscate --split-debug-info=misc/mapping/${version}

它创建文件misc/mapping/1.0.0/app.ios-arm64.symbols
1.这还将修改ios/Flutter/Generated.xcconfig以包括

DART_OBFUSCATION=true
SPLIT_DEBUG_INFO=misc/mapping/1.0.0

1.使用Xcode菜单:Product > Archive将使用Release.xcconfig,其中包括更新的Generated.xcconfig

#include "Generated.xcconfig"

所以你上传的Archive现在将被混淆(你不需要对Release.xcconfig进行更改)
另见-https://github.com/flutter/flutter/issues/64626#issuecomment-736081173

nxowjjhe

nxowjjhe7#

对于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添加到树型摇动图标中

ipakzgxi

ipakzgxi8#

目前,模糊处理并没有通过flutter CLI直接暴露。
您可以尝试像这样显式地将参数传递给gen_snapshot

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

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

相关问题