Flutter自定义SDK在Release模式启动即闪退问题咨询
问题分析与解决
不需要在pub.dev单独注册你的SDK,问题根源和这个无关——release模式闪退是Android R8代码缩减/混淆误删了SDK里的native关联方法,和你用path引入还是版本号引入没关系。
从错误日志看,java.lang.NoSuchMethodError提示找不到d4.a类的commandListener和stateListener方法,这是因为release编译时,R8会把它认为“未被使用”的方法裁剪掉,但这些方法其实是和native层绑定的,代码里没有直接的Java调用,所以被误删了。
解决步骤:
- 在你的自定义SDK的Android模块中,创建或修改
proguard-rules.pro文件,添加规则保留这些方法:# 用日志里显示的混淆后类名 -keep class d4.a { void commandListener(long, byte[], int); void stateListener(long, int); } # 更稳妥的方式:用SDK里原始的类名(比如你的Listener类实际叫MySdkListener) -keep class com.yourpackage.mysdk.MySdkListener { void commandListener(long, byte[], int); void stateListener(long, int); } - 确保SDK的
android/build.gradle中已经配置了这个proguard规则,或者把上述规则直接添加到主应用的android/app/proguard-rules.pro里。 - 清理缓存后重新构建release包:
flutter clean && flutter build apk --release
另外检查主应用的android/app/build.gradle,如果开启了minifyEnabled true和shrinkResources true,必须保证proguard规则覆盖到所有需要保留的native关联方法,否则还会出现类似问题。
内容的提问来源于stack exchange,提问作者Ltothej
相关产品推荐
相关产品推荐

