UNIAPP 离线打包以及调用原生sdk

  1. 首先要下载android studio
  2. 需要电脑展示页面效果,还需要下载夜神模拟器,
  3. 使用Android Studio与夜神模拟器开发调试:

(1)运行夜神模拟器

UNIAPP 离线打包以及调用原生sdk_第1张图片

(2)打开命令行窗口,

(3)打开到夜神安装目录(如cd D:\Program Files\NOX\Nox\bin),

(4)执行命令:nox_adb.exe connect 127.0.0.1:62001,连接模拟器,

(5)若Android Studio连接不上夜神,重启模拟器即可。

4.在hbuilderx里面,生成本地打包资源

UNIAPP 离线打包以及调用原生sdk_第2张图片

UNIAPP 离线打包以及调用原生sdk_第3张图片

 

 

5.下载官方sdk,下载地址:https://nativesupport.dcloud.net.cn/AppDocs/download/android

6.修改相关配置,详情请参考官方文档

原生开发者支持

  1. android调用原生方法

举例说明:

uniapp 代码:

plugin.js

! function(root, factory) { 

if (typeof exports == 'object' && typeof module != 'undefined') { 

    module.exports = factory() 

} else if (typeof define == 'function' && define.amd) { 

    define(factory) 

} else { 

    document.addEventListener('plusready', function(){ 

    // 修改此处为插件命名  注释---1

    var moduleName = 'elitetyc';  

   

    root.plus[moduleName] = factory() 

    },false); 

}(this, function() { 

//在此处定义自己的方法  注释---2

var _BARCODE = 'elitetyc'; 

var plugintest = { 

    // 这里定义了一个名叫CalcNameAddNumFunction的方法,传递三个参数,后面两个是回调函数

    CalcNameAddNumFunction: function(num, successCallback, errorCallback) {

        var success = typeof successCallback !== 'function' ? null : function(args) {

                successCallback(args);

            },

            fail = typeof errorCallback !== 'function' ? null : function(code) {

                errorCallback(code);

            };

      // 注释---3

        var callbackID = plus.bridge.callbackId(success, fail);

    // 注释---4

        return plus.bridge.exec(_BARCODE, "calcMyNameAddNum", [callbackID, num]);

    }

}; 

return plugintest; 

});

注释讲解:

  • 注释1:这里是定义插件的名称
  • 注释2:这里也是插件的名称,可以看到在后面的

plus.bridge.exec(_BARCODE, "calcMyNameAddNum", [callbackID, num]);

// 官方讲解有同步与异步,我这里只用了异步

void plus.bridge.execSync( String service, String action, Array args ); 

service: 插件类别名,对应dcloud_properties.xml的feature name。 

action: 调用android端插件方法名称。对应java文件的方法名。 

args: 参数列表。 

void plus.bridge.exec( String service, String action, Array args ); 

service: 插件类别名,对应dcloud_properties.xml的feature name。 

action: 调用android端插件方法名称。对应java文件的方法名。 

args: 参数列表。

注释3:回调ID,后面原生代码中会用到,就好像你调用我,我有结果了,我该知道我把数据返回给谁把?这个id就是这个作用

注释4:在上面有讲到过,这里需要注意的是前两个参数,第一个参数是插件类别名,后面再原生代码中的dcloud_properties.xml文件中会用到

第二个参数,是android原生代码中的方法名要一致

  1. 到这里uniapp页面差不多都编写完成了,我们使用android studio导入sdk中的插件项目示例HBuilder-Integrate-AS

原生里面java文件:

package io.dcloud.simple;

import org.json.JSONArray;

import io.dcloud.common.DHInterface.IWebview;

import io.dcloud.common.DHInterface.StandardFeature;

import io.dcloud.common.util.JSUtil;

public class ElitetycPluginTest extends StandardFeature {

    /**

     * 定义一个方法 将自己的名字加上数字进行返回

     * @param pWebview

     * @param array

     */

    public void calcMyNameAddNum(IWebview pWebview, JSONArray array){

//        获取回调ID

        String CallBackID = array.optString(0);

//        获取参数并计算(这里模拟原生处理)

        String newstring = "我是原生代码返回::"+array.optString(1);

//        构建回传参数

        JSONArray newArray = new JSONArray();

        newArray.put(newstring);

//        JSUtil.execCallback(IWebview pWebViewImpl,String pCallbackId,String pMessage,int pStatus,boolean pKeepCallback)

//        参数:

//        pWebViewImpl - webview对象

//        pCallbackId - 回调方法ID

//        pMessage - 回调信息

//        pStatus - 回调code值 如:OK、ERROR

//        pKeepCallback - js层回调function是否要保存

        // 第一个参数是当前函数的入参,直接传入, 第二个是根据入参获取的回调id,第三个是回调的数据,是一个json数组

        JSUtil.execCallback(pWebview,CallBackID,newstring, JSUtil.OK,false);

    }

}

修改安卓配置文件:把uniapp打包好的原生代码按官网说的导好,

修改dclould_properties.xml ,在里面新建

 

然后点击运行即可 

你可能感兴趣的:(android,android,studio,java)