Vscode连接OHOS开发环境

Vscode连接OHOS开发环境


看完这篇教程后,你将得到:

  • Visual Studio Code下载和配置
  • vim基本使用方法
  • systemd启动openssh-server (sshd)
  • ssh使用方法

我们使用软通的通晓开发板,其他开发板的开发环境可能略有差异

本文假设你已经看过了前置教程:开发环境基本配置

Vscode配置

首先下载Visual Studio Code

截至发文日期,最新版是1.99.2

但是我们最新也只能下载1.98.2

并且要关闭自动更新


1. 下载VSC 1.98.2

下面链接二选一即可,一个是更新说明和下载页面超链,一个是下载直链

注意保留安装包,如果不小心更新了可以通过安装包重新安装(不会影响配置文件,但是可能一部分插件也需要重新安装)


2. 安装

下载完成后,点击安装,一切默认即可,打勾的地方最好全部打勾

路径只影响软件本体位置,实际上文件到时候大部分都在你的user目录下


3. 新建配置文件 (可选)

进入软件后,建议新建一个配置文件:

  1. 点击软件左下角的齿轮
  2. 选择选项配置文件(XXXXXX)
  3. 点击子选单选项配置文件
  4. 点击新建配置文件
  5. 选中无标题配置文件
  6. 更改名称,名称随意
    • 我改成了OpenHarmonyOS DEV
  7. 点击改名后的配置文件,点击打勾来启用

接下来我们就可以安心配置了

通过区分配置文件,让我们不同的开发环境之间不打架,更好的区分。

并且有利于我们"最简化"我们的开发配置,让vsc响应更快


4. 关闭自动更新 (必须)

点击小齿轮,点击选单设置

搜索update

用户

关闭以下内容:

  • Update: Enable Windows Background Updates
    • :取消勾选
  • Update: Mode
    • :选择none

vscode本体的自动更新已经关闭

由于插件版本取决于vscode版本,我们保证vsc始终是1.98.2版本即可

点击最上面横菜单栏的···,选择帮助,点击子选单关于

保证弹出窗口的版本小于等于1.98.2(后面的user setup不影响)

如果发现版本被偷偷自动更新到最新版,直接点击1.98.2安装包进行安装即可,这不会影响任何内容,只有在旧版不被兼容的插件会被关闭。可以重新安装兼容的插件版本。

5. 准备下载插件

软件最左侧,第三个或者第四个图标,长得像俄罗斯方块或者巧克力的那个(随便你怎么说)

那是我们的扩展管理器


6. 继续进行!

取决于访问编译环境的方式,我们的工作将在这里产生分支。

但是请一定保证你的vscode版本不超过1.98.2

关于“怎么这么麻烦!?!!”的回答:

众所周知,vscode是基于electron(虽然是微软魔改版)和nodejs开发的,

之前为了兼容性,一直放低其运行时要求,现在为了加功能不得不更新其所需的框架的版本,

也就需要更新的glibc库和stdc++库,

很不巧的,其需要的库版本正好是ubuntu18.04不受支持的版本

对应的,vscode也提高了运行时的要求。(并且官方团队还略微阴阳怪气的回应兼容性问题)

所以要么自行升级对应库,并且重新配置依赖和链接,

要么回滚vsc版本。

考虑到自行配置难度很大,我们选择回滚vsc。




其实微软早就想把旧玩意换掉了,在之前通过一些提示信息悄摸摸告诉用户我们要更新了,你的服务器可能不兼容更新内容。

只是最近终于出手了。

总而言之,1.98 vsc虽然不在官方更新了,但是暂时也在维护周期内,如果发现严重问题也会在update界面发布新的子版本








Dev Containeer(本机环境部署推荐)

配置vscode的devcontainer插件

0. 什么是Dec Container

Dev Containor (开发容器)是一种较为先进的开发环境配置方式

通过格式化的自配置文件devcontainer.json,允许我们生成与项目相关的开发容器镜像,保证开发环境自动化部署和一致性


当然这里我们只是借用这个插件图形化的访问我们的开发环境。


由于容器的特殊性,我们不能直接访问容器内部。

该插件会在容器内部自动配置Vscode的后端服务器,允许我们以"瘦客户端"直接连上容器内的后端,达成图形化访问容器的目的。

扩展管理器内搜索Dev Container

点击安装
安装好插件后会发现左侧栏目多出一个图标,长得像个显示器,边上带个圈圈。

点击这个图标,出现远程管理器
选择开发容器

你会发现你的docker中已经实例化过的容器会在这里显示。

不出意外的话,我们的开发环境会被显示成:

﹀ 开发容器
    ﹀ ■ openharmony-docker:1.0.0 container_name

鼠标移到openharmony-docker:1.0.0 container_name上,右侧有个 -> 箭头(在当前窗口附加),点击他

你的软件会闪烁一下,重新载入工作区,

如果你是第一次启动,在这期间vscode会托管并安装vsc后端。

