云网牛站
所在位置:首页 > HarmonyOS问题与回答 > 在Linux系统下使用DevEco Studio鸿蒙开发工具的方案

在Linux系统下使用DevEco Studio鸿蒙开发工具的方案

2021-06-25 11:32:44作者:jorsion稿源:深度站

问题:如果一定要在Linux操作系统下使用DevEco Studio鸿蒙开发工具,有没有实现的方案?

 

回答:

有,你可以按照以下说明尝试操作:

一、DevEco Studio能在Linux中用playonlinux运行并且能调试hello,亲测在UOS下可行,也可用Wine 6版本尝试安装,如下图所示:

在Linux系统下使用DevEco Studio鸿蒙开发工具的方案

注:如果推出了Linux版,则不能再使用此类方案。参考DevEco Studio没有Linux版本提供,仅支持Windows和Mac系统

二、请参考以下指南操作,由Deepin网友提供:UOS/深度系统安装鸿蒙OS北向应用开发IDE工具DevEco Studio 2 Beta 3

现在分享下我自己在Linux系统上安装鸿蒙OS北向应用开发IDE工具 DevEco Studio 2 Beta 3的经验:

预先安装好构建WINE的编译环境:

sudo apt build-dep wine

下载wine源码,源码下载地址:

https://dl.winehq.org/wine/source/

可使用6.0,wine-6.0.tar.xz。

//////////////////////

解压后进入到wine6.0的源码根目录创建两个子目录用来存放后面构建出来的程序文件:

mkdir -p wine32 wine64

编译安装64位及32位wine

cd wine64

../configure --enable-win64

make -j 4

sudo make install

---------------

cd ../wine32

../configure --with-wine64=../wine64

make -j 4

sudo make install

///////////////////

设置wine的目录和硬件

rm -rf ~/.wine

WINEPREFIX=~/.wine wine64 wineboot

winecfg

启动wine配置程序设置Windows版本为win10

///////////////////

安装中文字体

链接: https://pan.baidu.com/s/1SWTe1Dj485FTJSdKqI6QCA

密码: 4abj

下载后解压出所有字体文件,剪切到wine的c盘Windows/fonts目录内

/////////////

安装wine-mono和wine-gecko

http://mirrors.ustc.edu.cn/wine/wine/wine-mono/5.1.1/wine-mono-5.1.1-x86.msi

http://mirrors.ustc.edu.cn/wine/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86_64.msi

http://mirrors.ustc.edu.cn/wine/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86.msi

wine msiexec /i wine-mono-5.1.1-x86.msi

wine msiexec /i wine-gecko-2.47.2-x86_64.msi

wine msiexec /i wine-gecko-2.47.2-x86.msi

/////////////////////

到鸿蒙OS官网下载北向IDE

https://developer.harmonyos.com/cn/develop/deveco-studio#download

devecostudio-windows-tool-2.0.12.201

因为这IDE安装程序是32位,所以以下目的是从win32安装包里拿到win64的ide程序,还有个办法就是直接从装好的Windows机器里复制出ide的目录到深度系统。

安装deepin-wine5,深度的仓库里这个版本是wine32,深度v20.1目前linux-libc-dev:i386 和 linux-libc-dev:amd64无法同时存在,此种情况不知是个别还是都是这样的问题,所以我上面编译的wine32部分有些库没加全进去,如果你能顺利用上面编译的wine32启动DevEcoStudio的安装程序则不再需要再装deepin-wine5。

sudo apt install deepin-wine5

然后打开应用商店安装【迅雷极速版】(wine),这是为了借用deepin-wine5和迅雷极速版的环境启动deveco studio的安装程序,deveco-studio-2.0.12.201.exe这个安装程序是Nullsoft Installer 生成的自解压win32 GUI文档,我在之前编译的wine64不能直接引导安装。

既然北向IDE下载页面已经明确需要win64环境就请直接提供win64的安装包好吧,一个win32安装程序包着win64程序有意思么。

装好deepin-wine5后在解压出鸿蒙ide安装包程序的同级目录创建一个ins.sh:

--------------------

#!/bin/bash

wine=deepin-wine5

prefix_dir=${HOME}/.deepinwine/Deepin-ThunderSpeed

WINEPREFIX=${prefix_dir} ${wine} ./deveco-studio-2.0.12.201.exe

exit 0

--------------------

chmod +x ins.sh

双击ins.sh,选运行进入安装鸿蒙OS北向IDE

