Xamarin Android安装Twilio.Conversations.Xamarin后编译失败
问题原因
该编译错误属于典型的Java依赖类冲突:安装Twilio.Conversations.Xamarin包后,包内部内嵌的ReLinker(com.getkeepsafe.relinker)字节码,要么和项目中其他依赖引入的ReLinker版本重复/不兼容,要么和当前Xamarin.Android使用的D8/R8编译器字节码处理规则不匹配,最终触发编译终止,报错指向的ApkLibraryInstaller$ZipFileInZipEntry.class就是ReLinker组件的内部类。
修复方案
按优先级依次操作即可:
- 开启Java 8字节码兼容
右键Android项目进入属性页,找到「Android 选项」配置栏,确认已勾选使用D8编译器、使用R8链接器后,开启「支持Java 8字节码」选项,保存后清理整个解决方案,手动删除项目根目录下的obj、bin文件夹,重新构建。 - 移除重复的ReLinker依赖
打开NuGet包管理器,查看已安装包列表,搜索Relinker关键词,如果存在独立安装的ReLinker绑定包(比如Xamarin.KeepSafe.Relinker),或是其他第三方库自动拉取的独立ReLinker依赖,直接卸载即可——Twilio.Conversations.Xamarin已经内嵌了适配版本的ReLinker,无需额外单独安装。卸载完成后清理项目重新构建。 - 添加ProGuard规则规避R8处理异常
如果前两步操作后仍然报错,在Android项目中新增一个文本文件作为ProGuard配置,将文件的生成操作属性设置为ProguardConfiguration,在文件中写入以下规则:
保存后重新构建,该规则会让R8跳过对ReLinker所有类的压缩、混淆、字节码重写操作,避免处理过程中触发兼容问题。-keep class com.getkeepsafe.relinker.** { *; } -dontwarn com.getkeepsafe.relinker.** - 版本对齐修复
若以上方案都不生效,先检查Twilio.Conversations.Xamarin的版本,非稳定预览版直接回退到最新正式发布版;如果正式版仍报错,将Visual Studio对应的Xamarin.Android构建工具升级到最新稳定版,旧版本D8/R8编译器对内嵌第三方Java类的处理存在已知兼容Bug。
内容的提问来源于stack exchange,提问作者Takeo Nishioka
相关产品推荐
相关产品推荐

