HarmonyOS 鸿蒙Next开发过程中,如何让多个目标物能够分开版本管理?
HarmonyOS 鸿蒙Next开发过程中,如何让多个目标物能够分开版本管理? 开发过程中,如何让多个目标物能够分开版本管理
【背景知识】
- 通常情况下,应用厂商会根据不同的部署环境,不同的目标人群,不同的运行环境等,将同一个应用定制为不同的版本。针对以上场景,DevEco Studio支持通过少量的代码配置以实例化不同的差异版本,在编译构建过程中实现一个应用构建出不同的目标产物版本,从而实现源代码、资源文件等的高效复用。
- app.json5:应用全局,定义全局基础信息。
- module.json5:应用模块级,定义模块基本信息。
- build-profile.json5:分为工程级和模块级,工程级:管理构建部署配置。模块级:提供更细化的构建参数。
【解决方案】
- 参考定制多目标构建产物,实现通过编译时不同的配置,生成多个APP的功能,案例参考构建多目标产物工程示例;
- 参考配置多目标产物-能力说明:构建多个不同的APP,不同product拥有不同的bundle name,根据当前的product配置的信息替换Appscope文件下的app.json5里面的默认内容。app.json5中的icon和label改变的是设置中显示的图标和名称。正常使用DevEco Studio推包安装到手机的是HAP包,而HAP包里的icon和label是由module.json5文件决定的。要在工程级build-profile.json5文件products中配置不同的APP产物,并配置对应icon和label来覆盖app.json5里面的默认内容。HAP包中模块级的build-profile.json5定制对应的target产物,来覆盖module.json5中的配置。
- 参考定义产物的source源码集-pages,实现不同APP,使用不同的页面入口。
- 参考定义产物的source源码集-sourceRoots,通过使用差异化代码空间(sourceRoots),可以在主代码空间(src/main)中代码不变的情况下,针对不同的target,编译对应的代码到最终产物中。
- 参考定义产物的资源,对main目录下的资源文件目录(resource)进行定制。需要注意,如果target引用的多个资源文件目录下,存在同名的资源,则在构建打包过程中,将按照配置的资源文件目录顺序进行选择。
- 参考定义产物的icon、label、launchType,在定制HAP多目标构建产物时,针对每一个target的ability,均可以定制不同的icon、label和launchType。可将配置信息放在资源文件resource中,对icon、label进行动态配置,如果不定义,则该target采用module.json5中module.abilities配置的icon、label,launchType默认为"singleton"。
- 参考定义product的签名配置信息,对不同的product产物需要配置对应的签名。需要注意,通过签名配置页面添加签名信息,工程级的build-profile.json5文件中的每个product下添加配置项signingConfig,product下的signingConfig字段与signingConfigs下的name字段一一对应。
更多关于HarmonyOS 鸿蒙Next开发过程中,如何让多个目标物能够分开版本管理?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
不同版本的怎么解决?
可以在工程的hvigorfile.ts配置,根据不同的product生成不同的版本号
// hvigorfile.ts
import { appTasks, OhosPluginId, OhosAppContext, AppJson } from '@ohos/hvigor-ohos-plugin';
import { hvigor, getNode, HvigorNode } from '@ohos/hvigor';
export default {
system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}
hvigor.nodesEvaluated(() => {
const node: HvigorNode = getNode(__filename);
const appContext = node.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext;
console.log('projectName:', appContext.getProjectName());
const appJson5: AppJson.AppOptObj = appContext.getAppJsonOpt();
const bundleProduct = appContext.getCurrentProduct()
const productName = bundleProduct['productName'];
console.log('productName:----', productName);
if (productName=== 'official') {
appJson5.app.versionCode = 1000001; // 自定义版本号示例
}else if (productName=== 'test') {
appJson5.app.versionCode = 200002; // 自定义版本号示例
}else{
appJson5.app.versionCode = 30000003; // 自定义版本号示例
}
appContext.setAppJsonOpt(appJson5);
});
export default {
system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
},
谢谢;已解决,
在工程根目录的build-profile.json5文件中,通过定义不同的product实现版本分离
{
"products": [
{
"name": "official", // 正式版本
"signingConfig": "officialSign",
"resourceFilters": ["./src/official/**"]
},
{
"name": "test", // 测试版本
"signingConfig": "testSign",
"resourceFilters": ["./src/test/**"]
}
]
}
这个不能解决不同版本号,
在工程级build-profile.json5文件中配置多个product,每个产物对应独立版本:
{
"products": [
{
"name": "official", // 正式版
"signingConfig": "officialSign",
"targets": [{"name": "default"}]
},
{
"name": "test", // 测试版
"signingConfig": "testSign",
"targets": [{"name": "testTarget"}]
}
]
}
还需要配别的吗,
在HarmonyOS应用开发中,使用Hvigor构建系统管理多目标版本。通过配置hvigorfile.ts文件,定义不同目标模块的版本号与依赖关系。利用product和target字段区分编译目标,支持独立版本控制与构建配置。
在HarmonyOS Next开发中,可以通过以下方式实现多个目标物的分开版本管理:
-
使用模块化开发:将不同功能或组件拆分为独立的HAP(Harmony Ability Package)或HSP(Harmony Shared Package),每个模块可独立管理版本号。
-
配置app.json5中的版本信息:在
app.json5
中为每个模块指定独立的versionCode
和versionName
,确保模块升级时版本号独立更新。 -
依赖管理:在
oh-package.json5
中明确声明模块依赖的版本范围,避免版本冲突。 -
使用Git分支或标签:为不同目标物创建独立的分支或标签,通过版本控制工具(如Git)管理代码变更和发布。
-
Hvigor构建配置:利用Hvigor脚本为不同构建变体(如debug/release)或产品风味(flavor)配置独立的版本策略。
通过以上方法,可以灵活管理多个目标物的版本,确保开发、测试和发布的独立性。