临时安装路径:deepin-wine5的c盘/Program/Huawei/DevEcoStudio,记得所有涉及路径的地方绝对不能有空格也不要有中文。

安装好北向ide后进入~/.deepin-wine的c盘,直接剪切移动Program目录到wine64的c盘,即是:

~/.wine/drive_c/Program/Huawei/DevEcoStudio/,这是IDE最终安装位置。

/////////////////////

下载Nodejs Lts

https://nodejs.org/dist/v14.15.4/node-v14.15.4-win-x64.zip

解压重命名到wine64的~/.wine/drive_c/Program/Huawei/nodejs

然后在wine64的~/.wine/drive_c/创建reg.sh:

---------------------

#!/bin/bash

wine regedit

exit 0

---------------------

chmod +x reg.sh

双击reg.sh,选运行进入注册表找到

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 位置,

双击Path键名,修改键值,在最后位置添加

C:\Program\Huawei\nodejs;c:\Program\Huawei\DevEcoStudio\bin;%JAVA_HOME%\bin;%JAVA_HOME%\bin\jre\bin;c:\Program\Huawei\SDK\toolchains

键classpath值:

.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar

键JAVA_HOME值:

c:\Program\Huawei\DevEcoStudio\jbr

-------------

然后在cmd命令行里设置npm仓库地址

C:\>npm config set registry https://mirrors.huaweicloud.com/repository/npm/

cd ~/.wine/drive_c/Program/Huawei/nodejs

mkdir -p node_global node_cache

在wine cmd或等后面ide能正常启动后再在ide的Terminal窗口里设置以下两项:

设置 npm 全局包下载路径

npm config set prefix "c:\Program\Huawei\nodejs\node_global"

在wine cmd设置 npm 缓存路径

npm config set cache "c:\Program\Huawei\nodejs\node_cache"

验证nodejs

npm info express

/////////////////////////////

进入wine64的~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin

创建devecostudio.sh

---------------------

#!/bin/bash

wine=wine

prefix_dir=${HOME}/.wine

WINEPREFIX=${prefix_dir} ${wine} ${HOME}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio64.exe

exit 0

---------------------

chmod +x devecostudio.sh

/////////////////////////////

然后回到桌面右键选【在终端中打开】,在终端里用vim在桌面创建hos-ide.desktop快捷图标配置文件:

---------------------

[Desktop Entry]

Name=HOS IDE

Type=Application

Exec=bash /home/${USER}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio.sh

Terminal=false

StartupNotify=true

Icon=/home/${USER}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio.svg

X-Deepin-CreatedBy=com.deepin.dde.daemon.Launcher

X-Deepin-AppID=DevEcoStudio

Categories=System;

Comment=DevEco Studio for Harmony OS;

----------------------

注意其中的两个${USER}位置请务必替换成你在系统的用户名

//////////////////////////////////////////

在~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio64.exe.vmoptions

文件最后添加三行:

-Dsun.jnu.encoding=UTF-8

-Dos.version=10.0

-Dos.name=Windows 10

----------------------

保存后回到桌面双击deveco studio快捷图标启动deveco studio 2 beta 3。

////////////////////////////

创建一个鸿蒙App(Java),然后修改gradle-wrapper.properties:

distributionBase=GRADLE_USER_HOME

distributionPath=wrapper/dists

distributionUrl=https\://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.3-all.zip

zipStoreBase=GRADLE_USER_HOME

zipStorePath=wrapper/dists

///////////////////

如果发现你的[File/invalidate cache/restart]的重启命令没法让ide自我重启的话,请按我的以下方法解决:

第一步,装好Golang编译环境。

下载 https://golang.org/dl/go1.15.7.linux-amd64.tar.gz

解压安装:

sudo tar -C /usr/local -xzf go1.15.7.linux-amd64.tar.gz

将 /usr/local/go/bin 目录添加至PATH环境变量,譬如写在~/.bashrc最后:

export PATH=$PATH:/usr/local/go/bin

第二步,重命名原来的restarter.exe为restarter32.exe,记得并不是删除,mv restarter.exe restarter32.exe

第三步,在~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin目录下创建 restarter.go:

----------------------

package main

import (

"fmt"

"log"

"os"

"os/exec"

"path/filepath"

)

