基于Maui 开发一款跨组跨平台Android《语音助手》项目,背景:对接输入源算法组提供so模型动态库,执行指令。由于初次尝试开发Maui 跨平台调用so动态库,整体项目遇到了一些问题,记录一下。
整体解决方案:
1 本次开发结合两种编译器Android Studio和Visual Studio
使用Andriod Studio 封装so动态库并编译成aar包,Visual Studio开发Maui项目。
2 在Maui中尝试调用So动态库的遇到无法找到函数入口。
对此采用NDK编译打包了一个 libtest.so 测试。验证了,JNI 的.so 是给Java 虚拟机调用的,用 .net无法调用。.net 可以调用标准C风格的 Add1函数,不能调用Add函数。对算法Jni的so库(非标准C接口库的so),封装了简单的demo aar 验证, 跨平台.net 可以调用得到结果。
参考:https://www.cnblogs.com/pylblog/p/17668994.html
3 Android 中Java/Kotlin调用Jni so动态库规则,根据package 包名去合成到动态库Jni函数,Package 包名需要和Java后匹配
4 Maui创建Java绑定库绑定aar包供Maui调用
注意:修改asrandroidwrapper-debug.aar 属性为LibraryProjectZip。编译如果存在java 与C# 接口冲突建议直接在Android Studio 修改Android 源码最直接。如果是第三方的aar(Maven Central 或 JCenter),编译出现问题需要Metadata.xml文件。
例如: utilcodex-1.31.0.aar
包下载地址:https://mvnrepository.com/?__cf_chl_rt_tk=uY9lyW32tqBPyh1XsykqdYzEtlTrqQjui.pBcZDnKFI-1723685132-0.0.1.1-4522
Java 绑定元数据官方文档
https://learn.microsoft.com/zh-cn/previous-versions/xamarin/android/platform/binding-java-library/customizing-bindings/java-bindings-metadata
标签:方案,调用,跨平台,so,aar,Maui,Studio From: https://www.cnblogs.com/terryK/p/18498094