准备工作
uni-app扩展原生插件文档
插件官方示例
1.下载打开UniPlugin-Hello-AS项目
2.新建一个Module(Android Library)
右击项目名称>New>Module>Android Library。配置好Module名称,包名,安卓SDK版本等
3.修改build.gradle
将uniplugin_module 中的build.gradle内容全部复制,并覆盖mylibrary的build.gradle内容
4.修改AndroidManifest.xml
5.编写具体功能
bash
import com.alibaba.fastjson.JSONObject;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.common.UniModule;
public class MyTest extends UniModule {
@UniJSMethod(uiThread = false)
public JSONObject getTestData(){
JSONObject object = new JSONObject();
object.put("test_data","成功返回调用数据");
return object;
}
}
6.打包成aar文件
uni-app调用原生插件
1.用HBuilder 打开要集成插件的项目
2.在项目下创建目录nativeplugins(名称不可改)
bash
nativeplugins/
└── YourPlugin/
├── android/
│ └── your-plugin.aar
└── package.json
3.在目录nativeplugins下按照官方格式要求进行更改
4.编写package.json
规则如下:
bash
{
"name": "your-plugin",
"id": "your-plugin-id",
"version": "1.0.0",
"description": "插件描述",
"_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"android": {
"plugins": [
{
"type": "module",
"name": "your-plugin",
"class": "com.yourcompany.yourplugin.YourPluginClass"
}
],
"integrateType": "aar",
"minSdkVersion": 21,
"useAndroidX": true,
"parameters": {}
}
}
}
关键字段:
class:必须对应aar中暴露的完整类名(主入口类)。
integrateType:必须为 "aar"
例子:
bash
{
"name": "uniPlugin-amap",
"id": "uniPlugin-amap",
"version": "1.0.0",
"description": "1",
"_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"android": {
"plugins": [
{
"type": "module",
"name": "uniPlugin-amap",
"class": "com.uni.amap.AmapPlugin"
}
],
"dependencies": [
"com.amap.api:location:6.5.0"
],
"integrateType": "aar",
"minSdkVersion": 16
}
}
}
注意:如果包含第三方依赖 而没有打入arr需要特别引入
bash
{
"name": "uniPlugin-amap",
"id": "uni-plugin-amap",
"version": "1.0.0",
"_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"android": {
"plugins": [
{
"type": "module",
"name": "AmapModule",
"class": "com.uni.amap.AmapPlugin"
}
],
"integrateType": "aar",
"minSdkVersion": 21,
"dependencies": [
"com.amap.api:location:6.3.0", // 高德定位SDK
"com.amap.api:search:9.7.0", // 如果使用搜索功能
"com.amap.api:map2d:6.0.0", // 如果使用2D地图
"com.amap.api:3dmap:10.0.0" // 如果使用3D地图
],
"permissions": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.READ_PHONE_STATE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.INTERNET"
],
"parameters": {
"AMAP_KEY": {
"des": "高德地图Key"
}
}
}
}
}
在manifest.json中添加本地插件配置
打包自定义基座
使用uni.requireNativePlugin引用插件
bash
const PluginName = uni.requireNativePlugin(PluginName); // PluginName 为原生插件名称
注意:uni.requireNativePlugin 的参数是 package.json 中的 "name" 字段(不是id或class)。