uni-app 安卓原生插件爆weex相关错误
uni-app 安卓原生插件爆weex相关错误
项目信息 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.99 |
手机系统 | Android |
手机系统版本号 | Android 12 |
手机厂商 | 荣耀 |
手机机型 | 荣耀60SE |
页面类型 | nvue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
<oxVideo ref='video' :loadGif='boxLoadGif' :showLoad='boxShowLoad' :isLive='boxIsLive' :callback='boxCallback'
data='dataList' :style='boxStyle'></oxVideo>
操作步骤:
- 使用oxVideo插件
预期结果:
- 组件正常运行
实际结果:
- 报错
bug描述:
reportJSException >>> exception function:callAddElement, exception:java.lang.NullPointerException: Attempt to invoke virtual method 'com.taobao.weex.dom.WXAttr com.taobao.weex.ui.component.WXComponent.getAttrs()' on a null object reference
at com.taobao.weex.ui.RenderContextImpl.registerComponent(RenderContextImpl.java:86)
at com.taobao.weex.ui.WXRenderManager.registerComponent(WXRenderManager.java:307)
at com.taobao.weex.ui.action.GraphicActionAbstractAddElement.createComponent(GraphicActionAbstractAddElement.java:62)
at com.taobao.weex.ui.action.GraphicActionAddElement.<init>(GraphicActionAddElement.java:86)
at com.taobao.weex.bridge.WXBridgeManager.callAddElement(WXBridgeManager.java:2856)
at com.taobao.weex.bridge.WXBridge.callAddElement(WXBridge.java:572)
at com.taobao.weex.base.SystemMessageHandler.nativeRunWork(Native Method)
at com.taobao.weex.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:104)
at android.os.Handler.dispatchMessage(Handler.java:109)
at android.os.Looper.loopOnce(Looper.java:206)
at android.os.Looper.loop(Looper.java:296)
at android.os.HandlerThread.run(HandlerThread.java:67)
2 回复
同样遇到,一模一样的错误,我是装了个ijkplayer的原生安卓插件
在 uni-app 开发中,如果你在集成安卓原生插件时遇到了与 Weex 相关的错误,可能是由于以下原因导致的。以下是一些常见的排查步骤和解决方法:
1. 确保 uni-app 与 Weex 版本兼容
- uni-app 底层使用 Weex 进行原生渲染,因此需要确保 uni-app 和 Weex 的版本是兼容的。
- 检查你的 uni-app 和 Weex 版本是否匹配,尤其是如果你使用的是较新的 uni-app 版本,可能需要更新 Weex 相关的依赖。
2. 检查原生插件的依赖
- 如果原生插件依赖了 Weex 相关的库,确保这些库的版本与 uni-app 的 Weex 版本一致。
- 在
build.gradle
中,检查是否有类似com.taobao.android:weex_sdk
的依赖,并确保其版本正确。
3. 检查插件初始化代码
- 确保原生插件的初始化代码没有与 Weex 冲突。
- 如果插件在初始化时调用了 Weex 的 API,确保这些 API 在 uni-app 环境中是可用的。
4. 排查 Weex 模块加载问题
- 如果错误提示与 Weex 模块加载相关(例如
ModuleNotFound
或ClassNotFoundException
),可能是某些 Weex 模块未正确加载。 - 检查 uni-app 的
manifest.json
文件,确保所有需要的原生模块已正确配置。
5. 检查插件与 uni-app 的交互
- uni-app 通过 Weex 与原生插件进行通信,确保插件与 uni-app 的交互方式正确。
- 例如,如果插件通过
WXModule
或WXComponent
与 uni-app 交互,确保这些类的实现符合 uni-app 的要求。
6. 调试日志
- 打开调试日志,查看具体的错误信息。可以在
Android Studio
的Logcat
中查看详细的堆栈信息。 - 如果错误与 Weex 相关,通常会看到类似
WeexException
或WXSDKEngine
的日志。
7. 更新 uni-app 和插件
- 确保你使用的 uni-app 和插件是最新版本。旧版本可能存在已知的兼容性问题。
- 可以通过以下命令更新 uni-app:
npm install @dcloudio/uni-app -g
8. 参考官方文档和社区
- 查阅 uni-app 官方文档中关于原生插件开发的说明: uni-app 原生插件开发指南
- 在 uni-app 社区或 GitHub 上搜索类似问题,看看是否有其他开发者遇到并解决了相同的问题。
9. 示例代码
以下是一个简单的原生插件示例,确保其与 Weex 兼容:
public class MyModule extends WXModule {
@JSMethod(uiThread = true)
public void showToast(String message) {
Toast.makeText(mWXSDKInstance.getContext(), message, Toast.LENGTH_SHORT).show();
}
}
在 build.gradle
中添加依赖:
implementation 'com.taobao.android:weex_sdk:0.28.0'