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

Xamarin Release启用R8时Here SDK for Android构建报错问询

问题背景
  • 现有一套已升级至5.0版本的Xamarin Forms应用,包含Android绑定库在内的所有构建任务均可成功完成。因Release构建过程中出现多个Proguard相关错误,已将代码压缩工具从Proguard切换为R8。
故障现象

Release模式下,3.16~3.20版本的Here SDK for Android(Premium Edition)存在部分功能异常,涉及SearchRequest、TextAutoSuggestionRequest两个接口:

  • 代码压缩器设置为空、或运行Debug模式时,两项功能均可正常运行
  • Release模式启用R8的场景下,SearchRequest无法返回任何结果,TextAutoSuggestionRequest会直接导致应用崩溃

崩溃错误日志如下:

W System.err: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.nokia.maps.AutoSuggestImpl
W System.err: at com.nokia.maps.PlacesTextAutoSuggestionResult.a(Unknown Source:34)
W System.err: at com.nokia.maps.PlacesBaseRequest.c(Unknown Source:253)
W System.err: at com.nokia.maps.PlacesBaseRequest.onResult(Unknown Source:57)
W System.err: at com.nokia.maps.PlacesBaseRequest.poll(Native Method)
W System.err: at com.nokia.maps.PlacesBaseRequest.d(Unknown Source:0)
W System.err: at com.nokia.maps.PlacesBaseRequest$h.a(Unknown Source:33)
W System.err: at com.nokia.maps.PlacesBaseRequest$h.doInBackground(Unknown Source:2)
W System.err: at android.os.AsyncTask$2.call(AsyncTask.java:333)
W System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
W System.err: at java.lang.Thread.run(Thread.java:764)
W System.err: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.nokia.maps.AutoSuggestImpl
W System.err: at com.nokia.maps.PlacesTextAutoSuggestionResult.a(Unknown Source:34)
W System.err: at com.nokia.maps.PlacesBaseRequest.c(Unknown Source:253)
W System.err: at com.nokia.maps.PlacesBaseRequest.onResult(Unknown Source:57)
W System.err: at com.nokia.maps.PlacesBaseRequest.poll(Native Method)
W System.err: at com.nokia.maps.PlacesBaseRequest.d(Unknown Source:0)
W System.err: at com.nokia.maps.PlacesBaseRequest$h.a(Unknown Source:33)
W System.err: at com.nokia.maps.PlacesBaseRequest$h.doInBackground(Unknown Source:2)
W System.err: at android.os.AsyncTask$2.call(AsyncTask.java:333)
W System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
W System.err: at java.lang.Thread.run(Thread.java:764)
已尝试的排查操作

目前已复用原有Proguard配置文件,额外新增了大量-keep class规则,几乎覆盖了所有相关包名,同时尝试以下操作均未解决问题:

  • 关闭Multidex
  • 启用AOT编译+LVVM优化
  • 将开发环境从VS 2019切换为VS 2022 Enterprise
解决方案

报错的核心原因是R8混淆裁剪过程中,擦除了Here SDK通过Gson做反序列化依赖的类成员、泛型签名信息,并非类被直接删除。普通-keep class规则仅能保留类名不被混淆,无法保留反射所需的完整类结构,因此之前的配置不生效。

补充以下R8规则即可修复问题:

  1. 完整保留com.nokia.maps包下所有类的类名、成员、方法,不做混淆和裁剪:
-keep class com.nokia.maps.** { *; }
-keepclassmembers class com.nokia.maps.** { *; }
  1. 保留Gson反射实例化对象必需的构造方法:
-keepclassmembers class com.nokia.maps.** {
    public <init>(...);
}
  1. 保留泛型签名、注解等Gson序列化依赖的属性,同时保留Gson本身的类结构不被优化:
-keepattributes Signature,*Annotation*,EnclosingMethod
-keep class com.google.gson.** { *; }
-dontwarn com.google.gson.**
  1. 检查Xamarin Android项目配置:确认编写的R8规则文件生成操作设置为ProguardConfiguration,避免规则文件未被纳入构建流程。

配置完成后,清理解决方案,删除obj、bin目录下的全部构建缓存,重新执行Release构建即可。此前尝试的Multidex开关、AOT+LVVM、VS版本切换均和该问题无关,不需要调整。


内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:39:15