我有一个在 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 的图表切换到特定的应用程序页面,我在应用程序页面上直接显示以下错误:
请注意,我的代码中没有类“h”。
- 在 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/