uni-app 安卓原生插件爆weex相关错误

发布于 1周前 作者 itying888 来自 Uni-App

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 模块加载相关(例如 ModuleNotFoundClassNotFoundException),可能是某些 Weex 模块未正确加载。
  • 检查 uni-app 的 manifest.json 文件,确保所有需要的原生模块已正确配置。

5. 检查插件与 uni-app 的交互

  • uni-app 通过 Weex 与原生插件进行通信,确保插件与 uni-app 的交互方式正确。
  • 例如,如果插件通过 WXModuleWXComponent 与 uni-app 交互,确保这些类的实现符合 uni-app 的要求。

6. 调试日志

  • 打开调试日志,查看具体的错误信息。可以在 Android StudioLogcat 中查看详细的堆栈信息。
  • 如果错误与 Weex 相关,通常会看到类似 WeexExceptionWXSDKEngine 的日志。

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'
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!