uni.requireNativePlugin('xxx')返回undefined,根本原因是原生插件未被正确识别或注册:dcloud_uniplugins.json未置于assets/目录、文件名大小写错误、package.json的name与调用名不一致、Android未正确引入aar/jar或build.gradle未声明依赖、插件类型配置错误。

uni-app 调用原生插件不是靠 import 或 npm install,而是通过 uni.requireNativePlugin 动态加载,且必须先完成 Android/iOS 原生层的配置,否则调用直接返回 undefined。
为什么 uni.requireNativePlugin('xxx') 总是返回 undefined
这是最常踩的坑:JS 层调用前,原生插件根本没被识别或注册成功。常见原因包括:
-
dcloud_uniplugins.json文件没放在assets/目录下(注意不是static/或src/),且文件名大小写必须完全匹配(dcloud_uniplugins.json,不能是DCloudPlugins.json) -
package.json中的name字段(如"MyAwesomePlugin")和 JS 中传给uni.requireNativePlugin的字符串不一致(区分大小写) - Android 端未将插件的
.aar或.jar正确放入libs/,或build.gradle里没声明implementation fileTree(dir: 'libs', include: ['*.aar']) - 插件类型配置错误:比如插件实际是
service类型,但dcloud_uniplugins.json里写成了module,或反之
manifest.json 里到底要不要配插件?
绝大多数插件市场下载的原生插件(如 RichAlert、EMAS、视频号插件)不需要在 manifest.json 的 features 或 plugins 节点手动添加配置。
它们的启用依赖两个真实生效的配置点:
- Android:
assets/dcloud_uniplugins.json+libs/下的 aar/jar +build.gradle依赖 - iOS:
nativeplugins/目录结构 +package.json+ Xcode 工程中链接对应 framework 或源码
manifest.json 中的 plugins 配置仅对极少数特定插件(如部分厂商推送 SDK 的桥接层)起作用,且文档会明确说明。盲目添加反而可能触发 HBuilderX 构建异常。
插件市场下载的插件,如何确认它是否真的生效?
不要只看 HBuilderX 插件管理页显示“已安装”。真正验证方式只有两个:
- 在 App 端运行时,打开 Android Studio 的 Logcat,筛选关键词
UniPlugin或插件类名(如RichAlertWXModule),看是否有初始化日志输出 - 在 JS 中执行
console.log(uni.requireNativePlugin('YourPluginName')),如果返回一个带pay、show等方法的对象,才算接入成功;如果返回undefined或报错Plugin not found,说明原生侧断连
特别注意:微信小程序、H5 等非原生平台无法使用这类 Android/iOS 原生插件,uni.requireNativePlugin 在这些平台始终返回 undefined,这是设计使然,不是 bug。
原生插件集成的关键不在 JS 调用那行代码,而在于 assets/ 和 libs/ 这两个目录是否被 Android 构建流程真正扫描并打包进去——很多问题查到最后,都是因为文件放错了目录层级,或者 HBuilderX 没有触发完整 rebuild。


















