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

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

(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里面,生成本地打包资源

 

 

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

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

原生开发者支持

  1. android调用原生方法

举例说明:

uniapp 代码:

<template>

    <view class="content">

     

        <view @click="androidNative">点击调用android原生方法</view>

       

    </view>

</template>

<script>

    // 导入自己定义的插件js

    // var elitetyc = require('../../common/plugin.js');

    export default {

        data() {

            return {

                 plugins: elitetyc

            }

        },

        onLoad() {

        },

        methods: {

             androidNative(){

              this.plugins.CalcNameAddNumFunction(

                  "这段文字是uniapp传过来的",

                  function(result) {

                      uni.showToast({title:JSON.stringify(result),icon:'none',duration:5000});

                  },

                  function(result) {

                      uni.showToast({title:result,icon:"none",duration:5000});

                  }

              );

             }

        }

    }

</script>

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<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: 参数列表。

注释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 ,在里面新建

<feature name="elitetyc" value="com.example.H5PlusPlugin.ElitetycPluginTest"/>

 

然后点击运行即可 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值