解除微信回调的Activity必须在包名.wxapi下的限制

2,046 阅读1分钟
  1. 很久以前写过一篇文章:Android打包之多版本、多环境、多渠道。里面主要提到了将测试环境和正式环境的包分成不同的包名,同时安装在手机上,以便我们调试。同时,通过manifest的占位符,动态替换icon和label,让使用者一看这个包的名称和图标,就能知道这是什么环境的包。

  2. 然而,不同的环境分成不同的包名,固然是好用,但是导致了一个问题:微信回调的Activity必须在包名.wxapi。因此呢,为了解决这个问题,我之前都是写一个实际处理回调的AbsWxEntryActivity,然后按照微信的规则新建几个子包,里面新建几个WxEntryActivity继承实际处理的AbsWxEntryActivity,自己啥都不干。

  3. 这个方案也不是说不可以,但是总觉得有点累赘,后来,看ShareLoginLib的源码时发现,它通过activity-alias的targetActivity属性巧妙解决了这个问题:

有了它,.wxapi这个讨厌的尾巴就可以干掉了。activity-alias里面的name都是一个虚拟的占位符而已,会被重定向到实际处理的activity。