Skip to content

OpenHarmony 开发:XTS 环境搭建和开发步骤

WSL

安装

  1. 开启 Linux 子系统选项:控制面板-> 程序->开启或关闭 Windows 功能->勾选: 适用于 Linux 的 Windows 子系统

  2. 在应用商店安装:Ubuntu-22.04 LTS

  3. 启动:Ubuntu-22.04 LTS 添加用户并设置密码

WSL 迁移到非系统盘

以管理身份启动终端

查看 wsl 下的 Linux 是否为 stopped 状态

shell
C:\Users\xxx> wsl -l -v
  NAME            STATE           VERSION
* ubuntu-xx.xx    Running         2
# 如果不是执行shutdown
C:\Users\xxx> wsl --shutdown ubuntu-xx.xx

将 wsl 导出到目标盘并导入

shell
#1. 导出到目标盘
C:\Users\xxx> wsl --export Ubuntu-xx.xx D:\ubuntu-xx.xx.tar
#2.注销wsl
C:\Users\xxx> wsl --unregister Ubuntu-xx.xx
#3.导入wsl:wsl --import <wsl的名字> <wsl安装路径,必须要有一级目录,磁盘根目录不行> <导出的包名> <wsl版本>
C:\Users\xxx> wsl --import Ubuntu-xx.xx D:\Ubuntu-xx.xx\ D:\ubuntu-xx.xx.tar --version 2
#4.以普通用户登录(不执行这句默认以root登录) --- (我起名Ubuntu-22.04,所以这里是ubuntu2204.exe)
C:\Users\xxx> ubuntuxxxx.exe config --default-user 用户名

注:wsl1wsl2 的命令 wsl --set-version Ubuntu-xx.xx 2

注:如果 wsl 版本较低,可以执行 wsl --update

注:如果缺少虚拟机组件,可以执行 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

更新环境

sh
$ sudo apt update
$ sudo apt dist-upgrade

切换为 bash

sh
$ sudo ln -fs /bin/bash /bin/sh    # dash 切换为bash

依赖

安装

sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev genext2fs liblz4-tool libssl-dev libtinfo5 lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3 python3-pip ruby

Java

执行 java --version 看是否有 java 的环境,没有的话安装下

sudo apt install openjdk-17-jdk-headless

repo

  1. 进入 root 模式,命令行输入 sudo su
  2. 命令行输入curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
  3. chmod a+x /usr/local/bin/repo
  4. exit
  5. pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
  6. 链接 python3/usr/bin/python, /usr/local/bin/repo/usr/bin/repo

附 repo 强制 sync 的方法

sh
repo forall -c 'git reset --hard; git clean -fd'

如果想保留工作区的内容:

sh
repo forall -c 'git reset --mixed; git clean -fd'

强制同步单个仓:

sh
repo forall -c 'git reset --hard; git clean -fd'

同步到锁定的版本:

先在指定版本的环境上导出 xml:

sh
repo manifest -r -o manifest-new.xml

将上面生成的 manifest-new.xml 文件 拷贝到 .repo/manifests 目录下

.repo/manifest.xml 这个文件中 name 字段值替换成 上面生成的文件 manifest-new.xml 然后再 repo sync -c 进行更新即可

下载代码

设置 git

shell
git config --global user.name "yourname"
git config --global user.email "your-email-address"

用 repo 下载代码

shell
mkdir code
chmod 777 -R code
cd code

repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

预编译

在源码根目录(创建的 code 目录)下执行 prebuilts, 安装编译器及二进制工具

sh
./build/prebuilts_download.sh --no-check-certificatie -skip-ssl

编译源码

sh
./build.sh --product-name rk3568

编译测试用例

先执行 ln -s /usr/lib/x86_64-linux-gnu/libffi.so.8 /usr/lib/x86_64-linux-gnu/libffi.so.6

进入源码根目录 cd test/xts/acts,执行命令

全量:./build.sh product_name=rk3568

单个:./build.sh product_name=rk3568 system_size=standard suite=ActsWindowStageTest (测试套名称)

如果报错需要修改 test/xts/acts/check_hvigor.py

py
if __name__ == "__main__":
    # this_file = os.path.realpath(__file__)
    # acts_root_dir = os.path.dirname(this_file)
    # hvigor_prj_list = get_hvigor_prject_list(acts_root_dir)

    # js_valid = check_hvigor_wrapper_js(acts_root_dir, hvigor_prj_list)
    # json_valid = check_hvigor_version(hvigor_prj_list)

    # if not js_valid or not json_valid:
    #     sys.exit(1)

    sys.exit(0)

下载镜像

gitee 上下载最新的镜像--选择最新的转测时间中的 rk3568 版本下载 https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md

