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/repoexitpip3 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
}