flutter - 在 Release模式下运行时使用 SyncFusion 的 Flutter 应用程序出现 PlatformException 序列化程序错误

标签 flutter dart syncfusion

我有一个在 Android 12(真实设备和模拟器)上运行的 Flutter (3.0.4) 应用程序进行测试。

主要的 Flutter 依赖项是 shared_preferences 2.0.15、flutter_riverpod 1.0.4、intl 0.17.0、i18n_extension 5.0.0 和 syncfusion_flutter_charts 20.1.58。

Gradle 版本似乎是 7.1.0(注意:android/build.gradle -> buildscript -> ext -> gradleVersion 也列为 4.0.0,所以不确定)。

在 Debug模式下运行时没有问题(flutter run)。

但是当以 Release模式运行时(flutter run --release),并使用带有 SyncFusion 的图表切换到特定的应用程序页面,我在应用程序页面上直接显示以下错误:

Error: Platform Exception(error, Serializer for class 'h' is not found

请注意,我的代码中没有类“h”。

遵循一些建议herehere ,我一直在尝试以下操作:

  • 在 android/app/build.gradle -> android {}
  • 中添加 lintOptions
  • 将 Gradle 降级到 3.6(不喜欢那个解决方案,正如您猜到的那样,但无论如何都试过了)
  • 将装饰器 @Keep 和/或 @Serializable 添加到我的代码中唯一的 Kotlin 类(我有一个自定义 Kotlin 类)。

这些解决方案均无效。 我也一直在看 this ,但不确定它如何适用于我的案例。

我的印象是在 Release模式下构建时错误来自 SyncFusion Flutter 模块,因为错误仅出现在使用 SyncFusion 的页面上,而不出现在任何其他页面上。

知道发生了什么事吗?

最佳答案

这很可能是由 proguard and minifyEnabled 引起的.它可能会混淆/优化一些不应该的代码。

在我的例子中,我在我的 flutter 应用程序中使用了一个自定义的 aar android 库。库+数据模型的公共(public)接口(interface)受到影响。

为了解决这个问题,我在我的 flutter 应用程序的 build.gradle 中添加了:

buildTypes {
        release {
            signingConfig signingConfigs.release
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
            'proguard-rules.pro' # and this line
        }
}

然后我在与 build.gradle 相同的目录中创建了一个文件 proguard-rules.pro:

-keep class com.android.library.dataModels.** { *; }
-keep class com.android.library.publicInterface.** { *; }

我还在我的 aar 中添加了同样的东西。两者都是 required .

您还可以完全删除 minifyEnabled(minifyEnabled false)和 proguard。这应该强调这个问题。

关于flutter - 在 Release模式下运行时使用 SyncFusion 的 Flutter 应用程序出现 PlatformException 序列化程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73141894/

相关文章:

firebase - 使用if else从firebase查询数据

c# - 使用 Syncfusion.XlsIO 将 .xlsx 文件转换为 .csv - 空引用异常

mysql - 如何输出mysql中积累的数据,以便我可以使用syncfusion将其导出为pdf?

class - Flutter Dart - 动态获取类的属性

flutter - 如何同时使用 AnimatedSwitcher 和 CustomScrollView

dart - 导航器在 Firebase 消息回调方法中不起作用

android - 如何将 StreamHandler 与无法访问的对象的监听器连接起来?

dart - 如果条件不符合,Dart会继续切换到下一个案例

asp.net - 无法加载文件或程序集“Syncfusion ..在部署版本上”

flutter - 在 Flutter 中使用 OrientationBuilder 打开键盘时如何避免方向改变?