鸿蒙NEXT开发【配置文件说明build-profile.json5】DevEco Studio编译构建

build-profile.json5文件分为工程级与模块级,其中buildOption在工程级文件和模块级文件均可配置,其中相同字段以模块级的字段为准,不同字段模块级的buildOption配置会继承工程级配置。

工程级

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工程级build-profile.json5的示例如下所示:

{
  "app": { 
    //工程的签名信息,可包含多个签名信息
    "signingConfigs": [  
      {
        "name": "default",  //标识签名方案的名称,用户可自定义
        "type": "HarmonyOS",  //标识 HarmonyOS 应用
        //该方案的签名材料
        "material": {  
          "certpath": "D:\\SigningConfig\\debug_hos.cer",  //调试或发布证书文件,格式为.cer
          "storePassword": "******",  //密钥库密码,以密文形式呈现
          "keyAlias": "debugKey",  //密钥别名信息
          "keyPassword": "******",  //密钥密码,以密文形式呈现
          "profile": "D:\\SigningConfig\\debug_hos.p7b",  //调试或发布证书 Profile文件,格式为.p7b 
          "signAlg": "SHA256withECDSA",  //密钥库signAlg参数
          "storeFile": "D:\\SigningConfig\\debug_hos.p12"  //密钥库文件,格式为.p12
        }
      }
    ],
    //定义构建的产品品类,如通用默认版、付费版、免费版等
    "products": [  
      {
        "name": "default",  //定义产品的名称,支持定制多product目标产物
        "signingConfig": "default",  //指定当前产品品类对应的签名信息,签名信息需要在signingConfigs中进行定义
        "compatibleSdkVersion": "5.0.0(12)",  //指定应用/服务兼容的最低版本
        "targetSdkVersion": "5.0.0(12)",  //指定应用/服务目标版本
        "runtimeOS": "HarmonyOS",  //指定为HarmonyOS
      }
    ],
    // 构建模式的集合,每个构建模式是指在执行不同target任务时使用何种构建配置的一套方案,默认打包hap时使用debug,打包app时使用release
    "buildModeSet": [
      {
        "name": "debug",   //定义构建模式的类型名称,系统默认给出test、debug和release,用户也可以自定义
        "buildOption": {   //配置项目在构建过程中使用的相关配置
          "packOptions": {  //包配置选项,可用于构建app时避免生成签名的hap
            "buildAppSkipSignHap": false
          },
          "debuggable": true,
          "resOptions": {
            "compression": {
              "media": {
                "enable": true // 是否对media图片启用纹理压缩
              },
              // 纹理压缩文件过滤,非必填,不填会压缩资源目录中的所有图片
              "filters": [
                {
                  "method": {
                    "type": "sut", // 转换类型
                    "blocks": "4x4" // 转换类型的扩展参数
                  },
                  // 指定用来参与压缩的文件,需要满足所有条件且不被exclude过滤的文件才会参与压缩
                  "files": {
                    "path": ["./**/*"], // 指定资源目录中的所有文件
                    "size": [[0, '10k']], // 指定大小10k以下的文件
                    // 指定分辨率小于2048*2048的图片
                    "resolution": [
                      [
                        { "width": 0, "height": 0 }, // 最小宽高
                        { "width": 2048, "height": 2048 } // 最大宽高
                      ]
                    ]
                  },
                  // 从files中剔除掉不需要压缩的文件,需要满足所有过滤条件的文件才会被剔除
                  "exclude": {
                    "path": ["./**/*.jpg"], // 过滤所有jpg文件
                    "size": [[0, '1k']], // 过滤大小1k以下的文件
                    // 过滤分辨率小于1024*1024的图片
                    "resolution": [
                      [
                        { "width": 0, "height": 0 }, // 最小宽高
                        { "width": 1024, "height": 1024 } // 最大宽高
                      ]
                    ]
                  }
                }
              ]
            }
          },
          //cpp相关编译配置
          "externalNativeOptions": {
            "path": "./entry/src/main/cpp/CMakeLists.txt",  //CMake配置文件,提供CMake构建脚本
            "arguments": [],  //传递给CMake的可选编译参数
            "abiFilters": [  //HarmonyOS当前支持的ABI编译环境
              "arm64-v8a",
              "x86_64"
            ],
            "cppFlags": ""  //设置C++编译器的可选参数
          },
          "sourceOption": {   //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理
            "workers": []
          },
          //配置筛选har依赖.so资源文件的过滤规则
          "nativeLib": {
             "filter": {
               //按照.so文件的优先级顺序,打包最高优先级的.so文件
               "pickFirsts": [
                 "**/1.so"
               ],
               //按照.so文件的优先级顺序,打包最低优先级的.so文件
               "pickLasts": [
                 "**/2.so"
               ],
               //根据正则表达式排除匹配到的.so文件,匹配到的so文件将不会被打包
               "excludes": [
                 "**/3.so", //排除所有名称为“3”的so文件
                 "**/x86_64/*.so" //排除所有x86_64架构的so文件
               ],
               //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
               "enableOverride": true
            }
          },
        }
      }   
    ]
  },
  "modules": [
    {
      "name": "entry",  //模块名称,须与模块中module.json5文件中的module.name保持一致
      "srcPath": "./entry",  //标明模块根目录相对工程根目录的相对路径
      "targets": [  //定义构建的APP产物,由product和各模块定义的targets共同定义
        {
          "name": "default",  //target名称,由各个模块的build-profile.json5中的targets字段定义
          "applyToProducts": [  
            "default"   //表示将该模块下的"default" Target打包到"default" Product中
          ]
        }
      ]
    }
  ]
}

