You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter嵌入原生Android应用时ProGuard规则补充咨询

Flutter嵌入原生Android应用时ProGuard规则补充咨询

嗨,看起来你已经为Flutter嵌入原生的场景整理了不少核心的ProGuard规则了!结合你用到的Flutter 3.29.3版本、原生Java 23环境(minSdk 26),还有你的Flutter模块依赖,我来帮你梳理下可以补充的内容,同时优化下现有规则的冗余:

首先得夸一句,你已经覆盖了Flutter组件、Method/Event Channel、JNI绑定这些关键核心部分,不过针对你用到的依赖和Fragment嵌入场景,还有这些细节可以完善:

1. 针对第三方依赖的补充规则

你的Flutter模块用到了http、socket_io_client这些涉及网络通信的包,需要为它们的底层实现添加混淆豁免:

  • http包:它依赖OkHttp/OkIO的原生实现,需要保留相关类避免混淆导致网络请求失败:
# 保留http包依赖的OkHttp/OkIO核心类
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keep class okio.** { *; }
-dontwarn okio.**
  • socket_io_client包:这个依赖Socket.IO的原生客户端,需要保留相关类避免连接或通信异常:
# 保留Socket.IO客户端相关类
-keep class io.socket.** { *; }
-keep interface io.socket.** { *; }
-dontwarn io.socket.**
  • intl包:虽然主要是Dart层的国际化工具,但如果涉及原生层的日期/本地化交互,可以补充:
# 保留国际化相关的原生类(适配intl包)
-keep class java.text.** { *; }
-keep class java.util.Locale { *; }

2. 针对Flutter Fragment嵌入场景的补充

因为你用的是Flutter Fragment嵌入原生,需要明确保留Fragment相关的核心嵌入类:

# 保留Flutter Fragment及引擎核心类
-keep class io.flutter.embedding.android.FlutterFragment { *; }
-keep class io.flutter.embedding.engine.FlutterEngine { *; }
-keep class io.flutter.embedding.engine.dart.DartExecutor { *; }

3. 优化现有规则的冗余

你现有规则里有重复的-keep class io.flutter.** { *; }和-keep class io.flutter.embedding.** { *; },前者已经覆盖了后者,可以合并去掉冗余部分。

整理后的完整ProGuard规则

# Native code that launches and interacts with the flutter module
-keep class com.mydomain.myapp.flutter.** { *; }

# Flutter core components & embedding(合并重复规则)
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-dontwarn io.flutter.embedding.**

# Flutter Method/Event Channels - prevent obfuscation
-keep class * implements io.flutter.plugin.common.MethodChannel$MethodCallHandler { *; }
-keep class * implements io.flutter.plugin.common.EventChannel$StreamHandler { *; }
-keep class * implements io.flutter.plugin.common.BasicMessageChannel$MessageHandler { *; }
-keep class * implements io.flutter.plugin.common.BinaryMessenger$BinaryMessageHandler { *; }

# Keep Dart entrypoints and plugin registrants
-keep class io.flutter.plugin.** { *; }

# Flutter method call handlers - prevent method name obfuscation
-keepclassmembers class * {
    public void onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result);
    public void onListen(java.lang.Object, io.flutter.plugin.common.EventChannel$EventSink);
    public void onCancel(java.lang.Object);
}

# 补充:Flutter Fragment嵌入核心类
-keep class io.flutter.embedding.android.FlutterFragment { *; }
-keep class io.flutter.embedding.engine.FlutterEngine { *; }
-keep class io.flutter.embedding.engine.dart.DartExecutor { *; }

# 补充:http包依赖的OkHttp/OkIO规则
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keep class okio.** { *; }
-dontwarn okio.**

# 补充:Socket.IO客户端规则
-keep class io.socket.** { *; }
-keep interface io.socket.** { *; }
-dontwarn io.socket.**

# 补充:国际化相关(适配intl包)
-keep class java.text.** { *; }
-keep class java.util.Locale { *; }

# 测试依赖mocktail(Release构建可注释,Debug若需保留则启用)
-dontwarn org.mockito.**
-dontwarn io.mocktail.**

最后提醒下:添加完规则后一定要做一次Release构建并全面测试,重点检查Flutter Fragment启动、Method Channel通信、网络请求和Socket连接是否正常,如果出现崩溃或功能异常,可以通过混淆映射文件mapping.txt定位需要额外保留的类。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:19:34