g***@163.com
g***@163.com
  • 发布:2024-03-31 13:30
  • 更新:2024-04-01 11:26
  • 阅读:333

【报Bug】通过uts插件引入facebook-android-sdk打自定义基座后,无法找到sdk中对应分享相关的类进行调用

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 专业版 22H2

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: Android

手机系统版本号: Android 10

手机厂商: LG

手机机型: G8 ThinQ

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uts的config.json示例代码如下

{  
  "minSdkVersion": "21",  
  "dependencies": [  
        {  
            "id":"com.facebook.android:facebook-android-sdk",  
            "source": "implementation ('com.facebook.android:facebook-android-sdk:16.3.0') {exclude group:'androidx.core', module:'core-ktx' exclude group:'org.jetbrains.kotlin', module:'kotlin-stdlib-jdk7'}"  
        },  
    ]  
}

除此之外,还尝试过

{  
  "minSdkVersion": "21",  
  "dependencies": [  
        {  
            "id":"com.facebook.android:facebook-android-sdk",  
            "source": "implementation ('com.facebook.android:facebook-share:latest.release') {exclude group:'androidx.core', module:'core-ktx' exclude group:'org.jetbrains.kotlin', module:'kotlin-stdlib-jdk7'}"  
        },  
    ]  
}

以及

{  
  "minSdkVersion": "21",  
  "dependencies": [  
        {  
            "id":"com.facebook.android:facebook-android-sdk",  
            "source": "api ('com.facebook.android:facebook-share:latest.release') {exclude group:'androidx.core', module:'core-ktx' exclude group:'org.jetbrains.kotlin', module:'kotlin-stdlib-jdk7'}"  
        },  
    ]  
}

直接使用

{  
  "minSdkVersion": "21",  
  "dependencies": [  
        “com.facebook.android:facebook-share:latest.release”  
    ]  
}

则会报androidx.core:core-ktx 和 org.jetbrains.kotlin:kotlin-stdlib-jdk7依赖冲突错误

插件中
index.uts 相关代码如下

import ShareLinkContent from 'com.facebook.share.model.ShareLinkContent';  
import MessageDialog from 'com.facebook.share.widget.MessageDialog';  
import { Uri } from 'android.net'  

export type Share = () => void  

export const messengerShare:Share = ()=> {  
    const context = UTSAndroid.getUniActivity()  
    const content = new ShareLinkContent.Builder().setContentUrl(Uri.parse('https://www.baidu.com')).build();  
    MessageDialog.show(context, content)  
}  

AndroidManifest.xml代码如下

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="io.dcloud.uni_modules.xxxxxxxxTest001" >  
  // 注意:这里是插件的包名而不是应用的包名  

   // 配置权限  
   <!--创建前台服务权限-->  
    <uses-permission android:name="android.permission.INTERNET"/>  

    <queries>  
        <provider android:authorities="com.facebook.katana.provider.PlatformProvider" />   
    </queries>  

    <application>  
       // 配置service / activity  
        <activity android:name="com.facebook.FacebookActivity" />  
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="xxxxxxxx"/>  
        <meta-data android:name="com.facebook.sdk.ClientToken" android:value="xxxxxxxx"/>  
        <provider android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxx" android:name="com.facebook.FacebookContentProvider" android:exported="true"/>  
    </application>  
</manifest>  

nvue页面中调用代码如下

import {messengerShare} from "@/uni_modules/xxxxxxxx-test001"  
const testshare =()=>{  
    messengerShare()  
}  

最终调用日志一直报这个错误

12:59:21.939 [JS Framework] Failed to invoke the event handler of "click" on u-text (120):  
 Error: targetMethod error::java.lang.NoClassDefFoundError: com.facebook.share.widget.MessageDialog  
12:59:21.949 reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaScript execute error!Uncaught Error: targetMethod error::java.lang.NoClassDefFoundError: com.facebook.share.widget.MessageDialog

操作步骤:

用以上代码示例即可复现

预期结果:

能够成功调用函数,并拉起分享界面

实际结果:

报以下错误

12:59:21.939 [JS Framework] Failed to invoke the event handler of "click" on u-text (120):  
 Error: targetMethod error::java.lang.NoClassDefFoundError: com.facebook.share.widget.MessageDialog  
12:59:21.949 reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaScript execute error!Uncaught Error: targetMethod error::java.lang.NoClassDefFoundError: com.facebook.share.widget.MessageDialog

并且我在打包的基座,使用LibChecker查看 app引入的nativelibrary的文件中,也没有对应的facebook-sdk,但在activities, boardcast receivers, content provider中都能看到引入的facebook SDK

bug描述:

我正在进行分享到facebook messenger的安卓uts插件开发,根据官方指引及facebook文档在uts插件的config.json中引入了对应的依赖,打了自定义基座的包。
但是当我要调用对应的分享的方法MessageDialog.share的时候,一直报找不到MessageDialog类的错误

2024-03-31 13:30 负责人:无 分享
已邀请:
DCloud_Android_DQQ

DCloud_Android_DQQ

已在QQ联系,发一下复现问题的示例工程

要回复问题请先登录注册