uni-app原生插件配置关键在于package.json中android.plugins[0].class字段必须与Java/Kotlin类全限定名完全一致,且插件目录名和package.json的name需与uni.requireNativePlugin参数严格匹配。

uni-app 原生插件本身不配置“包名”,你真正要配的是插件对应的 Android 类的全限定名(即 class 字段),它必须与 Java/Kotlin 源码中的实际类路径完全一致——错一个字母、大小写或点号都会导致 undefined 或调用失败。
package.json 里的 class 必须和 Java 类路径一模一样
这是最常出问题的地方。插件的 package.json 中 android.plugins[0].class 字段不是随便起的,它必须精确匹配你写的 Java/Kotlin 类的完整包路径 + 类名:
- Java 类文件路径为
src/main/java/com/example/myplugin/MyPlugin.java→class必须是"com.example.myplugin.MyPlugin" - 类名大小写敏感:
myplugin≠MyPlugin,com.example.MyPlugin≠com.example.myplugin.MyPlugin - 不能漏掉
public修饰符,且类必须继承UniModule(模块类)或实现对应接口(如UniComponent) - 如果用了 Kotlin,编译后默认类名带
$Companion或Kt后缀?别手写——直接在 Android Studio 中右键类 →Copied Reference(复制引用),粘贴出来就是准确的class值
nativeplugins/ 目录结构决定插件识别,不是包名
uni-app 不通过「包名」发现插件,而是靠目录名和 package.json 的 name 字段联动:
- 插件根目录必须是
nativeplugins/YourPluginName/(注意大小写、无空格、无下划线) -
nativeplugins/YourPluginName/package.json中的"name": "your-plugin-name"必须和前端uni.requireNativePlugin("your-plugin-name")的参数完全一致 - 这个
name和 Android 的应用包名(manifest.json里的app-plus.distribute.android.package)毫无关系,别混淆 - Android 工程里 module 的包名(如
com.example.myplugin)只服务于class字段,不参与 uni-app 插件注册流程
Android Library 的 build.gradle 不影响插件加载,但影响 class 可见性
你写的插件类最终要被打包进 .aar 或作为源码 module 被引用,这时 Gradle 配置间接决定了 class 是否能被找到:
- 确保
android.defaultConfig.applicationId没被意外设置(Library module 不该有 applicationId) - 检查
sourceSets.main.java.srcDirs是否包含你的 Java/Kotlin 源码路径,默认是src/main/java - 如果用了
consumerProguardFiles或混淆规则,确认没把插件类名混淆掉(上线前务必关掉混淆测试) - 本地打包时,HBuilderX 会把整个
android/子目录内容合并进主工程,所以class路径必须能在最终 APK 的classes.dex中查到
最容易被忽略的一点:改完 class 或 Java 类路径后,不重启 HBuilderX 或不清构建缓存,旧的 class 引用可能仍被缓存,导致“明明改对了却还是 undefined”。遇到这种情况,先删掉项目下 unpackage/ 和 platforms/ 目录,再重新生成本地打包资源。











