前语
根据DevEcoStudio4.0Beta2,hvigorVersion为3.0.2,开发了一个项目,上传到了长途仓库,当搭档下载后,却始终无法运转,频频报错,因为API都是使用的9,第一感觉便是开发环境不同,所以,让其发来了他的开发环境,DevEcoStudio3.1.1Release,hvigorVersion为2.4.2,果然是环境不同,那处理方法就简单了,要么晋级IDE,要么hvigorVersion改为当前设备;晋级IDE,的确能够处理,但不是最优之解,究竟为了处理问题,就来一次晋级,一是不方便,二是大多数开发者都喜欢稳定版,晋级为Beta版,着实不肯;那就只能走第二种方法了,但偏偏第二种方法,始终处理不了,查官网,查社区,材料匮乏到几乎没有。
在AndroidStudio中,出现开发环境不同,无非便是更改build.gradle下gradle版别号和gradle-wrapper.properties文件里的版别号,便可轻松处理问题,但在DevEcoStudio中,这种方法好像难以走通,可是又不得不去处理,究竟在很多的场合下,开发环境是很难到达一致的,比如你去下载一个三方库,想运转看看效果,有可能就会遇到开发环境不同,无法运转状况,所以,遇到问题,就要去处理问题,而不是逃避问题,只要这样方可山穷水尽,方可谋福群众。
通过半天的摸索,问题现已修复,尽管现在回忆,感觉问题的处理方法很是简单,可是在无材料,过错提示不明的状况下,处理起来真的无从下手,好在最终没有白忙活一场,所以就总结了一下,假如你在开发HarmonyOS开发中也需求到了此类问题,希望能给你带来一丝协助。
本章的纲要如下:
1、低版别IDE导入高版别项目报错信息
2、材料匮乏,怎么知难而进
3、文件修正,逐步处理问题
4、问题总结
一、低版别IDE导入高版别项目报错信息
当你开发环境低于方针项目开发环境时,在导入项目后就会遇到如下的过错信息。
给出了两种处理途径,一种是更改为本地的hvigorVersion,一种是晋级IDE,当咱们点击蓝色文字时,就会主动触发其处理方法,咱们直接点击第一种。
能够发现,在hvigor-config.json5文件中,已改为你设备的版别号。
编译项目之后,你会发现,毛用没有,尽管没过错了,可是无法运转。
这就到了无解的地步,找不到方针也便是能够运转的模块。
二、材料匮乏,怎么知难而进
遇到如上的问题,肯定是先去官网,社区摸索一通,可是,一点点没有找到处理的方法,没办法,只能自己调研其处理方法,仿照着AndroidStudio类似的过错,来处理DevEcoStudio,因为文件以及构建工具都发生了改变,最终也难以排查出底子问题所在,可是创意却来了,已然IDE能够类比,那么项目相同能够类比。
高版别和低版别,项目结构根本相同,已然无法运转,除了版别号不一致之外,肯定还有部分文件不一致,才导致了项目无法编译,根据这种猜想,针对凹凸版别两个项目一切的文件,采纳了一一类比,通过验证,这种方法是可行的,可是是十分耗时的。
为了削减类比的文件数量,干脆,都采纳空工程的结构,便是类比新创建的项目,最终发现,有多处文件不一致,分别如下:
1、根项目下的hvigorfile.ts文件
4.0以上版别
import { appTasks } from '@ohos/hvigor-ohos-plugin';
export default {
system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}
4.0以下版别
// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
export { appTasks } from '@ohos/hvigor-ohos-plugin';
2、entry(主模块)下的hvigorfile.ts文件
4.0以上版别
import { hapTasks } from '@ohos/hvigor-ohos-plugin';
export default {
system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}
4.0以下版别
// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
export { hapTasks } from '@ohos/hvigor-ohos-plugin';
3、根项目下的build-profile.json5文件
4.0以上版别
{
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"signingConfig": "default",
}
],
"buildModeSet": [
{
"name": "debug",
},
{
"name": "release"
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
}
4.0以下版别
{
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"signingConfig": "default",
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
}
4、根项目下的hvigorw文件(能够疏忽)
hvigorw文件尽管查出来了不一致,可是只要一行内容不同,HVIGOR_APP_HOME=”pwd-P
“和HVIGOR_APP_HOME=(dirname(dirname(readlink-f$0)),后续通过验证,没什么用,所以这个文件,我们能够疏忽,不用修正这个文件。
4.0以上版别
#!/bin/bash
# ----------------------------------------------------------------------------
# Hvigor startup script, version 1.0.0
#
# Required ENV vars:
# ------------------
# NODE_HOME - location of a Node home dir
# or
# Add /usr/local/nodejs/bin to the PATH environment variable
# ----------------------------------------------------------------------------
HVIGOR_APP_HOME="`pwd -P`"
HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
warn() {
echo ""
echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}
error() {
echo ""
echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}
fail() {
error "$@"
exit 1
}
# Determine node to start hvigor wrapper script
if [ -n "${NODE_HOME}" ];then
EXECUTABLE_NODE="${NODE_HOME}/bin/node"
if [ ! -x "$EXECUTABLE_NODE" ];then
fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed"
fi
else
EXECUTABLE_NODE="node"
which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
fi
# Check hvigor wrapper script
if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then
fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
fi
# start hvigor-wrapper script
exec "${EXECUTABLE_NODE}" \
"${HVIGOR_WRAPPER_SCRIPT}" "$@"
4.0以下版别
#!/bin/bash
# ----------------------------------------------------------------------------
# Hvigor startup script, version 1.0.0
#
# Required ENV vars:
# ------------------
# NODE_HOME - location of a Node home dir
# or
# Add /usr/local/nodejs/bin to the PATH environment variable
# ----------------------------------------------------------------------------
HVIGOR_APP_HOME=$(dirname $(readlink -f $0))
HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
warn() {
echo ""
echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}
error() {
echo ""
echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}
fail() {
error "$@"
exit 1
}
# Determine node to start hvigor wrapper script
if [ -n "${NODE_HOME}" ];then
EXECUTABLE_NODE="${NODE_HOME}/bin/node"
if [ ! -x "$EXECUTABLE_NODE" ];then
fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed"
fi
else
EXECUTABLE_NODE="node"
which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
fi
# Check hvigor wrapper script
if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then
fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
fi
# start hvigor-wrapper script
exec "${EXECUTABLE_NODE}" \
"${HVIGOR_WRAPPER_SCRIPT}" "$@"
三、文件修正,逐步处理问题
通过凹凸项目文件一一比照,一个新的项目也就三处文件不相同(另一个能够疏忽),分别是根项目的hvigorfile.ts文件,根项目的build-profile.json5文件和模块中的hvigorfile.ts文件,当然了,新的项目只要一个模块,假如有多个模块,那么就不止三处了,需求留意的是,不管几个模块,hvigorfile.ts文件必须要都要修正,和低版别保持一致。
1、根项目的hvigorfile.ts文件修正
修正前
import { hapTasks } from '@ohos/hvigor-ohos-plugin';
export default {
system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}
修正后
export { hapTasks } from '@ohos/hvigor-ohos-plugin';
留意:并不是简简单单把下面的代码删去,还要把import改为export,不然就会报如下过错,一开始,我就粗心了忘了改,这个错也折磨了好大一会。
2、根项目的build-profile.json5文件修正
当你把根项目的hvigorfile.ts文件修正之后,刻不容缓地编译后,就会报如下地过错,所以啊,尽量一致修正悉数文件后再编译,不然就会各式问题扑面而来。
修正前
{
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"signingConfig": "default",
}
],
"buildModeSet": [
{
"name": "debug",
},
{
"name": "release"
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
}
修正后
也便是把buildModeSet字段删去。
{
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"signingConfig": "default",
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
}
3、主模块中的hvigorfile.ts文件修正
假如以上两个文件你更改之后,仍然操控不住自己,仍然刻不容缓地进行编译,不好意思,你依然会遇到如下过错,所以啊,铁子,听人劝吃饱饭,必定要把一切的文件都更改后,再编译,就不会遇到过错了。
修正前
import { hapTasks } from '@ohos/hvigor-ohos-plugin';
export default {
system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}
修正后
export { hapTasks } from '@ohos/hvigor-ohos-plugin';
留意:并不是简简单单把下面的代码删去,还要把import改为export,不然还会报错。
4、成功编译且运转
以上三个文件修正之后,便能够成功编译和运转。
四、问题总结
1、最重要的是修正每个模块下的hvigorfile.ts文件,有几个就修正几个,千万不要遗漏。
2、hvigorfile.ts文件下的文件修正,除了删去代码,还要把import改为export,不然还会报错。
3、主模块与动态同享包和静态同享包模块的修正方法不相同,需求了解,一个是hapTasks,一个是harTasks。
主模块/动态同享包
export { hapTasks } from '@ohos/hvigor-ohos-plugin';
静态同享包
export { harTasks } from '@ohos/hvigor-ohos-plugin';
4、假如你有多个模块,需求在根项目的build-profile.json5文件中的,modules中进行添加模块,如下所示:
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
},
{
"name": "xx",
"srcPath": "./xx"
}
]
好了,本篇文章就到这儿了,假如你也遇到了类似问题,希望能够协助到你。