能否在Swift或Java安卓项目中使用Xamarin类库?
Xamarin类库在原生Java/Objective-C项目中使用的方案
是可以实现的,但需要针对不同平台做专门的导出配置,不能直接把Xamarin编译的默认类库放到原生项目里用,具体操作如下:
Android平台适配(给Java项目调用)
- 首先需要显式给要暴露给Java调用的C#类、方法添加
[Export]特性,同时手动指定对应的Java方法签名,未标记的成员不会对外暴露 - 编译时选择生成带Java桩代码的AOT编译包,最终输出为
.aar格式文件,这个包内会同时打包Mono运行时依赖、编译后的C#代码对应的二进制文件、以及Java侧可直接调用的入口类 - 注意:最终生成的aar体积会比纯Java开发的aar大3~10MB不等,你可以通过程序集裁剪功能去除无用的Mono组件压缩体积
iOS平台适配(给Objective-C项目调用)
- 要暴露给原生调用的C#类必须继承自
NSObject,同时给类、需要对外暴露的方法/属性添加[Export]特性,指定对应的Objective-C接口签名 - 编译时选择生成通用Framework,编译过程会自动生成对应的Objective-C头文件,内含所有暴露接口的声明,直接把Framework和头文件导入原生项目即可调用
- 注意:要同时编译真机和模拟器架构的包再合并为通用Framework,否则会出现开发阶段模拟器运行报错、上架时报架构不兼容的问题
通用使用限制
- 不支持导出泛型类、泛型方法给原生调用,原生运行时没有对应实现,编译阶段就会报错
- 所有C#侧的异常必须提前捕获处理,不能直接抛到原生运行时,会直接触发应用崩溃
- 跨运行时调用存在少量性能损耗,高频调用的接口建议做批量处理,减少跨调用的次数
内容的提问来源于stack exchange,提问作者John Code
相关产品推荐
相关产品推荐

