DCloud_Android_zl
DCloud_Android_zl
  • 发布:2018-12-18 13:00
  • 更新:2022-05-07 14:41
  • 阅读:17775

android平台:在uni-app使用5+插件

分类:5+ SDK

开发环境及工具

  1. Windows系统
  2. android studio
  3. HBuilderX
  4. 5+ SDK
  5. Android平台 5+ SDK 参考手册

uni-app 插件扩展

创建项目

  1. 在HBuilderX中创建一个uni-app项目,操作步骤:文件->新建->项目->选择uni-app->点击创建即可。
  2. 创建js插件文件,可采用下方模板。已兼容5+ 插件开发。
    ! function(root, factory) {  
    if (typeof exports == 'object' && typeof module != 'undefined') {  
        module.exports = factory()  
    } else if (typeof define == 'function' && define.amd) {  
        define(factory)  
    } else {  
        // 5+ 兼容  
        document.addEventListener('plusready', function(){  
        // 修改此处为插件命名  
        var moduleName = 'plugintest';  
        // 挂载在plus下  
        root.plus[moduleName] = factory()  
        },false);  
    }  
    }(this, function() {  
    //在此处定义自己的方法  
    var _BARCODE = 'plugintest';  
    var plugintest = {  
        /*方法已忽略,详细方法请参考SDK中的demo*/  
    };  
    return plugintest;  
    });  
  3. 插件引用。直接require即可(5+ 项目需使用script标签引入)。详细代码请下载附件,解压至任意目录,拖入HBuilderX即可。
  4. 生成本地打包资源,导入android studio项目。可参考:HBuilderX 生成本地打包App资源

    插件编写

    用户可采用同步或异步的方式将结果传递到android端。

    同步方法:

    void plus.bridge.execSync( String service, String action, Array<String> args );  
    service: 插件类别名,对应dcloud_properties.xml的feature name。  
    action: 调用android端插件方法名称。对应java文件的方法名。  
    args: 参数列表。  

    异步方法:

    void plus.bridge.exec( String service, String action, Array<String> args );  
    service: 插件类别名,对应dcloud_properties.xml的feature name。  
    action: 调用android端插件方法名称。对应java文件的方法名。  
    args: 参数列表。  

    示例代码

    var plugintest = {  
        PluginTestFunction: function(Argus1, Argus2, Argus3, Argus4, successCallback, errorCallback) {  
            var success = typeof successCallback !== 'function' ? null : function(args) {  
                    successCallback(args);  
                },  
                fail = typeof errorCallback !== 'function' ? null : function(code) {  
                    errorCallback(code);  
                };  
            var callbackID = plus.bridge.callbackId(success, fail);  
            return plus.bridge.exec(_BARCODE, "PluginTestFunction", [callbackID, Argus1, Argus2, Argus3, Argus4]);  
        }  
    };  

android 扩展插件

导入SDK工程到Android studio

  1. 下载SDK至任意目录(目录中一定不能含有中文)。

  2. 将SDK中的HBuilder-Integrate-AS项目导入android studio,操作步骤:Studio ->File ->open ->选择1中解压的目录 ->Ok即可。

  3. 注意:项目中必须包含lib.5plus.base-release.aar文件。

    编写插件

  4. 创建一个java类继承自StandardFeature(HBuilder-Integrate-AS中的PGPlugintest.java)。

  5. 实现方法,方法名必须与js方法中windows.plus.bridge.exec()或windows.plus.bridge.execSync()方法的第二个传入参数相同。

  6. 方法中需存在两个形参,IWebview pWebview代表发起请求的webview,JSONArray array代表JS请求传入的参数。

  7. android 执行完操作将数据返回到js层,可采取JSUtil.execCallback()方法实现结果的传递。

    JSUtil.execCallback(IWebview pWebViewImpl,String pCallbackId,String pMessage,int pStatus,boolean pKeepCallback)  
    参数:  
    pWebViewImpl - webview对象  
    pCallbackId - 回调方法ID  
    pMessage - 回调信息  
    pStatus - 回调code值 如:OK、ERROR  
    pKeepCallback - js层回调function是否要保存  

    其余方法可参考Android平台 5+ SDK 参考手册

    代码示例

    public class PGPlugintest extends StandardFeature {  
    public void PluginTestFunction(IWebview pWebview, JSONArray array) {  
        // 原生代码中获取JS层传递的参数,  
        // 参数的获取顺序与JS层传递的顺序一致  
        String CallBackID = array.optString(0);  
        JSONArray newArray = new JSONArray();  
        newArray.put(array.optString(1));  
        newArray.put(array.optString(2));  
        newArray.put(array.optString(3));  
        newArray.put(array.optString(4));  
        // 调用方法将原生代码的执行结果返回给js层并触发相应的JS层回调函数  
        JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);  
    }  
    }  

插件配置

  1. 配置dcloud_properties.xml文件,在features节点下添加如下节点:
    <features>  
        <feature name="plugintest" value="com.example.H5PlusPlugin.PGPlugintest"/>  
    </features>  
  2. 配置android studio的build.gradle文件。参考文章:Android平台,uni-app离线打包集成要领及注意事项
  3. 示例代码在下方附件中下载。
5 关注 分享
Trust 8***@qq.com 2***@qq.com Lord 最光阴

要回复文章请先登录注册

1***@qq.com

1***@qq.com

程序运行起来了 但是js调原生方法就是调不到 是什么原因
2022-05-07 14:41
吴克

吴克

回复 吴克 :
这里找到了
2022-03-05 20:20
吴克

吴克

SDK哪里下载?
2022-03-05 20:16
3***@qq.com

3***@qq.com

回复 4***@qq.com :
我也是同样的问题 请问解决了么
2021-03-21 22:25
4***@qq.com

4***@qq.com

自定义基座,运行出来 提醒打包时未添加插件,但是打包的时候添加过了 ,生成本地资源放进app都是好的。基座运行就说没插件、求解
2020-03-05 23:48
东庐

东庐

回复 7***@qq.com :
uni-app直接调用jar,你实现了吗?
2019-07-19 17:54
s***@126.com

s***@126.com

回复 DCloud_heavensoft :
现在要开发一个原生插件 是选哪种呢 还是两种都可以呢
2019-04-29 00:24
日进斗金

日进斗金

pKeepCallback :js层回调function是否要保存 。这个参数的意思没有看懂啊
2019-03-25 19:55
7***@qq.com

7***@qq.com

回复 DCloud_heavensoft :
请问UNIAPP可以直接调用 java 类吗?,或者封装成接口插件
2019-03-11 15:30
DCloud_heavensoft

DCloud_heavensoft

回复 7***@qq.com :
5+sdk的集成模式。是把uni-app的sdk集成到原生工程里有。
uni-app的原生插件开发模式,是另一种,参考:https://ask.dcloud.net.cn/article/35416。这种是把原生插件当作uni-app的插件,这种模式支持云打包原生插件
2019-03-11 15:16