HarmonyOS 配置多目标产物如何处理同名资源

集成agc时,我们app有区分prd,uat,等环境,根据环境编译不同的hap包,本项目通过指导文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-customized-multi-targets-and-products-guides-0000001731595144

进行多目标产物配置,引用文档【请注意,如果target引用的多个资源文件目录下,存在同名的资源,则在构建打包过程中,将按照配置的资源文件目录顺序进行选择。

例如,上述付费版target引用的资源中,resource_default和resource_pay中存在同名的资源文件,则resource_default中的资源会被打包到HAP中。】

agc配置有生产配置和测试环境配置,我们如何根据目标产物比如prd,uat,来集成agc的配置?

如果我把prd的资源目录放在resource[]配置的第一个,会编译报错,提示找不到media相关资源,因为prd资源目录下只有agc的json文件

附件是我们的工程配置结构

HarmonyOS 配置多目标产物如何处理同名资源-鸿蒙开发者社区

HarmonyOS
2024-08-23 22:54:54
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
鱼弦CTO
1

根据你的描述,HarmonyOS 项目需要进行多目标产物配置,并且在不同的环境(如 prd, uat)下使用不同的 AGC 配置文件。以下是一个通过调整资源目录顺序来解决同名资源冲突的方法,并保证 AGC 配置文件正确集成的示例。

### 目录结构示例

假设你的项目目录结构如下:

project
│
├── src
│   ├── main
│   │   ├── resources
│   │   │   ├── base
│   │   │   │   ├── media
│   │   │   │   │   ├── icon.png
│   │   │   │   └── agc
│   │   │   │       └── agconnect-prd.json
│   │   │   ├── uat
│   │   │   │   ├── media (空目录)
│   │   │   │   └── agc
│   │   │   │       └── agconnect-uat.json
│   │   │   ├── prd
│   │   │   │   ├── media (空目录)
│   │   │   │   └── agc
│   │   │   │       └── agconnect-prd.json
│   │   │   ├── ...

### 配置多目标产物

在 ​​build.gradle​​ 文件中配置多目标产物时,你可以指定不同的资源目录。为了避免覆盖媒体资源,可以将公用资源放在一个通用目录中,如 ​​base​​,并将特定的配置文件放在各自的目标目录中。

ohos {
    buildProfile {
        targets {
            default {
                // 通用资源目录
                sourceSets {
                    main {
                        resources.srcDirs = ['src/main/resources/base']
                    }
                }
            }

            prd {
                // prd 环境特定资源目录
                sourceSets {
                    main {
                        resources.srcDirs += ['src/main/resources/prd']
                    }
                }
            }

            uat {
                // uat 环境特定资源目录
                sourceSets {
                    main {
                        resources.srcDirs += ['src/main/resources/uat']
                    }
                }
            }
        }
    }
}

### 动态选择 AGC 配置文件

在代码中动态加载 AGC 配置文件。在初始化 AGC SDK 时,根据当前环境(target)选择合适的 ​​agconnect-services.json​​ 文件。

假设你有一个工具类 ​​AGCTools​​ 来处理 AGC 初始化:

import com.huawei.agconnect.AGConnectInstance;

public class AGCTools {
    public static void init(Context context) {
        String target = BuildConfig.BUILD_TYPE; // 或者其他方法获取当前环境
        int resId = R.raw.agconnect_default;
        
        if ("prd".equals(target)) {
            resId = R.raw.agconnect_prd;
        } else if ("uat".equals(target)) {
            resId = R.raw.agconnect_uat;
        }

        try (InputStream inputStream = context.getResources().openRawResource(resId)) {
            AGConnectInstance.initialize(context, inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

### 资源文件存放位置

你需要将不同环境的 ​​agconnect-services.json​​ 文件分别命名为 ​​agconnect_prd.json​​ 和 ​​agconnect_uat.json​​,然后放在相应的资源目录 (​​raw​​) 中,例如:

src
├── main
│   ├── resources
│   │   ├── base
│   │   │   └── raw
│   │   │       └── agconnect_default.json
│   │   ├── prd
│   │   │   └── raw
│   │   │       └── agconnect_prd.json
│   │   ├── uat
│   │   │   └── raw
│   │   │       └── agconnect_uat.json
├── ...

### 完整配置示例

综合考虑以上步骤,确保你的项目和配置文件正确无误,你应该能够成功地根据不同的目标产物编译不同的 HAP 包,并正确集成对应环境的 AGC 配置文件。

希望这些步骤能帮助你在 HarmonyOS 项目中进行多目标产物配置。如果还有其他问题,也欢迎继续讨论。

分享
微博
QQ
微信
回复
2024-08-26 17:52:11
zxjiu

如果是想打对应的json到hap包里面的,同一个target下配置了多份资源目录的话,只会打第一个资源目录的同名资源到hap包里;

3种方式:

1、不要将资源同名;

2、将需要打进hap包资源放到配置的第一项;

3、对entry模块增加一个target 进行差异化。

分享
微博
QQ
微信
回复
2024-08-23 22:55:55
相关问题
如何定制构建多目标产物
835浏览 • 2回复 待解决
HarmonyOS如何建立多目标的工程呢
321浏览 • 1回复 待解决
har多目标,多值问题如何解决?
417浏览 • 1回复 待解决
HarmonyOS 大整数如何处理
488浏览 • 1回复 待解决
HarmonyOS 图片上传文件过大如何处理
35浏览 • 1回复 待解决
HarmonyOS应用如何处理用户权限请求?
195浏览 • 0回复 待解决
如何处理Redis的内存优化?
2896浏览 • 1回复 待解决
鸿蒙应用如何处理异步请求?
178浏览 • 0回复 待解决
应用线程过多时如何处理
1896浏览 • 1回复 待解决
在ArkTS中如何处理耗时操作?
531浏览 • 1回复 待解决
求大佬告知如何处理大整数
453浏览 • 1回复 待解决
如何处理复杂 SVG 图形的交互?
140浏览 • 0回复 待解决
注册监听关机事件,该如何处理
792浏览 • 1回复 待解决