目录
1、参考文档
https://www.cnblogs.com/wenhui92/p/9052308.html#%E5%BC%80%E5%8F%91%E6%8F%92%E4%BB%B6
https://nativesupport.dcloud.net.cn/NativePlugin/README
https://ask.dcloud.net.cn/article/66
2、离线打包操作步骤
1、下载SDK
https://nativesupport.dcloud.net.cn/AppDocs/download/android
下载sdk后解压
2.打开android studio导入项目
项目创建可以参照官方文档说明,坑比较多,建议直接打开例子来进行操作
3.修改相关参数
1.修改AndroidManifest.xml文件
1.修改meta-data
需要登录开发者中心获取
将id复制到AndroidManifest.xml中
<meta-data
android:name="dcloud_appkey"
android:value="应用的Android" />
2.修改包名
包名在离线打包管理处获取
将页面上跟包名有关的都改成自己的
3.修改应用名称以及图片、启动图片
splash为启动图片,名字是固定的,替换就好
2.修改dcloud_control.xml文件
修改appid
3.修改strings.xml
改成应用名称
4.修改build.gradle
1.修改defaultConfig
版本号和code最好与manifest.json保持一致
2.修改signingConfigs
相关信息可以从这里获取
4.运行
将apps文件删除
然后自己在目录下新建个apps文件夹
打开HbuilderX将项目本地打包,选择本地打包->生成本地打包app资源
打包好后会生成一个路径,【appid】\www。操作正确的话appid和我们之前写的appid是一致的,若不一致,请看manifest.json中配置的id
将打包的文件复制到apps路径下,最终路径是 apps/【appid名称】/www
ok.配置结束直接运行。
3原生拓展
离线打包没问题后就可以开始拓展原生插件了
1.java原生代码编写
文件需要写在java目录下,新建目录,java新建文件
举个栗子
拓展类需要继承StandardFeature
写方法
方法的参数是固定的IWebview和JSONArray,方法名随意
public void expandFunction(IWebview pWebview, JSONArray array){
}
接下就可以在该方法下编写需要的功能代码了
说明一下
public void expandFunction(IWebview pWebview, JSONArray array){
/*
*
*这里是方法的内容
*
* */
String pCallBackID = array.optString(0);
JSUtil.execCallback(pWebview, pCallBackID, "这里是内容!", JSUtil.OK, true);
JSUtil.execCallback(pWebview, pCallBackID, "打印失败!", JSUtil.ERROR, true);
}
类型 | 说明 |
---|---|
IWebview | 调用方法的页面 |
JSONArray | 调用方法时传进来的参数类似字符串数组 ,["数据1",“数据2”] |
pCallBackID | 需要回调时用到,若不需要可以不要,在js传数据时传过来的。 |
JSUtil.execCallback | 回调js定义的成功、失败的方法,并传数据 |
2.配置文件
写完java代码后需要在配置文件中添加相关拓展功能
1.修改dcloud_properties.xml文件
在features中添加
在services中添加
2.修改manifest.json
3.编写调用的js文件
document.addEventListener( "plusready", function(){
var _BARCODE = 'ExpandDemo',
var expandObj = {
doExpandFunction:function(option){
let successF = typeof option.successCallback !== 'function'?null:function(mes){
option.successCallback(args);
}
let errorF = typeof option.errorCallback !== 'function'?null:function(mes){
option.errorCallback(args);
}
let callbId = plus.bridge.callbackId(successF, errorF);
return plus.bridge.exec(_BARCODE,"expandFunction",[callbId,option.jsonString]);
},
};
window.plus.ExpandDemo = expandObj;
}, true);
说明一下
变量 | 说明 |
---|---|
_BARCODE | 在配置文件配置的名字 |
callbId | 通过plus.bridge.callbackId(successF, errorF);注册后返回的callbackId |
方法 | 说明 |
---|---|
plus.bridge.callbackId(successF, errorF); | 注册成功回调方法和失败回调方法,返回callbackId |
plus.bridge.exec.exec(_BARCODE,"expandFunction",[callbId,option.jsonString]); | 触发调用定义的方法.exec("模块名","方法名",["参数1","参数2"]) |
4.调用
5.调试
debug调试
成功!
4.使用场景
设备上的功能需要使用原生开发时,可以要求对方发送原生安卓用例的demo,比如人脸识别,身份证读取,打印等等。看demo是如何调用打印、人脸识别的功能。
了解怎么使用后,将demo引用的libs包导入后我们离线打包的工程下
然后在我们扩展的方法中按demo调用即可。