解决cordova-plugin-wechat在Android 11以上平台上无法使用问题

385 阅读2分钟

前提:项目是使用cordova + vue搭建的,之前使用cordova-plugin-wechat插件来实现分享内容到微信的需求。之前使用的是cordova-android@9.1.0,没有发生什么问题,但是最近想要升级一下cordova-android的版本,看了下cordova官方文档,目前已经更新到cordova-android@11.0.0版本了,于是果断升级,但是升级之后却发现微信分享无法使用了。

发现问题之后,马上到网络上搜索,搜索了一大圈,终于找到了两个有用的信息。

  1. 安卓10 分享微信,提示"未安装微信"

image.png

  1. Android 11 系统策略更新,请开发者及时适配

image.png

由于我没有学习过android开发,开始时候不太清楚应该怎么处理,经过摸索,发现其实就是在Android的AndroidManifest.xml文件里添加上这段代码:

<queries>
    <package android:name="com.tencent.mm" />
</queries>

找到这里了 /platforms/android/app/src/main/AndroidManifest.xml这个文件,把上面这段代码放到这个文件的queries标签同级就可以了。

到了这里,我想到一个问题,如果是直接这么改的话是有问题的,因为后面如果其他人拉下来这个项目仓库之后还是无法使用,于是我想到了在config.xml文件里是可以修改AndroidManifest.xml配置的,于是直接在之前的

<platform name="android">
    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <queries>
            <package android:name="com.tencent.mm" />
        </queries>
    </edit-config>
</platform>

这里加上是不是有可以了呢?还不行,打包报错了,接着又继续排查应该怎么修改,我想到在上面edit-config这里的target写的是/manifest/application,这里是对应着AndroidManifest.xml里的application标签,那么直接这么写:

<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/queries"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <package android:name="com.tencent.mm" />
</edit-config>

但是一打包还是报错,我就懵了,我觉得没啥问题了,到后来我觉得是我没有理解edit-config,再次到网上去搜索edit-config,终于让我找到这篇NE20E-S2 V800R010C10SPC500 特性描述 - 系统管理 01

没想到居然在这篇华为路由器的文档里找到了这个 image.png

一看到merge我就联想到了上面edit-config里面的mode="merge",到这里豁然开朗,尝试把cordova-android卸载掉重新装,果然发现AndroidManifest.xml里面默认是没有queries这个标签的,所以就不应该是merge而是create,于是修改为

<edit-config file="AndroidManifest.xml" mode="create" target="/manifest/queries"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <package android:name="com.tencent.mm" />
</edit-config>

果然,到这里打包就没问题了,赶紧打包装到手机上试下,bingo!完全正常!