模块级

下表为"Ability"类型的Module(HAP)对应的模块级build-profile.json5中配置项包含的字段,"Library"类型的Module(HAR和HSP)对应的模块级build-profile.json5中配置项为下表罗列范围的子集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模块级build-profile.json5的示例如下所示:

{
  "apiType": "stageMode",  //API类型,支持FA(faMode) 和 Stage(stageMode)模型
  "showInServiceCenter": true,  //是否在服务中心展示
  "buildOption": {  //配置项目在构建过程中使用的相关配置
    //配置筛选har依赖.so资源文件的过滤规则
    "nativeLib": {
       "filter": {
          //按照.so文件的优先级顺序,打包最高优先级的.so文件
          "pickFirsts": [
             "**/1.so"
           ],
           //按照.so文件的优先级顺序,打包最低优先级的.so文件
           "pickLasts": [
              "**/2.so"
           ],
           //根据正则表达式排除匹配到的.so文件,匹配到的so文件将不会被打包
           "excludes": [
              "**/3.so", //排除所有名称为“3”的so文件
              "**/x86_64/*.so //排除所有x86_64架构的so文件
           ],
           //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
           "enableOverride": true
       }
    },
    "sourceOption": {   //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理
      "workers": []
    },
    //cpp相关编译配置
    "externalNativeOptions": {
      "path": "./src/main/cpp/CMakeLists.txt",  //CMake配置文件,提供CMake构建脚本
      "arguments": [],  //传递给CMake的可选编译参数
      "abiFilters": [  //HarmonyOS当前支持的ABI编译环境
        "arm64-v8a",
        "x86_64"
      ],
      "cppFlags": ""  //设置C++编译器的可选参数
    },
    //ArkTS编译配置
    "arkOptions":{
      "types":[]  //配置d.ts/d.ets的相对路径或包名,用于使用自定义的声明类型
    },
  },
  "buildOptionSet": [  //buildOption的集合,
    {
      "name": "release",  //定义buildOption的名字,取值有default、debug 和 release,也可自定义
      "arkOptions": {
        "obfuscation": {  //针对release模式下的配置
          "ruleOptions": {
            "enable": false,   // 5.0.3.600及以上版本,默认为false
            "files": [   //混淆文件的相对路径
              "./obfuscation-rules.txt"
            ]
          },
          "consumerFiles": './consumer-rules.txt' //仅Static Library模块可配置:默认导出的混淆规则
        }
      },
      "debuggable": true,  //定义编译模式是否为debug
      "copyFrom": "release",  //从指定的buildOption中复制相关配置
      "resOptions": {
        "compression": {
          "media": {
            "enable": true // 是否对media图片启用纹理压缩
          },
          // 纹理压缩文件过滤,非必填,不填会压缩资源目录中的所有图片
          "filters": [
            {
              "method": {
                "type": "sut", // 转换类型
                "blocks": "4x4" // 转换类型的扩展参数
              },
              // 指定用来参与压缩的文件,需要满足所有条件且不被exclude过滤的文件才会参与压缩
              "files": {
                "path": ["./**/*"], // 指定当前模块资源目录中的所有文件
                "size": [[0, '10k']], // 指定大小10k以下的文件
                // 指定分辨率小于2048*2048的图片
                "resolution": [
                  [
                    { "width": 0, "height": 0 }, // 最小宽高
                    { "width": 2048, "height": 2048 } // 最大宽高
                  ]
                ]
              },
              // 从files中剔除掉不需要压缩的文件,需要满足所有过滤条件的文件才会被剔除
              "exclude": {
                "path": ["./**/*.jpg"], // 过滤所有jpg文件
                "size": [[0, '1k']], // 过滤大小1k以下的文件
                // 过滤分辨率小于1024*1024的图片
                "resolution": [
                  [
                    { "width": 0, "height": 0 }, // 最小宽高
                    { "width": 1024, "height": 1024 } // 最大宽高
                  ]
                ]
              }
            }
          ]
        }
      },
      //cpp相关编译配置
      "externalNativeOptions": {
        "path": "./src/main/cpp/CMakeLists.txt",  //CMake配置文件,提供CMake构建脚本
        "arguments": [],  //传递给CMake的可选编译参数
        "abiFilters": [  //HarmonyOS当前支持的ABI编译环境
          "arm64-v8a",
          "x86_64"
        ],
        "cppFlags": ""  //设置C++编译器的可选参数
      },
      "sourceOption": {   //使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理
        "workers": []
      },
      //配置筛选har依赖.so资源文件的过滤规则
      "nativeLib": {
          "filter": {
            //按照.so文件的优先级顺序,打包最高优先级的.so文件
            "pickFirsts": [
              "**/1.so"
            ],
            //按照.so文件的优先级顺序,打包最低优先级的.so文件
            "pickLasts": [
              "**/2.so"
            ],
            //根据正则表达式排除匹配到的.so文件,匹配到的so文件将不会被打包
            "excludes": [
              "**/3.so"
            ],
            //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
            "enableOverride": true
         }
      },
    }
  ],
  "buildModeBinder": [   //构建模式与构建配置的关联配置,通过该配置可以将不同的构建配置和target进行组合,并绑定到对应的构建模式上,其中构建模式需要在工程级别的构建模式列表中
    {
      "buildModeName": "debug",
      "mappings": [   //构建模式绑定中的具体映射表,描述的是target和构建配置的一对一的关系
        {
          "targetName": "default",
          "buildOptionName": "release"
        }
      ]
    }
  ],
  "targets": [  //定义的target,开发者可以定制不同的target,具体请参考配置多目标构建产物章节
    {
      "name": "default",
    },
    {
      "name": "ohosTest",
    }    
  ]
}

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

