H5P.Android icon indicating copy to clipboard operation
H5P.Android copied to clipboard

微信的 wxapi.WXEntryActivity 当使用别名activity-alias时,导致分享时返回错误

Open shengdoushi opened this issue 5 years ago • 0 comments

为了多个 Android 的 flavor 配置,将 wxapi.WXEntryActivity 配置成别名 Activity, 但是 Dcloud 内部会触发 hasWXEntryActivity() 判断失败,导致拉起分享成功,却提示 Unable to send 的错误。

下面是 AndroidManifest.xml 中对 .wxapi.WXEntryActivity 的配置:

        <activity
            android:name="my.wxapi.WXEntryActivity"
            android:label="@string/app_name"
            android:exported="true"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="wxxxxxxxxxxx"/>
            </intent-filter>
        </activity>

        <activity-alias
            android:name="${applicationId}.wxapi.WXEntryActivity"
            android:exported="true"
            android:targetActivity="my.wxapi.WXEntryActivity" />

查了下代码, 应该是 hasWXEntryActivity() 内部的 Class.forName(clsName) 处不能查找到 activity-alias 类导致的。

    private boolean hasWXEntryActivity(Context context) {
        String clsName = context.getPackageName() + ".wxapi.WXEntryActivity";
        try {
            Class.forName(clsName);
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }

https://github.com/dcloudio/H5P.Android/blob/5e7cff24308c9190d3a0eb77a18d91ac9e3b275f/feature/share-weixin/src/io/dcloud/share/mm/WeiXinApiManager.java#L975

shengdoushi avatar Mar 18 '20 06:03 shengdoushi