更新记录
1.0.0(2023-12-28)
1.0.0 发布
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 14.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
安卓无障碍插件
启用无障碍
this.BaseAccessibility = uni.requireNativePlugin("Bender-Accessibility")
this.BenderAccessibility.start({
packageNames:[],
notificationTimeout:200,
monitorAllEvent:true,
({event_type,package_name,class_name})=>{
}
}
this.BenderAccessibility.start({
packageNames:[],
notificationTimeout:200,
monitorAllEvent:false,
({
"type": "用户点击",
"state": false,
"accNode": {
"selected": false,
"scrollable": false,
"text": "",
"id": "com.tencent.mm:id/cj1",
"checked": false,
"enable": true,
"packageName": "com.tencent.mm",
"longClickable": true,
"clickable": true,
"focusable": true,
"password": false,
"contentDesc": "",
"className": "android.widget.LinearLayout",
"focused": false,
"checkable": false,
"childCount": 1,
"bounds": {
"empty": false,
"right": 1080,
"left": 0,
"bottom": 1588,
"top": 1394
}
}
})=>{
}
)
/**
* 点击指定的坐标
*
* @param X
* x 坐标
* @param Y
* y 坐标
*/
clickLocation(int X, int Y)
/**
* 判断无障碍服务是否开启
*
* @return 无障碍是否开启 boolean
*/
getServiceState()
/**
* 返回
*
* @return 是否成功 boolean
*/
global_back()
/**
* 回到桌面
*
* @return 是否成功 boolean
*/
global_home()
/**
* 打开最近任务
*
* @return 是否成功 boolean
*/
global_recents()
/**
* 查找界面第一个满足条件的节点并执行对应操作
*
* @param text 选填
* 节点的text属性
* @param textMatch 选填
* 节点的 text 符合 textMatch 正则
* @param id 选填
* 节点的id
* @param className 选填
* 节点的类名
* @param packageName 选填
* 节点的包名
* @param contentDesc 选填
* 节点的 contentDesc 属性
* @param contentDescMatch 选填
* 节点的 contentDesc 符合 contentDescMatch 正则
* @param edit 选填
* 编辑的内容
* @param click 选填
* 是否点击
*/
node({
textMatch:".*手机号.*",
edit:"你好"
},result=>{
var {accNode,click,edit} = result;
if(accNode) {
if(click){
console.error("点击成功")
}
if(edit){
console.error("编辑成功")
}
}else{
console.error("没找见满足条件的节点")
}
})
/**
* 遍历节点
*
* @param callback(res) 必填
* 回调函数 res 结构如下面注释
*/
forNode(res => {
console.error(res)
/*
{
"accNode": {
"selected": false,
"scrollable": false,
"text": "",
"id": "",
"checked": false,
"enable": true,
"packageName": "com.qq.qq",
"longClickable": false,
"clickable": false,
"focusable": false,
"password": false,
"contentDesc": "",
"className": "android.widget.FrameLayout",
"focused": false,
"checkable": false,
"childCount": 0,
"bounds": {
"empty": false,
"right": 1080,
"left": 0,
"bottom": 822,
"top": 793
}
},
"index": 1, // 索引 用于后面 editByIndex() 和 clickByIndex()
"depth": 1, // 深度
"path": "-0-0-" // 层级 比如这里是 界面的 第一个元素 (从0开始的) 第一个0表示 界面顶级 第二个 0 表示第一个元素
}
*/
})
/**
* 编辑节点text
*
* @param index
* forNode 遍历函数获得的index
* @param text
* 要更改的值
* @return 是否成功 boolean
*/
editByIndex(int index,String text)
/**
* 点击节点
*
* @param index
* forNode 遍历函数获得的index
* @return 是否成功 boolean
*/
clickByIndex(int index)