如果弹出远程主机可能不符合Vscode服务器的先决条件, 说明你的vsc版本超过1.98, 新版的vsc后端服务器无法部署在开发环境中,请降级vsc或者尝试自行构建高版本的开发环境

安装完毕后将会自动链接,可能会再一次重新载入工作区

并且可能弹出一个窗口你即将连接到不受支持的服务器,是否继续?

建议勾选不再显示并点击继续。

关于“容器目录树中多了一级”的回答:

如果你使用某些开发者提供的镜像,也可能会是:

﹀ 开发容器
    ﹀ ■ openharmony-docker:1.0.0 container_name
        ■ txsmartropenharmony /home/openharmony/txsmartropenharmony

这代表开发者可能已经完全部署了环境,并将其添加过工作区。

你可以直接附加工作区。

至此,devcontainer部分已经配置完毕,进入工作区就可以直接使用了。











Remote - SSH(远程机环境部署推荐)

配置openssh-server

(本部分假设您无法图形化访问容器内部)

注意:你需要将容器的22端口开放,并且映射到物理机上的端口,否则你将无法访问ssh

如果docker ps -a时在PORT一栏并没有任何内容,你可能需要重新创建容器,并添加端口映射,具体参考前置教程

打开容器所在服务器的powershell:

# 进入容器的终端环境,我的容器名字叫container_name,看看你的
docker exec -it container_name /bin/bash

这里才是真正麻烦的地方:

容器环境默认不开启systemd,这使得推荐的sshd启动方式受限:

systemctl enable sshd
# service sshd enable

systemctl start sshd
# service sshd start
Failed to enable unit, refusing to operate on linked unit file sshd.service
System has not been booted with systemd as init system (PID 1). Can't operate.

我们需要手动启动sshd,启动方式很简单,只需要直接执行/usr/sbin/sshd即可

但是环境特殊,在我们执行之前,需要进行以下操作:

  1. 修改sshd_config允许root密码登录(配置私钥登录则不需要)

    修改教程
    • 输入vim /etc/ssh/sshd_config

      VIM编辑器使用方法
      • 打开文件vim filepath

      打开文件后默认是命令模式,要进行编辑请进入编辑模式

      • 进入编辑模式: 键入i(insert直接在光标位置编辑),a(append在光标其后以为编辑),o(Open a line另起一行进行编辑)
      • 进入命令模式ESC退出编辑模式并回到命令模式,按下:来准备输入命令
      • 写入文件(保存)命令模式输入:w(write)来保存文件
      • 无修改时退出vim命令模式输入:q(quit)来退出查看
      • 不保存修改退出:如果你编辑了一定内容,请输入:qa!(quit abondon force)来放弃所有修改并退出
      • 保存退出vim命令模式输入:wq(write quit)来保存内容并退出

    • 找到32行的PermitRootLogin,按下i进入编辑模式。删除其前的#(取消他的注释)

    • 将后面的Value字段(默认应该是prohibit-password或者without-password)改为yes

    • ESC进入命令模式并且输入:wq保存退出。

    这一步做了什么?

    简单来说, 默认情况下是不允许root用户以ssh方法登陆系统的,我们只是将其改为允许

    关于sshd_config, 这是控制sshd的连接设置的配置文件,和大多数配置文件以及sh文件类似,#代表对其属性项进行注释,

    该配置文件中以“键值对”(或者被称作KV存储)的方式表示所有的设置。

    默认的配置文件基本上已经以注释方式列出了所有可修改项,并且其后的Value字段为默认值
    PermitRootLogin的默认值为"限制不允许密码登录",也就是只能通过私钥进行登录,然而我们默认不好配置私钥

    我们让PermitRootLoginyes,就可以使用密码登录了。


  2. 修改root密码 (配置私钥登录则不需要)

    修改教程
    • 输入passwd root 'password' 不要忘记单引号
    • 默认不显示输入内容是正常情况,你输入就行了。
      该密码只会被用作ssh登录,
      由于容器进入自动跳入root用户,所以改错了重新改就行,
      记住了新密码就行,复杂度取决于环境重要性。
      请不要给自己找麻烦
    这一步做了什么? 由于我们要配置root使用密码登录,不知道密码那就白搭了。

    然而docker会在容器实例化的时候自动给root用户随机一个密码。

    我们不知道密码,没办法ssh登录,所以需要重新修改。

    在这个容器中修改这个密码不会有问题。

    但不保证所有容器这么干都不会出问题


  3. sshd环境补全计划 (必须)

    • 运行mkdir /run/sshd && chmod 0755 /run/sshd
    • sshd运行的时候需要这个文件夹,保证有即可
    • 有一定的可能性在容器关闭后文件夹会消失,重新创建即可
  4. 手动启动sshd

    • 运行/usr/sbin/sshd (注意手动启动一定要打绝对路径,否则不启动)

