文章目录
- 原生插件
- 下载官方示例项目
- 构建自己的插件模块
- 编写uni调用的函数
- app集成
- 打包aar
- Uni引用插件
- 引入插件模块,进行配置
- 调用
- 运行到真机
- 自定义基座
- 运行到手机
- DCloud中管理应用
- 创建离线key
- 直接Android项目看uni效果
- 注意点:名称一致
- 为什么uni引用aar的时候没有严格要求?
步骤大纲
- 原生构建插件,打包aar
- uniapp引入使用
- Dcloud平台管理
原生插件
官方教程
下载官方示例项目
首先,本地搭建Android环境
下载官方提供的模板项目
解压后导入项目中的:UniPlugin-Hello-AS
这就是一个Android模板项目
在AS中打开后,目录结构如下,app是主项目,其他都是插件示例
mylibrary是我自己创建的插件module
构建自己的插件模块
这个简单,选中项目,new module,构建类型选择library就可以了
先修改一下library的配置,也就是build.gradle文件,主要是引入部分,可以copy其他以uniplugin_xxx的模块的build.gradle文件
编写uni调用的函数
在自己的插件模块下,创建Java文件,按照官方的要求,使用对应的注解,来编写由Uni调用的函数,比如
public class MyPluginModule extends UniModule { private String TAG = "MyPluginModule"; @UniJSMethod(uiThread = true) public void sayHello(String str, UniJSCallback callback){ Log.d(TAG, str); if(callback != null){ JSONObject data = new JSONObject(); data.put("key", TAG); data.put("value", str); data.put("other", "MyPluginModule"); callback.invoke(data); } } }一个简单的插件功能就完成了
app集成
在app的模块中,在build.gradle中引入自己刚编写好的插件模块
在app的assets下,这个文件中按照示例注册插件
打包aar
- 选中要打包的插件模块
选择assemble module “xxxxx” 就是打包对应的模块,打包完成后,会在对应的模块下的
build / outputs / aar
目录下找到对应的aar,这个就是Uni项目中用到的插件文件
Uni引用插件
引入插件模块,进行配置
uni要创建指定目录,放入aar文件,并进行配置
配置完成后,再配置manifest.json
选择本地插件,勾选自己的插件
调用
在需要插件的地方,进行调用,比如
const MyPlugin = uni.requireNativePlugin('MyPlugin') if (MyPlugin === null) { uni.showToast({ icon: 'none', title: '插件引入失败' }) return } MyPlugin.sayHello("插件调用", (res)=>{ console.log(res) })这样就完成了基础的在uniapp中调用原生插件
运行到真机
自定义基座
HBuilder选择运行到手机或模拟器–制作自定义调试基座,因为标准基座是不包含自己编写的插件的
上面需要你填写证书,需要你为那个Android项目,使用工具生成自己的证书,keystore文件,来进行填写
之后打包,就生成自己的自定义基座
基座也就是一个apk
运行到手机
选择运行到Android app基座,选择使用自定义基座,本地基座
就能顺利运行到手机上了
运行到手机上后,可以直接在AS中随便打开一个项目,在log中查看日志
HBuilder中看不到Android原生的日志,但是在AS中可以看到
DCloud中管理应用
登录DCloud平台,找到应用管理
创建离线key
找到自己的应用
点击修改,填写必填的信息,能生成想要的离线key
注意这个包名就是要在里面填的信息
至于其他的值,都需要找工具去获取
填写后,保存,会生成想要的appkey
这个key需要填写到之前Android示例项目中的,app模块下的,manifes文件中,dcloud_appkey的value
直接Android项目看uni效果
uniapp项目发行–本地打包资源,会生成一个__UNI__xxxx的目录
- 将这个目录替换掉示例Android项目中,app下,main/assets/apps目录下的项目
- 更改main/assets/data/dcloud_control文件,appid要与上面的__UNI_xxxx一致,其实也就是DCloud应用基本信息中的appid
注意点:名称一致
要运行到Android项目中看效果,需要保证uni中请求的插件名称与Android中的插件名称一致
uni中请求的就是
const MyPlugin = uni.requireNativePlugin('MyPlugin')名称是"MyPlugin"
Android中注册的是在dcloud_uniplugins.json中注册的,比如
这个name就与上面的保持了一致,否则会报错TypeError: 找不到对应的函数
为什么uni引用aar的时候没有严格要求?
因为引入后,uni在manifest中以及package.json中注册了aar插件,并起名了,
const MyPlugin = uni.requireNativePlugin('MyPlugin')请求的就是自己起的名字,所以没问题