OpenHarmony开发者论坛

标题: OpenHarmony 在DevEco中开发Native C++代码时无法使用HiTrace [打印本页]

作者: aero    时间: 2024-6-15 17:50
标题: OpenHarmony 在DevEco中开发Native C++代码时无法使用HiTrace
[md]# 摘要

像Android的Systrace一样,OHOS也有一个HiTrace。但是很多人在下载官方的DevEco中开发Native C++代码是无法使用HiTrace的,本文就是来解决这个问题,并在DAYU200平台上验证成功。文末附上相关文件。

\[toc]

# 无法使用HiTrace的原因

Native C++代码在编译时需要链接到HiTrace的库,但是官方下载的SDK似乎没有。

# 解决方案

解决方案分两步,第一步是为了获取HiTrace库文件,第二步是为了把HiTrace库添加到SDK中。其中,第一步可以跳过。

## 1. 编译OHOS SDK

获取OHOS源码的方法可参考此[CSDN博文](https://blog.csdn.net/m0_37033731/article/details/124017669)来完成依赖工具安装、预编译。

然后再运行如下命令,编译SDK。

```shell
./build.sh --product-name ohos-sdk --ccache
```

编译完成后,可在如下路径找到相应的SDK库,有3个库文件,对应不同的架构。

```sh
<源码根目录>/out/sdk/sdk-native/os-irrelevant/sysroot/usr/lib/aarch64-linux-ohos/libhitrace_ndk.z.so

<源码根目录>/out/sdk/sdk-native/os-irrelevant/sysroot/usr/lib/arm-linux-ohos/libhitrace_ndk.z.so

<源码根目录>/out/sdk/sdk-native/os-irrelevant/sysroot/usr/lib/x86_64-linux-ohos/libhitrace_ndk.z.so
```

还有一个头文件

```
<源码根目录>/out/sdk/sdk-native/os-irrelevant/sysroot/usr/include/hitrace/trace.h
```

## 2. 把HiTrace库添加到SDK中

通过\[编译OHOS SDK]\(#1. 编译OHOS SDK)获取到HiTrace的库文件和头文件,也可尝试直接使用[我为标准版OHOS编译的HiTrace库](https://files.cnblogs.com/files/ ... ce.zip?t=1705841221\&download=true)。接着就要把库文件添加到SDK。

首先我们要确定SDK根目录的路径,DevEco的SDK路径似乎非常混乱,为保险起见,笔者把所有路径里都添加上了HiTrace的库文件。

* 路径1:查看DevEco的Tools->SDK Manager,下两图中标记出来的就是SDK路径1

  ![975e0b5949f1489d885e9b0846698692~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.png](https://forums-obs.openharmony.c ... a2hi4zohzd0y8xc.png "975e0b5949f1489d885e9b0846698692~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.png")
* 路径2:查看DevEco的Tools->SDK Manager,下两图中标记出来的就是SDK路径2

  ![dd6bac151ef74bc38aee434fd4becfc4~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.png](https://forums-obs.openharmony.c ... 5vob04s5vvf5zvv.png "dd6bac151ef74bc38aee434fd4becfc4~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.png")

  ![](https://p3-juejin.byteimg.com/to ... 0:q75.image#?w=1495\&h=1030\&s=124532\&e=png\&b=3d4144)
* 路径3: App实际使用的SDK可查看App的DevEco工程根目录下的·`local.properties`文件中的 `hwsdk.dir`:

  ![1ac531452e984305a6cc065c8ac1a709~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.png](https://forums-obs.openharmony.c ... jzjodqnon6doeyh.png "1ac531452e984305a6cc065c8ac1a709~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.png")

  ![](https://p3-juejin.byteimg.com/to ... 0:q75.image#?w=1097\&h=512\&s=209192\&e=png\&b=2e2e2e)

对SDK路径1,3个库文件和头文件要复制粘贴到如下三个路径:

```
<SDK路径1>\openharmony\<使用的API版本号>\native\sysroot\usr\lib\aarch64-linux-ohos\libhitrace_ndk.z.so
<SDK路径1>\openharmony\<使用的API版本号>\native\sysroot\usr\lib\arm-linux-ohos\libhitrace_ndk.z.so
<SDK路径1>\openharmony\<使用的API版本号>\native\sysroot\usr\lib\x86_64-linux-ohos\libhitrace_ndk.z.so
<SDK路径1>\openharmony\<使用的API版本号>\native\sysroot\usr\include\hitrace\trace.h
```

对SDK路径2,3个库文件和头文件要复制粘贴到如下三个路径:

```
<SDK路径2>\<使用的API版本号>\native\sysroot\usr\lib\aarch64-linux-ohos\libhitrace_ndk.z.so
<SDK路径2>\<使用的API版本号>\native\sysroot\usr\lib\arm-linux-ohos\libhitrace_ndk.z.so
<SDK路径2>\<使用的API版本号>\native\sysroot\usr\lib\x86_64-linux-ohos\libhitrace_ndk.z.so
<SDK路径2>\<使用的API版本号>\native\sysroot\usr\include\hitrace\trace.h
```

对SDK路径3,需要看看其路径下目录结构是类似于SDK路径1还是2,并按对应的方式操作。

需要注意的是,复制头文件时,若无hitrace文件夹,自己建一个就行。

monica-code-tools
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5