接下来你的22端口就会被sshserver开放给外部,想办法访问容器22端口即可。

如果你遵循了前置教程的内容,容器的22端口应该已经被映射到了物理机的11451端口,在物理机(windows)上通过以下方式访问:

# [-p]代表指定端口
ssh -p 11451 root@localhost
#ssh [-p] [port] [username]@[hostname/address]

或者如果物理机通过frp等方式将端口开放。。。

# [-p]代表指定端口
ssh -p yourport root@youraddress
#ssh [-p] [port] [username]@[hostname/address]

执行后:

会问你要不要加入已知hosts / 非已知host是否连接,输入yes

(注意如果是敏感环境,请注意识别连接对象是否为你的目标服务器)

This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes

然后会提示你,已经永久将

Warning: Permanently added '[hostname/address]:port' (KEY/CERT TYPE) to the list of known hosts.

然后会要求你输入密码,输入刚才我们改的密码[your password]即可, 注意输入时不会回显

root@localhost's password:

成功之后就是这样的,接下来就可以配置vscode了

Welcome to Ubuntu 18.04.5 LTS (YOUR BASE PLATFORM)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
Last login: [date] from [your ip address]

请不要跟着这里面的提示打unminimize 否则你的容器大小会爆炸

配置vscode 的ssh

扩展管理器内搜索ssh,
出现Remote - SSH

点击安装

安装好插件后可能会发现左侧栏目多出一个图标,长得像个显示器,边上带个圈圈。

点击这个图标,出现远程管理器
选择远程(隧道/SSH)

不出意外的话,会显示成:

﹀ 远程(隧道/SSH)
    ﹀ SSH

鼠标移到SSH上,右侧有个 +,点击他

vsc顶部显示输入SSH连接命令,输入我们刚才在物理机上输入的ssh连接指令就可以

这是我的

# [-p]代表指定端口
ssh -p 11451 root@localhost
#ssh [-p] [port] [username]@[hostname/address]

或者如果物理机通过frp等方式将端口开放,从外部访问的话。。。

# [-p]代表指定端口
ssh -p yourport root@youraddress
#ssh [-p] [port] [username]@[hostname/address]

然后会要求你输入密码,输入刚才我们改的密码[your password]即可, 这个显示你输入了多少字符,但是不会显示输入内容

你的软件会闪烁一下,重新载入工作区,

如果你是第一次启动,在这期间vscode会托管并安装vsc后端。

如果弹出远程主机可能不符合Vscode服务器的先决条件, 说明你的vsc版本超过1.98, 新版的vsc后端服务器无法部署在开发环境中,请降级vsc或者尝试自行构建高版本的开发环境

安装完毕后将会自动链接,可能会再一次重新载入工作区

并且可能弹出一个窗口你即将连接到不受支持的服务器,是否继续?

建议勾选不再显示并点击继续。

接下来顶部可能要求你选择一个目录,默认停留在你登录用户的家目录/root

我们接下来要跳转到/home/openharmony/txsmartropenharmony

这个界面是交互式的:

  1. 你先选择.. (这在类UNIX系统中代表“上一级目录”)
    这会从/root退回到/(也就是系统根目录下面)

  2. 选择/home(常规用户的家目录)

  3. 选择openharmony(我们项目的父文件夹)

  4. 选择txsmartropenharmony(项目文件夹)

  5. 然后点击确定

如果没有要求你选择目录的话。。。

我们手动呼出这个界面

点击左侧第一个图标资源管理器

点击打开文件夹,然后就跟着上面的内容走即可


打开对应文件夹后,勾选信任创建者信任父文件夹,点击信任
(反正所有带信任的东西都信任就行了)

SSH登录方式配置完毕









开发环境插件建议:

在vsc连接上开发环境之后,建议额外安装以下插件:


本地安装:

  • Error Lens (Alexander)
  • TODO Highlight (Wayou Liu)


远程机安装:

  • C/C++ (Microsoft)
  • C/C++ Extension Pack (Microsoft)
  • GN Language Server (Microsoft)

可能会自动安装上 CMake Tools (Microsoft) 插件

在当前开发环境中基本上用不到(OHOS使用gn作为元构建系统,而非cmake),依照你的心情可以选择卸载。

通晓开发板使用C语言和Cpp语言进行开发,

微软的C/Cpp插件,会提供高亮,报错显示,静态分析等等(Intellsense服务)

微软的GN语言服务器,会提供.gn文件的语法高亮,能看得清楚点。

Error Lens会将报错以行高亮的形式展示,并且在旁边直接显示内容,十分方便

TODO Highlight则是会高亮显示例如TODO UPDATE之类的消息,有利于了解库的更新历史,以及可以在看库的时候看库开发者的各种小插曲

如果有特殊需求可以看看 background (shalldie) ,我相信大部分人都会很喜欢

posted @ 2025-04-30 21:50  Brakeintime  阅读(190)  评论(0)    收藏  举报