镜像解压到一个文件夹中  D:\xtsImage,这个工具可以在 windows 上跑 ubuntu 下编译出来的 ActsWindowStageTest.hap

进入 xtsImage\suites\acts\config  中的 user_config.xml,做如下修改:

xml
<ip>127.0.0.1</ip>
<port>8710</port>
<!-- 设备号,cmd 执行命令 hdc list targets 查看 -->
<sn>4501004456343033320121df0a2eba00</sn>

xtsImage\suites\acts\testcases\ 目录中的 module_info.list 文件中最后一行添加  ActsWindowStageTest ActsWindowStageTest

\\wsl$\Ubuntu-20.04\home\xxx\xtsProject\out\rk3568\suites\acts\testcases\ 目录下的 ActsWindowStageTest.hapActsWindowStageTest.json 文件复制到 xtsImage\suites\acts\testcases 文件夹中。

win 下通过 choco 安装 python3.7

sh
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
sh
choco install python37

双击 xtsImage\suites\acts\ 目录中的 run.bat 文件,执行命令 run -l ActsWindowStageTest

编写用例

\\wsl$\Ubuntu-20.04\home\xxx\code\master\test\xts\acts\graphic\windowStage\entry\src\main\ets\test\ 中编写用例

Ubuntu  执行编译 ./build.sh product_name=rk3568 system_size=standard suite=ActsWindowStageTest

也可用以下命令增量编译:

~/code/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C ~/code/out/rk3568 deploy_testtools ActsGraphicXTSDrawingNapiTest

复制用例

命令后生成的 hapjson 文件路径:\\wsl$\Ubuntu-20.04\home\xxx\code\master\out\rk3568\suites\acts\testcases\

用 XTS 测试套件测试你的用例

\\wsl$\Ubuntu-20.04\home\xxx\xtsProject\out\rk3568\suites\acts\testcases\ 目录下的 ActsWindowStageTest.hapActsWindowStageTest.json 文件复制到 xtsImage\suites\acts\testcases 文件夹中。

双击 xtsImage\suites\acts\ 目录中的 run.bat 文件,执行命令 run -l ActsWindowStageTest

在板子上直接运行用例(可选)

sh
hdc file send ActsGraphicXTSDrawingNapiTest /data/local/tmp

hdc shell
cd /data/local/tmp
chmod +x ActsGraphicXTSDrawingNapiTest
./ActsGraphicXTSDrawingNapiTest

查看板子上的日志(可选)

日志有助于崩溃分析

sh
ls /data/log/faultlog/faultlogger/

CPP 用例的调试

CPP Crash 解析

sh
~/code/prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-addr2line -Cfie ~/code/out/rk3568/lib.unstripped/graphic/graphic_2d/libnative_drawing_ndk.z.so 000937c1

这条命令将从指定的共享库 libnative_drawing_ndk.z.so 中解析地址 000937c1,并输出该地址对应的函数名、文件名和行号信息。

测试崩溃日志: /data/log/faultlog/temp

说明

llvm-addr2lineLLVM 项目中的一个工具,用于将地址转换为符号信息,包括函数名、文件名和行号。

以下是几个示例命令及其含义:

llvm-addr2line -Cfie <binary> <address>:

  • -C:将 C++ 符号名还原。
  • -f:显示函数名。
  • -i:显示内联帧信息。
  • -e <binary>:指定要解析的可执行文件或共享库。
  • <address>:要解析的地址。

设备连不上的问题

  1. 复制新版本的 hdc.exesuites/acts/hdc_std.exe

  2. 杀死 hdc 重试

sh
taskkill /F /IM hdc.exe
taskkill /F /IM hdc_std.exe

签名工具

https://gitee.com/openharmony/xts_acts/wikis/XTS签名/签名工具介绍

仓库

https://gitee.com/openharmony/xts_acts/tree/master/graphic/graphicDrawing

接口文档

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkgraphics2d

VSCode C++ 插件配置

c_cpp_properties.json

json
{
  "configurations": [
    {
      "name": "Linux",
      "includePath": [
        "~/code/third_party/googletest/googletest/include/**",
        "~/code/interface/sdk_c/graphic/graphic_2d/native_drawing/**",
        "~/code/foundation/graphic/graphic_2d/rosen/modules/render_service_base/include/**",
        "~/code/foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/**",
        "~/code/foundation/graphic/graphic_2d/rosen/modules/2d_graphics/src/**",
        "~/code/third_party/skia/**"
      ],
      "defines": [],
      "compilerPath": "/usr/bin/gcc",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "gcc-x64"
    }
  ],
  "version": 4
}

最后编辑时间:

Version 4.2 (core-1.3.4)