记一个修改包名导致友盟微信登录失败的低级Bug

产品经理有个需求,希望某个渠道的渠道包包名加上渠道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。如下图:

image.png

bug虽然低级,却几乎花了我一下午时间,所以这边记录一下。

你可能感兴趣的:(记一个修改包名导致友盟微信登录失败的低级Bug)