产品经理有个需求,希望某个渠道的渠道包包名加上渠道ID,实现起来也很简单,在gradle里面用manifestPlaceholders替换掉包名就可以了:
// 添加渠道后缀
def suffix = "";
if("xxxx".equals(variant.flavorName)) { //这个渠道包名加上渠道号
suffix = variant.flavorName
}
// 生成包名
flavor.applicationId = defaultConfig.applicationId + suffix
// 替换manifest
flavor.manifestPlaceholders = [package_name: flavor.applicationId]
但是运行时发现友盟的微信登录和分享不可用了,打开友盟的debug开关,登录时候弹出下面这个框:
一开始以为是微信开发者后台配置的问题,检查完appid,包名,签名都确定无误。一筹莫展之下,只好再去看友盟的文档。注意到有一句:
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。
这边强调在在代码目录下
,恍然大悟,友盟是默认包名
+.wxapi.WXEntryActivity
来查找回调的回调activity的,刚才我们在包名后面加了渠道号,但是WXEntryActivity的路径却没变。我们在原包名目录下创建渠道包的文件夹,拷贝wxapi进去,修改里面WXEntryActivity文件的包名,同样也需要manifest文件中声明这个activity。如下图:
bug虽然低级,却几乎花了我一下午时间,所以这边记录一下。
网友评论