Dcloud开发引用第三方sdk的app小程序扫盲---使用第三方sdk并且打包

article/2025/11/11 15:36:07

经过前几次的文章,app基本成型。运行在手机里应该就能正常使用了。

那么如何引用第三方sdk呢? 难道在hbuilder里面弄个文件夹放jar包么?

显然不是。dcloud本省有集成了部分sdk 但是大部分并没有。与apicloud相比,内置sdk的组件太少了。我的同事用apicloud直接引用apicloud官方提供的模板很快就能把功能实现。dcloud里你要是使用官方没集成的sdk就只能“手动打包”。

什么叫“手动打包”?

意思是,你在Android的IDE工具里面创建一个空的项目,并将hbuilder里面的项目添加到IDE中的项目中。同时你还要手动写“扩展js接口”。

在你手动打包时建议你先仔细阅读下官方的文档5+SDK插件开发

第一步:在IDE中建立一个空的项目,我用的是eclipse 如果你是Android studio 你也可以去百度找教程。


第二步:导入hbuilder项目进IDE  教程可以参考这个文档Android离线打包  

你要在assets 文件夹下新建app文件夹 再建一个以hbuilder里面manifest.json中appid为名称的文件夹。然后将hbuilder里面的css,js和fonts,还有html页面一并扔进去

具体的操作看这片文档会说的比较好hbuilder打包 别忘了这篇文档中该改的地方都改掉

第三步:根据你自己项目的需求 添加权限,第三方jar包。将不需要的权限和资源删除,如果你不知道是否需要,那就别删了

第四步:新建一个js文件 用作第三方插件的与Android交互的桥梁。官方文档的那个一大长串js 可以直接复制

document.addEventListener( "plusready",  function()
{
// 声明的JS“扩展插件别名”var _BARCODE = 'plugintest',B = window.plus.bridge;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);};callbackID = B.callbackId(success, fail);
// 通知Native层plugintest扩展插件运行”PluginTestFunction”方法return B.exec(_BARCODE, "PluginTestFunction", [callbackID, Argus1, Argus2, Argus3, Argus4]);},PluginTestFunctionArrayArgu : function (Argus, successCallback, errorCallback ) {var success = typeof successCallback !== 'function' ? null : function(args) {successCallback(args);},fail = typeof errorCallback !== 'function' ? null : function(code) {errorCallback(code);};callbackID = B.callbackId(success, fail);return B.exec(_BARCODE, "PluginTestFunctionArrayArgu", [callbackID, Argus]);},      // 声明同步返回方法PluginTestFunctionSync : function (Argus1, Argus2, Argus3, Argus4) {            // 通知Native层plugintest扩展插件运行“PluginTestFunctionSync”方法并同步返回结果                       return B.execSync(_BARCODE, "PluginTestFunctionSync", [Argus1, Argus2, Argus3, Argus4]);},PluginTestFunctionSyncArrayArgu : function (Argus) {                                   return B.execSync(_BARCODE, "PluginTestFunctionSyncArrayArgu", [Argus]);}};window.plus.plugintest = plugintest;
}, true );
第五步:Android项目中新建一个类
这个类你可以按照官方文档里使用旧接口或者新接口,随你。我是用的新接口

package com.example.H5PlusPlugin;
import io.dcloud.common.DHInterface.IWebview;
import io.dcloud.common.DHInterface.StandardFeature;
import io.dcloud.common.util.JSUtil;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;public class PGPlugintest extends StandardFeature
{   public void PluginTestFunction(IWebview pWebview, JSONArray array){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));JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);}public void PluginTestFunctionArrayArgu(IWebview pWebview, JSONArray array){String ReturnString = null;String CallBackID =  array.optString(0);JSONArray newArray = null;try {newArray = new JSONArray( array.optString(1));          String inValue1 = newArray.getString(0);String inValue2 = newArray.getString(1);String inValue3 = newArray.getString(2);String inValue4 = newArray.getString(3);ReturnString = inValue1 + "-" + inValue2 + "-" + inValue3 + "-" + inValue4;} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}JSUtil.execCallback(pWebview, CallBackID, ReturnString, JSUtil.OK, false);}public String PluginTestFunctionSyncArrayArgu(IWebview pWebview, JSONArray array){JSONArray newArray = null;JSONObject retJSONObj = null;try {newArray = array.optJSONArray(0);String inValue1 = newArray.getString(0);String inValue2 = newArray.getString(1);String inValue3 = newArray.getString(2);String inValue4 = newArray.getString(3);retJSONObj = new JSONObject();retJSONObj.putOpt("RetArgu1", inValue1);retJSONObj.putOpt("RetArgu2", inValue2);retJSONObj.putOpt("RetArgu3", inValue3);retJSONObj.putOpt("RetArgu4", inValue4);} catch (JSONException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}       return JSUtil.wrapJsVar(retJSONObj);}public String PluginTestFunctionSync(IWebview pWebview, JSONArray array){String inValue1 = array.optString(0);String inValue2 = array.optString(1);String inValue3 = array.optString(2);String inValue4 = array.optString(3);String ReturnValue = inValue1 + "-" + inValue2 + "-" + inValue3 + "-" + inValue4;return JSUtil.wrapJsVar(ReturnValue,true);}}
注意这个java类和js里面的方法名称是相同的,意思就是当你在html里面请求方法A,那么A必须在js类中有声明,java类中有实现。java类中写具体的业务操作。return返回值可以根据你的业务进行修改,无论是string或是jsonarray返回类型。附上我DIY的代码