<think>嗯,用户遇到了在构建HarmonyOS应用时的签名失败问题,错误信息是“Signing failed error in build process”,需要重新配置签名或者清除文件夹来解决。根据用户提供的引用内容,特别是引用[1]和[2],我需要先理解HarmonyOS Next的签名机制和常见问题。 首先,引用[1]提到HarmonyOS Next的签名配置在工程级的build-profile.json5文件中。自动签名会导致每个人的本地路径不同,多人协作时可能会冲突,因为git无法忽略这个文件。而用户clone的代码可能已经包含作者的签名配置,导致路径不一致,从而签名失败。引用[2]也指出,当项目配置的签名路径不存在时,会出现找不到签名的错误。 接下来,我需要考虑用户可能的操作步骤。用户可能直接克隆了项目,但原作者的签名路径在本地不存在,所以构建失败。解决方案可能需要重新配置签名或者清除原有的签名配置。 可能的解决步骤包括:清除原有签名配置,重新生成自动签名,或者手动配置统一路径。但自动签名可能导致build-profile.json5文件中的路径不一致,所以手动配置可能更可靠。另外,检查是否忽略了build-profile.json5文件,但根据引用[1],该文件不能忽略,所以需要团队统一配置或使用相对路径。 另外,可能需要清理构建文件夹,因为旧的缓存可能导致问题。比如删除build目录或执行clean操作。 总结,解决方案应该是:首先尝试清除原有配置和构建缓存,然后重新配置签名,可以选择自动或手动。如果自动签名导致路径问题,手动配置统一的路径,并确保团队成员的路径一致。或者让每个成员生成自己的签名,但路径可能不同,这样可能需要调整git策略,但引用[1]提到无法忽略该文件,所以可能需要手动处理。 最后,生成相关问题时要围绕HarmonyOS签名机制、多人协作配置、自动签名与手动签名的差异,以及解决签名错误的其他方法。</think>### 解决方案 #### 1. 清除原有签名配置和构建缓存 若项目克隆后因签名路径不一致导致失败,需清除旧配置: - **删除`build-profile.json5`中的签名字段**:定位到`signingConfig`相关配置并移除,避免残留错误路径[^1] - **清理构建缓存**:删除项目根目录下的`build`文件夹或执行`hvigor clean`命令 #### 2. 重新配置签名 **方法1:使用自动签名** 在DevEco Studio中: 1. 打开`File > Project Structure > Project > Signing Configs` 2. 勾选`Automatically generate signing`,系统将生成新签名并更新`build-profile.json5` 3. 注意:需确保团队成员各自生成签名后提交`build-profile.json5`的变更,或通过脚本统一路径 **方法2:手动统一签名路径** 1. 团队协商统一签名文件存储路径(如`项目根目录/signing/xxx.p7b`) 2. 修改`build-profile.json5`中`signingConfigs`的路径为相对路径: ```json "signingConfigs": [ { "name": "release", "material": { "certpath": "signing/release.p7b", "storePassword": "******", "keyAlias": "******", "keyPassword": "******", "storeFile": "signing/release.p12", "profile": "signing/yourProfile.p7b" } } ] ``` 3. 将签名文件放入约定目录并添加到.gitignore中,避免提交到仓库[^2] #### 3. 验证构建 执行`hvigor assembleRelease`重新构建,观察签名步骤是否通过 --- ### 相关问题 1. HarmonyOS应用签名与Android签名机制的主要区别是什么? 2. 如何通过脚本自动化处理多人协作中的签名路径问题? 3. 签名文件泄露会导致哪些安全风险?如何防范? 4. 为什么HarmonyOS Next要求严格的签名机制?与iOS有何相似性? : Android和HarmonyOS签名机制的核心差异在于配置文件的集中管理方式,后者通过工程级配置实现更严格的签名控制 [^2]: 签名路径冲突是多人协作常见问题,需通过约定或自动化工具规避
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值