OpenHarmony 开发:XTS 环境搭建和开发步骤
WSL
安装
开启 Linux 子系统选项:控制面板-> 程序->开启或关闭 Windows 功能->勾选: 适用于 Linux 的 Windows 子系统
在应用商店安装:Ubuntu-22.04 LTS
启动: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 用户名
注:wsl1
升 wsl2
的命令 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
- 进入
root
模式,命令行输入sudo su
- 命令行输入
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
chmod a+x /usr/local/bin/repo
exit
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
- 链接
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.hap
和 ActsWindowStageTest.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
复制用例
命令后生成的 hap
和 json
文件路径:\\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.hap
和 ActsWindowStageTest.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-addr2line
是 LLVM
项目中的一个工具,用于将地址转换为符号信息,包括函数名、文件名和行号。
以下是几个示例命令及其含义:
llvm-addr2line -Cfie <binary> <address>
:
-C
:将 C++ 符号名还原。-f
:显示函数名。-i
:显示内联帧信息。-e <binary>
:指定要解析的可执行文件或共享库。<address>
:要解析的地址。
设备连不上的问题
复制新版本的
hdc.exe
到suites/acts/hdc_std.exe
杀死
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
}