一、开发环境交代

  • 硬件环境:

    • 开发板:触觉智能 OH Purple Pi(RK3366)

    • 开发板固件:OpenHarmony 5.0.0.71

  • DevEco Studio版本:

    • DevEco Studio 5.0.2 Release

    • 构建版本:5.0.7.210

  • OpenHarmony SDK版本:API12 Release

二、问题描述

在使用上述DevEco Studio创建Native C++项目后,可以在DevEco Studio自带的模拟器和预览器中实现NDK中的方法调用,但是在Purple Pi开发板上运行时运行到调用NDK方法的位置就会闪退报错:

 

报错显示无法找到对应的NDK生成的.so动态库文件中的方法,按照报错连接点进去华为开发者文档中描述如下:

 

按照上述描述,是因为设备支持的Abi类型和C++工程中的Abi类型不匹配导致,在项目build路径下看到默认只生成了arm64-v8a的动态库文件:

 

在官方开发文档下方也对如何确定设备的Abi类型进行了介绍:

 

按照官网文档中的步骤通过hdc命令查看Purple Pi的Abi类型为default,同时在system路径下不存在lib64,所以按照文档要求需要在“abiFilters”参数中包含“armeabi-v7a”类型。但是在上图中红色记号笔位置说DevEco Studio Next Developer 5.0.3.200以上就不再支持编译armeabi-v7a架构的so文件,这就很头疼了,在entry模块下的build-profile.json5文件中配置abiFilters参数里写上armeabi-v7a就会标红报错。

 

报错内容提示armeabi-v7a不支持在HarmonyOS应用上了,那问题的核心就在于如何将项目改为OpenHarmony项目。

三、问题解决

  1. 替换API 12 的 OpenHarmony SDK 为full sdk

    full-sdk在ci下载:https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist

    只需要将full-sdk中的五个压缩文件进行解压,解压后替换到你自己SDK路径下 API12 对应路径中即可

    建议删除原有的所有文件夹,直接将解压缩后的文件夹复制进去:
     

    full-sdk中的五个压缩文件(我的环境是Windows,选择的是Windows下面的)和原本DevEco Studio自己下载的五个文件夹是一一对应的,所以直接删除原有的,把解压出来的扔进去就行。

  2. 修改工程级build-profile.json5中参数,使项目变为OpenHarmony项目

    按照下图中的内容进行修改,目的是把runtimeOS切换为OpenHarmony,上方的compileSdkVersioncompatibleSdkVersiontargetSdkVersion建议全写,如果在修改的过程中标红报错,不管,直接点击“sync now”

    即可,构建一下项目后应该就取消标红了。
     

     

  3. 修改entry\build-profile.json5模块下的build-profile.json5中内容,添加armeabi-v7aabiFilters参数下

     

至此应该就可以在OpenHarmony的开发板上运行Native C++创建的项目了

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