func main() {

dir, err := filepath.Abs(filepath.Dir(os.Args[0]))

if err != nil {

log.Fatalln(err)

}

err = os.Chdir(dir)

if err != nil {

log.Fatalln(err)

}

CallExc("taskkill", []string{"/f", "/im", "Previewer.exe"})

CallExc("taskkill", []string{"/f", "/im", "Simulator.exe"})

CallExc("taskkill", []string{"/f", "/im", "node.exe"})

CallExc("taskkill", []string{"/f", "/im", "java.exe"})

CallExc("restarter32", os.Args[1:])

}

func CallExc(proc string, args []string) {

cmd := exec.Command(proc, args...)

b, err := cmd.CombinedOutput()

if err != nil {

fmt.Println("Error:", err)

return

}

fmt.Println(string(b))

return

}

----------------------

执行交叉编译命令:

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o restarter.exe restarter.go

----------------------

则会在同级目录生成64位的Windows程序restarter.exe

这样就修复了ide在Linux上无法重启的bug。

----------------------

下面我们更进一步

写一个引导程序【devecostudio.exe】来监控ide主程序【devecostudio64.exe】,但有退出,则自动关闭尚未自行退出的相关进程

在~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin目录下创建 devecostudio.go:

package main

import (

"fmt"

"log"

"os"

"os/exec"

"path/filepath"

"strconv"

"strings"

"time"

)

func main() {

dir, err := filepath.Abs(filepath.Dir(os.Args[0]))

if err != nil {

log.Fatalln(err)

}

err = os.Chdir(dir)

if err != nil {

log.Fatalln(err)

}

if isProcessExistNix("systemd") {

CallExc("killall", []string{"-9", "wineserver"})

} else {

kills()

CallExc("devecostudio64", os.Args[1:])

for {

time.Sleep(time.Minute)

if b, _, _ := isProcessExistWin("devecostudio64.exe"); !b {

kills()

os.Exit(0)

}

}

}

}

func kills() {

CallExc("taskkill", []string{"/f", "/im", "Previewer.exe"})

CallExc("taskkill", []string{"/f", "/im", "Simulator.exe"})

CallExc("taskkill", []string{"/f", "/im", "node.exe"})

CallExc("taskkill", []string{"/f", "/im", "java.exe"})

if b, _, _ := isProcessExistWin("winedevice.exe"); b {

CallExc("taskkill", []string{"/f", "/im", "*.exe"})

}

}

func isProcessExistNix(appName string) bool {

cmd := exec.Command("ps", "-C", appName)

output, _ := cmd.CombinedOutput()

fields := strings.Fields(string(output))

for _, v := range fields {

if v == appName {

return true

}

}

return false

}

func isProcessExistWin(appName string) (bool, string, int) {

appary := make(map[string]int)

cmd := exec.Command("cmd", "/C", "tasklist")

output, err := cmd.CombinedOutput()

if err != nil {

log.Fatal(err)

}

fmt.Printf("fields: %v\n", output)

n := strings.Index(string(output), "System")

if n == -1 {

log.Println(fmt.Errorf("%s file not found in proc", appName))

return false, appName, -1

}

data := string(output)[n:]

fields := strings.Fields(data)

for k, v := range fields {

if v == appName {

appary[appName], _ = strconv.Atoi(fields[k+1])

return true, appName, appary[appName]

}

}

return false, appName, -1

}

func CallExc(proc string, args []string) {

cmd := exec.Command(proc, args...)

b, err := cmd.CombinedOutput()

if err != nil {

fmt.Println("Error:", err)

return

}

fmt.Println(string(b))

return

}

----------------------

执行交叉编译命令:

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o devecostudio.exe devecostudio.go

----------------------

修改devecostudio.sh

---------------------

#!/bin/bash

wine=wine

prefix_dir=${HOME}/.wine

WINEPREFIX=${prefix_dir} ${wine} ${HOME}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio.exe

exit 0

----------------------

以后如果主程序退出后还有残余进程没退出,devecostudio.exe就会自动关闭并自行退出。

搞定。

在Linux系统下使用DevEco Studio鸿蒙开发工具的方案

注意事项:

要在UOS/Deepin上做鸿蒙OS开发,通过系统附带的deepin-wine成功启动并安装了deveco studio,但是启动时报了一个error 2什么的错误,好似深度自带的不行。

启动配置:

在Linux系统下使用DevEco Studio鸿蒙开发工具的方案

在Linux系统下使用DevEco Studio鸿蒙开发工具的方案

 

说明:

做到有图有真相,以上的操作及成果表明,在Linux下是可以运行DevEco Studio的,只不过安装和配置起来麻烦些。

精选文章
热门文章