HarmonyOS鸿蒙Next中怎么将rawfile下的文件隔离排除到目标包

HarmonyOS鸿蒙Next中怎么将rawfile下的文件隔离排除到目标包

页面是 H5 的,我们放在 rawfile 下的 prod 或 test 来区分生产和测试 H5,然后通过不同的 Product 来打生产和测试的 APP

有没方法,可以根据 Product 不同来控制哪些 rawfile 下的文件将会被编译导入/隔离排除进目标包,因为现有的方案,我们无论是打生产或测试的 App,都会把 test 和 prod 的 H5 都拷贝到目标包里去,造成了 App 的大小冗余。

6 回复

开发者您好,你这边可以使用配置多目标产物。公共resources放一块,针对生产和测试的H5分别新建resources目录存放。然后在build-profile.json5配置目标产物的时候,针对生产和测试配置相应的resource目录,这样打包出来的rawfile是区分生产和测试的。

【背景知识】

  1. 通常情况下,应用厂商会根据不同的部署环境,不同的目标人群,不同的运行环境等,将同一个应用定制为不同的版本。针对以上场景,DevEco Studio支持通过少量的代码配置以实例化不同的差异版本,在编译构建过程中实现一个应用构建出不同的目标产物版本,从而实现源代码、资源文件等的高效复用。
  2. app.json5:应用全局,定义全局基础信息。
  3. module.json5:应用模块级,定义模块基本信息。
  4. build-profile.json5:分为工程级和模块级,工程级:管理构建部署配置。模块级:提供更细化的构建参数。

【解决方案】

  1. 参考定制多目标构建产物,实现通过编译时不同的配置,生成多个APP的功能,案例参考构建多目标产物工程示例
  2. 参考配置多目标产物-能力说明:构建多个不同的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中的配置。
  3. 参考定义产物的source源码集-pages,实现不同APP,使用不同的页面入口。
  4. 参考定义产物的source源码集-sourceRoots,通过使用差异化代码空间(sourceRoots),可以在主代码空间(src/main)中代码不变的情况下,针对不同的target,编译对应的代码到最终产物中。
  5. 参考定义产物的资源,对main目录下的资源文件目录(resource)进行定制。需要注意,如果target引用的多个资源文件目录下,存在同名的资源,则在构建打包过程中,将按照配置的资源文件目录顺序进行选择。
  6. 参考定义产物的icon、label、launchType,在定制HAP多目标构建产物时,针对每一个target的ability,均可以定制不同的icon、label和launchType。可将配置信息放在资源文件resource中,对icon、label进行动态配置,如果不定义,则该target采用module.json5中module.abilities配置的icon、label,launchType默认为"singleton"。
  7. 参考定义product的签名配置信息,对不同的product产物需要配置对应的签名。需要注意,通过签名配置页面添加签名信息,工程级的build-profile.json5文件中的每个product下添加配置项signingConfig,product下的signingConfig字段与signingConfigs下的name字段一一对应。

【常见FAQ】

Q:是否支持在一个项目下放入多个应用,有不同的包名,使得各个应用能引用到当前工程的共用模块? A:当前规格设计:项目编译期间不支持在一个项目里放入多个不同包名的应用。支持多模块管理,多个应用引用共享模块可以通过发布HAR包到OpenHarmony三方库中心仓,或者发布HSP包至私仓解决,参考开发及引用共享包

Q:无法调试,DevEco Studio提示“ The target can not be empty. Check the build-profile.json5 file of the project root directory and make sure the targets of the modules in configuration is set to specified product: default in applyToProducts.”。 A:需要在模块级build-profile.json5文件中添加"targets"配置,点击"Sync Now",待完成同步后,即可解决该问题(确保工程同步成功)。

更多关于HarmonyOS鸿蒙Next中怎么将rawfile下的文件隔离排除到目标包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在模块的build-profile.json5中配置不同产品形态的资源路径:

{
  "productFlavors": [
    {
      "name": "prod",
      "sources": {
        "rawfile": ["src/main/rawfile/prod"] // 生产环境仅包含prod目录
      }
    },
    {
      "name": "test",
      "sources": {
        "rawfile": ["src/main/rawfile/test"] // 测试环境仅包含test目录
      }
    }
  ]
}

构建时根据选择的Product自动排除无关目录

rawfile说白了就是文件夹,打包前可以将想要的文件夹放进去,不想要的移走。

打包前随便写个脚本移动一下文件夹位置就行了啊!

如果你想全部使用脚本自动打包也很方便~

文档

在HarmonyOS鸿蒙Next中,要将rawfile下的文件排除在目标包外,可以使用oh-package.json5配置文件进行操作。在该文件中设置exclude字段,指定需要排除的文件或目录路径。例如:

{
  "exclude": ["rawfile/exclude_this.file"]
}

这样配置后,指定的文件将不会被打包到最终的HAP中。路径支持通配符匹配,如rawfile/to_exclude/*

在HarmonyOS Next中,可以通过配置模块的build-profile.json5文件来实现rawfile目录下文件的差异化打包。具体解决方案如下:

  1. 在模块目录下创建两个资源目录,例如:
  • src/main/resources/rawfile/prod (生产环境H5)
  • src/main/resources/rawfile/test (测试环境H5)
  1. 在build-profile.json5中配置productFlavors,为不同环境指定不同的资源目录:
"productFlavors": [
  {
    "name": "prod",
    "resourceFilters": [
      "rawfile/prod/*"
    ]
  },
  {
    "name": "test",
    "resourceFilters": [
      "rawfile/test/*"
    ]
  }
]
  1. 构建时使用对应product参数:
  • 生产包:--product prod
  • 测试包:--product test

这样打包时只会包含指定product对应的资源文件,不会包含另一个环境的H5文件,有效减小包体积。

回到顶部