uni-app 通过uts插件引入facebook-android-sdk打自定义基座后,无法找到sdk中对应分享相关的类进行调用
uni-app 通过uts插件引入facebook-android-sdk打自定义基座后,无法找到sdk中对应分享相关的类进行调用
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows 10 专业版 22H2 | 3.99 | 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
# 操作步骤:
用以上代码示例即可复现
预期结果:
能够成功调用函数,并拉起分享界面
# 实际结果:
报以下错误
```bash
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
更多关于uni-app 通过uts插件引入facebook-android-sdk打自定义基座后,无法找到sdk中对应分享相关的类进行调用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
已在QQ联系,发一下复现问题的示例工程
更多关于uni-app 通过uts插件引入facebook-android-sdk打自定义基座后,无法找到sdk中对应分享相关的类进行调用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni-app 的 UTS 插件引入 facebook-android-sdk
并打自定义基座后,如果无法找到 SDK 中与分享相关的类进行调用,可能的原因和解决方案如下:
1. 确保 facebook-android-sdk
正确引入
- 检查
build.gradle
文件中是否正确引入了facebook-android-sdk
依赖。 - 示例:
dependencies { implementation 'com.facebook.android:facebook-share:latest.version' }
- 确保依赖的版本是最新的,或者是你需要的版本。
2. 检查 UTS 插件的配置
- 确认 UTS 插件在
uts.json
或相关配置文件中正确声明了facebook-android-sdk
的包名和类。 - 示例:
{ "android": { "dependencies": { "facebook-share": "com.facebook.android:facebook-share:latest.version" } } }
3. 在 UTS 中正确调用 SDK 的类
- 确保你在 UTS 代码中正确导入了
facebook-android-sdk
的类。 - 示例:
import { ShareContent } from 'com.facebook.share.model'; import { ShareDialog } from 'com.facebook.share.widget';
- 如果出现无法找到类的错误,检查类名是否正确,或者尝试使用完整的包路径。
4. 检查自定义基座是否包含 SDK
- 确保在打自定义基座时,
facebook-android-sdk
已经被正确打包到 APK 中。 - 可以通过解压 APK 文件,检查
lib
目录下是否有相关的.so
文件,或者检查classes.dex
中是否包含 Facebook 的类。
5. 解决混淆问题
- 如果使用了 ProGuard 或 R8 进行代码混淆,确保在
proguard-rules.pro
中添加了 Facebook SDK 的混淆规则。 - 示例:
-keep class com.facebook.** { *; } -dontwarn com.facebook.**
6. 调试与日志
- 在代码中添加日志,确认是否成功加载了
facebook-android-sdk
的类。 - 示例:
console.log('ShareDialog:', ShareDialog);
- 如果日志输出为
undefined
,说明类未正确加载。
7. 检查 SDK 的初始化
- 确保在调用分享功能之前,已经正确初始化了 Facebook SDK。
- 示例:
import { FacebookSdk } from 'com.facebook.FacebookSdk'; FacebookSdk.sdkInitialize(context);