HarmonyOS 鸿蒙Next 关于Android so库迁移到鸿蒙so引用问题

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关于Android so库迁移到鸿蒙so引用问题

现有Android App中引用了一些第三方的so文件,通过第三方库中的jar文件调用这些so中的方法,app想在纯血鸿蒙中开发一套,这些第三方的so文件在鸿蒙中是否需要重构一遍?Android so包件必须与应用包名一致,而我们的引用是间接调用的第三方库中的jar里的,这些so引用在鸿蒙OS demo中无法调用到,尝试通过鸿蒙新建个NDK项目,在其中引用so并修改CMakeLists.txt中的引用,提示找不到这些库,所以想问一下这些so中定义的类型或者一些方法鸿蒙不兼容,需要在鸿蒙NDK中重构一编才行?或者一些引用步骤的错误?  另(我通过鸿蒙中的NDK,新建了个so文件,项目中能正确调用。想确认下鸿蒙so是否木有包件名称的限制,只需在项目中正确引用即可,请帮忙确认下是否正确) Android So转移到纯血鸿蒙中


更多关于HarmonyOS 鸿蒙Next 关于Android so库迁移到鸿蒙so引用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

具体引用so库代码里面的方法如下: 使用当前工程编译的so库,可直接在ets文件中引用,最小demo可新建一个native C++模板的工程。

引用外部.so库分为两类

一、so为鸿蒙编译器编译,可在libs下创建一个架构文件夹,文件架构为:libs/架构名(arm64-v8a,armeabi-v7a,x86_64)/xxx.so 然后在ets侧进行引用,引用方式为:import {方法名} from ‘xxxx.so’

二、so为其他编译器编译,需要走适配流程,流程如下:

第一步,配置交叉编译环境, https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/Buildtools/README.md

第二步,移植三方库 https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/doc/ohos_use_sdk/OHOS_SDK-Usage.md

第三步,集成进项目 https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/doc/app_calls_third_lib.md

三:参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ndk-46-V5

鸿蒙中的NDK,新建so文件,导入使用的模块名和注册时的模块名大小写保持一致,如模块名为entry,则so的名字为libentry.so,napi_module中nm_modname字段应为entry,ArkTS侧使用时写作:import xxx from 'libentry.so'。

鸿蒙在Native侧中集成三方so库可以参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ndk-5-V5

鸿蒙在ArkTS侧引用其他三方so库可以参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ndk-21-V5

适配鸿蒙可能需要一些工作量。具体需要修改多少代码,取决于SO的复杂程度和使用的库。如果SO使用了与鸿蒙不兼容的库或者API,那么需要进行修改。如果SO使用的库和API在鸿蒙中也有对应的实现,那么只需要进行一些替换和适配即可。总之工作量需要根据具体情况进行评估和决定。

更多关于HarmonyOS 鸿蒙Next 关于Android so库迁移到鸿蒙so引用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


需要基于鸿蒙的 NDK 和源码重新构建

在HarmonyOS鸿蒙Next中,将Android的so库迁移到鸿蒙系统并进行so引用,主要涉及以下几个步骤:

  1. 库格式兼容性:确认Android的so库是否兼容鸿蒙系统。鸿蒙系统虽然支持部分Android API,但so库可能需要针对鸿蒙系统进行适配或重新编译。

  2. NDK工具链:使用鸿蒙系统提供的NDK工具链重新编译so库。鸿蒙系统的NDK与Android NDK存在差异,因此不能直接使用Android NDK进行编译。

  3. 修改引用路径:在鸿蒙项目中,修改对so库的引用路径,确保项目能够正确找到并加载编译后的so库。

  4. API替换:检查so库中调用的Android API,如果鸿蒙系统不支持,需要进行替换或寻找鸿蒙系统提供的替代API。

  5. 加载与调用:在鸿蒙应用代码中,使用鸿蒙系统提供的加载so库的方法(如System.loadLibrary),并正确调用so库中的函数。

请注意,由于鸿蒙系统与Android系统存在差异,迁移过程中可能会遇到特定问题。如果遇到编译、加载或运行时错误,请检查上述步骤是否正确执行,并参考鸿蒙系统的官方文档进行调试。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部