组件化引用极光推送,每个组件的build.gradle都需要写manifestPlaceholders

我通过组件化来架构我的项目,壳工程app,依赖组件A和组件B以及基础库C。工程当中需要用到极光推送,因此我在基础库C的build.gradle中加入了

compile 'cn.jiguang.sdk:jpush:3.0.9'  
compile 'cn.jiguang.sdk:jcore:1.1.7'  

同时根据极光SDK的要求,在基础库C的build.gradle中添加了

manifestPlaceholders = [
            JPUSH_PKGNAME: "com.qsjh.test",
            JPUSH_APPKEY : "6pl2c1qloa69ad60061709md", // 我随便写的,不是真实APPKEY
            JPUSH_CHANNEL: "developer-default", 
]

但是编译之后报错:

Error:Execution failed for task ':moduleA:processDebugAndroidTestManifest'.
> Manifest merger failed with multiple errors, see logs

F:\addroidStudioPrjs\TestApp\moduleA\build\intermediates\manifest\tmp\manifestMerger8803862843345368556.xml Error:
Attribute meta-data#PUSH_APPID@value at manifestMerger8803862843345368556.xml requires a placeholder substitution but no value for <JPUSH_APPKEY> is provided.

必须在组件A和组件B的build.gradle文件里也加上同样的这个manifestPlaceholders,但是组件A和组件B的build.gradle中并没有依赖极光SDK,只是依赖了基础库C,这是为什么?

阅读 15.6k
8 个回答

使用 manifestPlaceholders 最终会把配置的 参数 写入到 AndroidManifest 中,你 在 A 和 B 中应该依赖了C 吧,这样 编译 AB 也得要求 在 gradle 中添加,不然就会找不到。

同求答案,今天我也遇到这个问题了,用的个推

这个问题可能需要转变一下思路,组件A、组件B真正依赖的并不是推送,而是推送的内容,因此可以把第三方推送的依赖放在app壳工程,由壳来负责维护推送注册、注销、接收消息,再自己制定一套接口,由壳工程向子模块转发推送的消息,子模块自行对消息进行过滤,从而解除子模块对第三方推送包的直接依赖

新手上路,请多包涵

你好 请问这个问题解决了吗 我也遇到了这个问题

新手上路,请多包涵

基础库中 使用 implementation 方式 广播接收器写在在基础库中 收到消息通过eventBus发送到对应的业务modules

新手上路,请多包涵

已经是2022年11月了,这个问题的解决方案是,
直接把如下代码放在最外层的主app目录的manifest清单文件里即可。

manifestPlaceholders = [
            JPUSH_PKGNAME: "com.qsjh.test",
            JPUSH_APPKEY : "6pl2c1qloa69ad60061709md", 
            JPUSH_CHANNEL: "developer-default", 
]

requires a placeholder substitution but no value for <GETUI_APP_ID> is provided

朋友,你这个报错是个推的,不是JPush的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题