js:

EasyLinkDeviceConnectWifi:function (Argus1, Argus2, Argus3 ) {// 通知Native层plugintest扩展插件运行“NewEasyLinkDeviceConnectWifi”方法并同步返回结果                       return B.execSync(_BARCODE, "EasyLinkDeviceConnectWifi", [Argus1, Argus2, Argus3]);},

java:这里面调用的easylink的jar包中的方法。你需要根据你的需求进行更改。
public String EasyLinkDeviceConnectWifi(IWebview pWebview, JSONArray array) {Date curDate = new Date(System.currentTimeMillis());EasyLinkParams params = new EasyLinkParams();params.ssid = array.optString(0);params.password = array.optString(1);params.isSendIP = false;params.runSecond = 2000;params.sleeptime = 20;params.extraData = null;	EasyLink easy = new EasyLink(pWebview.getActivity());easy.startEasyLink(params, new EasyLinkCallBack() {@Overridepublic void onSuccess(int arg0, String arg1) {Log.d("tag", "arg0:" + arg0 + ",arg1:" + arg1 + "配网成功");ReturnValue="设备连接wifi成功,开始搜索设备";}@Overridepublic void onFailure(int arg0, String arg1) {Log.d("tag", "arg0:" + arg0 + ",arg1:" + arg1 + "配网失败");ReturnValue="配网失败,请重新操作";}});Date endDate = new Date(System.currentTimeMillis());Log.d("gap",Long.toString(endDate.getTime() - curDate.getTime()));return JSUtil.wrapJsVar(ReturnValue,true);}
第六步:当你写完所有的业务后,就可以进行调试了。Android调试我就不说了。剩下的就是到处apk了。

总结:dcloud总体来说是个好东西,但是文档并不友好,开发者需要耐心钻研。引入项目的时候注意该加的加,该改的改,该删的删,一定要仔细。打包的时候要注意js扩展文件和java类中的对应关系。




http://chatgpt.dhexx.cn/article/STmBlmCP.shtml

相关文章

移动APP常用第三方SDK总结

前段时间,在一个技术群里,一位小伙伴分享了这张图,常用的第三方SDK功能,感觉很赞有木有!!!

Android第三方SDK使用分析

上一篇博文中介绍了如何开发一个自动化识别APP使用第三方SDK的情况,总共采集了1000来款APP,现在对采集的数据进行简单做一下统计分析,从统计中可以大概看到哪些SDK使用的最多,不同类型的APP使用第三方SDK上有什么不一样。 如何自…

移动应用中的第三方SDK隐私合规检测,早知道

摘要: 在移动应用隐私合规检测中,第三方SDK隐私声明由于其展现位置展现形式的多样性,自动化提取与解析是比较困难的任务。 本文分享自华为云社区《移动应用中的第三方SDK隐私合规检测》,作者: wolfrevo。 概述&#x…

隐私合规:检测第三方SDK调用的隐私权限

隐私合规:检测第三方SDK调用的隐私权限 原文地址 隐私合规:检测第三方SDK调用的隐私权限 前言 看了一圈各大网站目前关于隐私合规检测的分享,发现大家几乎都是自己写一套动态代理、Hook或者ASM来实现代码拦截从而检测不合规的代码堆栈&am…

uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)

