【OpenHarmony常见问题汇总9】SDK子系统常见问题

SDK子系统

  • 编译so时如何去除符号表

  • 运行Native HAP的时候报错

  • cmake中arm64-v8a/armeabi-v7a这层目录的宏定义是什么

  • Native API类似Canvas绘制接口是什么

  • 在Native代码中使用OH_LOG_Print打印日志报错

  • 如何遍历rawfiles中的文件

  • NAPI有创建文件和创建文件夹的接口吗

编译so时如何去除符号表

适用于:OpenHarmony 3.1 Beta5 API 9

解决措施

  1. 参见上图路径,在CMakeLists.txt中添加如下代码。

    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
  2. 在build-profile.json5文件 arguments 项中添加如下参数。

    { "buildOption": {   "externalNativeOptions": {     "arguments": "-DCMAKE_BUILD_TYPE=Release"   } } }

运行Native HAP的时候报错

适用于: OpenHarmony 3.1 Beta5 API 9

问题现象

运行Native HAP,出现以下错误:

  1. 导入的命名空间报错:Obj is not a valid object

  2. 报错:install parse profile prop check error

原因分析

未设置本机的ABI编译环境。

解决措施

检查模块根目录下(注意不是工程根目录)的build-profile.json5文件(见下图),如果设备是32位,需要在abiFilters参数中配置armeabi-v7a,如果设备是64位,需要在abiFilters参数中配置arm64-v8a。

代码示例

{ "buildOption": {   "externalNativeOptions": {     "abiFilters": [       "armeabi-v7a",       "arm64-v8a"     ],   } } }

cmake中arm64-v8a/armeabi-v7a这层目录的宏定义是什么

适用于:OpenHarmony 3.1 Beta5 API 9

解决方案

arm64-v8a及armeabi-v7a目录如下所示:

entry ├─ libs │   ├─ arm64-v8a │   │   └─ libMyDemo.so │   └─ armeabi-v7a │         └─ libMyDemo.so └─ src     └─ main         └─ cpp               └─ CMakeLists.txt

访问到目录的宏定义为:${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/xxxx.so

CMAKE_CURRENT_SOURCE_DIR:CMakeList.txt文件所在目录。

OHOS_ARCH:设置应用程序二进制接口ABI,类型为 armeabi-v7a、arm64-v8a,默认值是 arm64-v8a。

使用示例

CMakeLists.txt 中添加链接库。

target_link_libraries(entry PUBLIC   libace_napi.z.so   libhilog_ndk.z.so   ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libMyDemo.so )

Native API类似Canvas绘制接口是什么

适用于:OpenHarmony 3.2 Beta5 API 9

解决方案

Native API中的Drawing接口可以提供2D绘制功能,其作用类似Canvas绘制接口。

参考链接

Drawing模块

在Native代码中使用OH_LOG_Print打印日志报错

适用于:OpenHarmony 3.1 Beta5 API 9

问题现象

在Native代码中使用OH_LOG_Print打印日志,上报错误:undefined symbol: OH_LOG_Print

原因分析

缺少链接库文件。

解决措施

打开CMakeLists.txt文件,在target_link_libraries最后追加libhilog_ndk.z.so。

set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(entry PUBLIC   libace_napi.z.so   libhilog_ndk.z.so )

如何遍历rawfiles中的文件

适用于:OpenHarmony 3.1 Beta5 API 9

解决方案:

使用Native API中的OH_ResourceManager_OpenRawDir()方法获取到rawfile的根目录,然后对其进行遍历。

参考文档:

Native开发指导

NAPI有创建文件和创建文件夹的接口吗

适用于:OpenHarmony 3.1 Beta5 API 9

解决方案:

NAPI不提供创建文件和创建文件夹的接口,可以直接使用C++创建文件和文件夹的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程作品集

你的赞赏将带来极佳的运气和才气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值