Flutter 即学即用系列博客——10 混淆

2,973 阅读2分钟

前言

之前的博客我们都是在 debug 的模式下进行开发的。

实际发布到市场或者给到用户的都是 release 包。

而对于 Android 来说,release 包一个重要的步骤就是混淆。

Android 如何混淆

如何你不做任何处理,直接在原有混淆基础上打出 release 包。

当运行到 Flutter 对应代码,会 crash。

因此我们需要在 Android 项目的 proguard-rules.pro 文件进行配置。

#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

配置的混淆文本以官网链接为主:👇
flutter.dev/docs/deploy…

dart 混淆

官网 Flutter WIKI 里面说了

Note that Dart obfuscation has not yet been thoroughly tested

Dart 的混淆还没有完全测试。因此是否添加看你。

就算添加了,也要记得测试是否会影响到你的 Flutter 相关功能使用。

对于 Android 来说是添加下面到 /android/gradle.properties:

extra-gen-snapshot-options=--obfuscate

具体详情见 Flutter WIKI Obfuscating Dart Code

Flutter FAQ

在 Flutter 的 FAQ 链接上面,明确说明了 Flutter 暂时不支持 x86 架构的手机。

Note Flutter currently does not support building for x86 Android (issue #9253) directly, however apps built for ARMv7 or ARM64 run fine (via ARM emulation) on many x86 Android devices.

因此假设你们公司要选型 Flutter,你要确认是否可以割舍掉使用 x86 架构手机的用户。

当然 x86 的 Android 手机相对比较少,不过还是有的。

当 Flutter 代码运行到 x86 平台上面,会 crash。

如果你要验证,可以在 Android 模拟器上面创建一个 x86 的手机模拟器,比如 nexus 4。

然后安装嵌入 Flutter 代码的 Android APK,当运行到对应 Flutter 代码时,APP 会 crash。

这个时候有两种方案:

  1. 判断当前手机架构,如果是 x86,对应 Flutter 功能不显示。
  2. APP 设置不支持 x86 架构。这样 x86 手机就没法安装了。

推荐第二种,因为第一种会导致不同架构手机表现不一致,而且需要自己代码手动做控制。容易漏掉。

FAQ

更多阅读:
Flutter 即学即用系列博客
Flutter 即学即用系列博客——01 环境搭建
Flutter 即学即用系列博客——02 一个纯 Flutter Demo 说明
Flutter 即学即用系列博客——03 在旧有项目引入 Flutter
Flutter 即学即用系列博客——04 Flutter UI 初窥
Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget
Flutter 即学即用系列博客——06 超实用 Widget 集锦
Flutter 即学即用系列博客——07 RenderFlex overflowed 引发的思考
Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信
Flutter 即学即用系列博客——09 EventChannel 实现原生与 Flutter 通信(一)
Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)

Flutter & dart
dart 如何优雅的避空
Flutter map 妙用及 .. 使用