最近在做一个关于uniapp的项目,遇到一个需求。有一个原生开发的aar的原生插件,不是插件市场的,开发说明原生开发的插件不可以直接提供给uniapp使用,需要按照uniapp原生插件开发文档重新制作成uniapp可以使用的aar。(半…

uniapp原生插件开发调用第三方SDK

uniapp安卓官方SDKhttps://nativesupport.dcloud.net.cn/AppDocs/download/android.html# 官方uni原生插件开发教程(android)网址:https://nativesupport.dcloud.net.cn/NativePlugin/ 第一步,开发环境的准备 下载uniapp安卓官方SDK待后面使用…

编写sdk提供给第三方使用(比如接口请求类)

感谢鱼皮。 一、新建SpringBoot项目 二、引入基础依赖 引入lombok(提供get、set方法)、configration-procssor(第三方引入包后,可以自动补全配置) 三、删除 pom 文件中不需要的依赖与插件,并删除 test …

Unity3D接入Android第三方SDK流程

目录 一、SDK调用Unity3D 二、Unity3D调用SDK 1、在Unity中新建一个脚本,调用MySDkPlatform中的方法 四、打包 1、方式一:SDK打成plugins给Unity(unity版) 2、方式二:Unity导出安卓工程接入SDK(studi…

Android应用安全之第三方SDK安全

第三方sdk的包括广告、支付、统计、社交、推送,地图等类别,是广告商、支付公司、社交、推送平台,地图服务商等第三方服务公司为了便于应用开发人员使用其提供的服务而开发的工具包,封装了一些复杂的逻辑实现以及请求,响…

机器学习与word

1、下面关于vector representations for words描述正确的是? A. 基于words总数N将每一个word映射到一个N维vector,即1-of-N Encoding B. 同样性质的word用相同的word class vector表示即word cluster C. 每一个word映射到高维空间的dimension reducti…

怎样修改word页面页码

修改word页码,使其从指定页面开始(目录更新后页码也正确) 1 首先在需要作为第一面的界面与前面用“布局”中的“分隔符”, 点击“下一页”,之后点击插入“页码” 2 之后在想要作为第一面的位置“链接到第一节” 3 删除…

Latex语法学习08:打通latex、mathml和word公式转换

目录 1 基于工具的转换 1.1 获取mathml源码 1.2 将mathml代码转换为latex 1.3 latex向mathml的转换 1.4 mathml粘贴到word 1.5 word转mathml 1.5.1 干法 1.5.2 注意要点 2 离线工具 2.1 mathml2latex 2.2 latex转word 2.2.1 一个前端开源项目 2.2.2 一个pyqt的界面程…

今日学习打卡

1.nlp:CNN 2.ml:PCA (最小重构代价;SVD角度;概率角度) 3.resnet 未学完 CNN: word_2_index[word] word_2_index.get(word,len(word_2_index)) 这句话的意思是,若索引到了则不改变键值对,若索引不到就增…

机器学习算法(十三):word2vec

目录 1 单词表达 1.1 Word embedding 1.2 独热(One hot representation) 1.2.1 独热编码介绍 1.2.2 优缺点分析 1.3 Dristributed representation 1.4 共现矩阵 (Cocurrence matrix) 3 word2vec 3.1 word2vec介绍 3.2 CBOW模型 3.2.1 Simple…

CSIC2010学习Word2vec表示及可视化

1、sudo apt-get install liblapack-dev 2、sudo apt-get install gfortran 3、sudo apt-get install python-pandas 4、sudo pip install --upgrade gensim 5、sudo pip install jieba 6、sudo pip install theano (0.7) 根据给定词生成word2vec词向量 # -*- coding: utf-8 …

机器学习算法实现解析——word2vec源码解析

在wrod2vec工具中,有如下的几个比较重要的概念: CBOWSkip-GramHierarchical SoftmaxNegative Sampling 其中CBOW和Skip-Gram是word2vec工具中使用到的两种不同的语言模型,而Hierarchical Softmax和Negative Sampling是对以上的两种模型的具…

【Word】学习笔记|批量解决文档中公式编号不居中的问题

1. 问题描述 当你将一个Word中内容(包含公式)复制到另外一个Ward里,发现MathType公式编号未居中,如上图所示。如果你公式较少,可以参考官方教程解决,就是将段落→中文版式→文本对齐方式中设置为居中就行。…

打开word会自动出现页眉的解决方法

打开word会自动出现页眉的解决方法 文章目录 打开word会自动出现页眉的解决方法1. 问题描述2. 解决方法 1. 问题描述 当没有其他word文档打开时,新建并打开一个word文档,并不会自动出现页眉。 但是当已经打开了一个word文档,此时再新建并打…

深度学习(六) Word Embedding

Word Embedding 前言一、One-hot编码1.为什么使用one-hot编码?2.什么是one-hot编码?3.one-hot编码的优缺点 二、Word Embedding(词嵌入)1.什么是Word Embedding?2.Word Embedding的优点:3.基于计数的Word Embedding1.基于计数的Word Embedding的优缺点2…

word学习小结1

最近偶然看到个WORD学习视频,网易得,不错,12节比较短,说得不错,日常工作中容易忽视得WORD技巧,总结之 1 比如 姓名: XXX 编号: XXX 一般输入姓名后,都…