1. manifest.json 配置
在项目根目录的 manifest.json 中添加插件声明:
"app-plus": {
"plugins": {
"my-custom-plugin": {
"version": "1.0.0",
"provider": "你的插件ID(如:com.example.myplugin)",
"android": {
"hooksClass": "你的安卓包名.HookClass"
},
"ios": {
"hooksClass": "你的iOS类名"
}
}
}
}
关键参数说明:
hooksClass:原生钩子类路径provider:插件唯一标识(反向域名格式)- 需配置
dcloud_uniplugins.json定义模块名和入口类
2. 原生模块开发
Android 端(Java/Kotlin):
public class MyModule extends UniModule {
@UniJSMethod
public void showToast(UniJSCallback callback) {
// 原生代码示例
Toast.makeText(mContext, "Hello Plugin", Toast.LENGTH_SHORT).show();
callback.invoke("success");
}
}
iOS 端(Objective-C):
@implementation MyModule
UNI_EXPORT_METHOD(@selector(showToast:))
- (void)showToast:(UniModuleKeepAliveCallback)callback {
// 原生代码示例
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示"
message:@"Hello Plugin"
preferredStyle:UIAlertControllerStyleAlert];
[UIApplication.sharedApplication.keyWindow.rootViewController presentViewController:alert animated:YES completion:nil];
callback(@"success", NO);
}
@end
3. 插件封装规范
-
目录结构:
my-plugin/ ├── android/ // Android 原生代码 │ ├── libs/ │ ├── src/ │ └── build.gradle ├── ios/ // iOS 原生代码 │ ├── MyModule.h │ └── MyModule.m ├── package.json // 插件元数据 └── uniplugin.json // 模块声明 -
uniplugin.json示例:
{
"name": "my-custom-plugin",
"id": "com.example.myplugin",
"platforms": {
"android": {
"modules": [{
"name": "my-module",
"class": "com.example.MyModule"
}]
},
"ios": {
"modules": [{
"name": "my-module",
"class": "MyModule"
}]
}
}
}
4. UniApp 调用插件
在 Vue 组件中调用:
const myModule = uni.requireNativePlugin('my-custom-plugin-my-module')
export default {
methods: {
callNativeMethod() {
myModule.showToast(res => {
console.log('原生回调:', res)
})
}
}
}
5. 调试与发布
-
调试:
- Android:
adb logcat | grep uniplugin - iOS:Xcode 控制台查看日志
- 使用
uni.getSystemInfo()检查插件是否加载
- Android:
-
发布:
- 打包为
.zip格式 - 通过插件市场提交
- 或本地引用:
"plugins": { "my-plugin": { "version": "1.0.0", "provider": "com.example" } }
- 打包为
注意事项
-
版本兼容:
- 声明
minPlatformVersion确保兼容性 - 测试 UniApp SDK 版本兼容性
- 声明
-
性能优化:
- 避免频繁 JS-Native 通信
- 复杂操作使用 Worker 线程
-
安全规范:
- 敏感操作需用户授权
- iOS 需配置隐私描述
完整示例参考:UniApp 插件开发文档
685

被折叠的 条评论
为什么被折叠?



