微信接入WXEntryActivity
- 微信接入的官网:Android接入指南 | 微信开放文档
- 微信SDK接入里面有这么一段说明:在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自 Activity(例如应用程序的包名为 net.sourceforge.simcpux,则新添加的类如下图所示)
并在 manifest 文件里面加上exported、taskAffinity及 launchMode 属性,其中 exported 设置为true,taskAffinity设置为你的包名,launchMode设置为singleTask,例如:
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="填写你的包名"
android:launchMode="singleTask">
</activity>
遇到的问题
-
如果安装官网这样接入,你的应用包名永远不变化,就不会出什么问题,一旦我们包名变更,那么我们就需要重构WXEntryActivity 的包名路径,这是一件很麻烦的事情,如果我们是做SDK开发,里面集成了微信,把WXEntryActivity 的包名路径写死了的话,接入方就没法使用我们的微信功能了
解决问题
- android的AndroidManifest.xml提供了一个activity-alias标签,也就是Activity的别名标签,activity-alias可以目标Activity申明一个别名,要启动目标Activity就可以通过启动别名Activity来启动,根据activity-alias标签的属性功能,我们就可以这样做
<activity android:name="com.mypkg.wechat.WXEntryActivity" android:exported="true" android:launchMode="singleTask" android:taskAffinity="${applicationId}" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity-alias android:name="${applicationId}.wxapi.WXEntryActivity" android:exported="true" android:targetActivity="com.mypkg.wechat.WXEntryActivity" />
- 如果我们是做SDK开发的,com.mypkg.wechat.WXEntryActivity 这个类包名路径就可以写死了,直接将上面的配置打包为aar提供给接入方,接入方项目工程的build.gradle(app)配置的applicationId(即包名)会自动将AndroidManifest.xml中的${applicationId} 替换为设置的包名
- 接入了很多SDK,他们的处理方式也是这样的比如B站、360、应用宝、爱奇艺、三星渠道SDK就是让我们按照类似上面的配置,因为他们聚合了微信SDK
- 有兴趣了解activity-alias标签的作用的可以参考这篇文章activity-alias详解及应用_aspook的博客-CSDN博客_activityalias作用