分享错误,学习生活

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

52yxgame

经过前几次的文章,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 可以直接复制

  1. document.addEventListener( , function()
  2. {
  3. // 声明的JS“扩展插件别名”
  4. var _BARCODE = 'plugintest',
  5. B = window.plus.bridge;
  6. var plugintest =
  7. {
  8. // 声明异步返回方法
  9. PluginTestFunction : function (Argus1, Argus2, Argus3, Argus4, successCallback, errorCallback )
  10. {
  11. var success = typeof successCallback !== 'function' ? null : function(args)
  12. {
  13. successCallback(args);
  14. },
  15. fail = typeof errorCallback !== 'function' ? null : function(code)
  16. {
  17. errorCallback(code);
  18. };
  19. callbackID = B.callbackId(success, fail);
  20. // 通知Native层plugintest扩展插件运行”PluginTestFunction”方法
  21. return B.exec(_BARCODE, , [callbackID, Argus1, Argus2, Argus3, Argus4]);
  22. },
  23. PluginTestFunctionArrayArgu : function (Argus, successCallback, errorCallback )
  24. {
  25. var success = typeof successCallback !== 'function' ? null : function(args)
  26. {
  27. successCallback(args);
  28. },
  29. fail = typeof errorCallback !== 'function' ? null : function(code)
  30. {
  31. errorCallback(code);
  32. };
  33. callbackID = B.callbackId(success, fail);
  34. return B.exec(_BARCODE, , [callbackID, Argus]);
  35. },
  36. // 声明同步返回方法
  37. PluginTestFunctionSync : function (Argus1, Argus2, Argus3, Argus4)
  38. {
  39. // 通知Native层plugintest扩展插件运行“PluginTestFunctionSync”方法并同步返回结果
  40. return B.execSync(_BARCODE, , [Argus1, Argus2, Argus3, Argus4]);
  41. },
  42. PluginTestFunctionSyncArrayArgu : function (Argus)
  43. {
  44. return B.execSync(_BARCODE, , [Argus]);
  45. }
  46. };
  47. window.plus.plugintest = plugintest;
  48. }, true );

第五步:Android项目中新建一个类
这个类你可以按照官方文档里使用旧接口或者新接口,随你。我是用的新接口

  1. package com.example.H5PlusPlugin;
  2. import io.dcloud.common.DHInterface.IWebview;
  3. import io.dcloud.common.DHInterface.StandardFeature;
  4. import io.dcloud.common.util.JSUtil;
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8. public class PGPlugintest extends StandardFeature
  9. {
  10. public void PluginTestFunction(IWebview pWebview, JSONArray array)
  11. {
  12. String CallBackID = array.optString(0);
  13. JSONArray newArray = new JSONArray();
  14. newArray.put(array.optString(1));
  15. newArray.put(array.optString(2));
  16. newArray.put(array.optString(3));
  17. newArray.put(array.optString(4));
  18. JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);
  19. }
  20. public void PluginTestFunctionArrayArgu(IWebview pWebview, JSONArray array)
  21. {
  22. String ReturnString = null;
  23. String CallBackID = array.optString(0);
  24. JSONArray newArray = null;
  25. try {
  26. newArray = new JSONArray( array.optString(1));
  27. String inValue1 = newArray.getString(0);
  28. String inValue2 = newArray.getString(1);
  29. String inValue3 = newArray.getString(2);
  30. String inValue4 = newArray.getString(3);
  31. ReturnString = inValue1 + + inValue2 + + inValue3 + + inValue4;
  32. } catch (JSONException e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. }
  36. JSUtil.execCallback(pWebview, CallBackID, ReturnString, JSUtil.OK, false);
  37. }
  38. public String PluginTestFunctionSyncArrayArgu(IWebview pWebview, JSONArray array)
  39. {
  40. JSONArray newArray = null;
  41. JSONObject retJSONObj = null;
  42. try {
  43. newArray = array.optJSONArray(0);
  44. String inValue1 = newArray.getString(0);
  45. String inValue2 = newArray.getString(1);
  46. String inValue3 = newArray.getString(2);
  47. String inValue4 = newArray.getString(3);
  48. retJSONObj = new JSONObject();
  49. retJSONObj.putOpt(, inValue1);
  50. retJSONObj.putOpt(, inValue2);
  51. retJSONObj.putOpt(, inValue3);
  52. retJSONObj.putOpt(, inValue4);
  53. } catch (JSONException e1) {
  54. // TODO Auto-generated catch block
  55. e1.printStackTrace();
  56. }
  57. return JSUtil.wrapJsVar(retJSONObj);
  58. }
  59. public String PluginTestFunctionSync(IWebview pWebview, JSONArray array)
  60. {
  61. String inValue1 = array.optString(0);
  62. String inValue2 = array.optString(1);
  63. String inValue3 = array.optString(2);
  64. String inValue4 = array.optString(3);
  65. String ReturnValue = inValue1 + + inValue2 + + inValue3 + + inValue4;
  66. return JSUtil.wrapJsVar(ReturnValue,true);
  67. }
  68. }

注意这个java类和js里面的方法名称是相同的,意思就是当你在html里面请求方法A,那么A必须在js类中有声明,java类中有实现。java类中写具体的业务操作。return返回值可以根据你的业务进行修改,无论是string或是jsonarray返回类型。附上我DIY的代码

js:

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

java:这里面调用的easylink的jar包中的方法。你需要根据你的需求进行更改。

  1. public String EasyLinkDeviceConnectWifi(IWebview pWebview, JSONArray array) {
  2. Date curDate = new Date(System.currentTimeMillis());
  3. EasyLinkParams params = new EasyLinkParams();
  4. params.ssid = array.optString(0);
  5. params.password = array.optString(1);
  6. params.isSendIP = false;
  7. params.runSecond = 2000;
  8. params.sleeptime = 20;
  9. params.extraData = null;
  10. EasyLink easy = new EasyLink(pWebview.getActivity());
  11. easy.startEasyLink(params, new EasyLinkCallBack() {
  12. @Override
  13. public void onSuccess(int arg0, String arg1) {
  14. Log.d(, + arg0 + + arg1 + );
  15. ReturnValue=;
  16. }
  17. @Override
  18. public void onFailure(int arg0, String arg1) {
  19. Log.d(, + arg0 + + arg1 + );
  20. ReturnValue=;
  21. }
  22. });
  23. Date endDate = new Date(System.currentTimeMillis());
  24. Log.d(,Long.toString(endDate.getTime() - curDate.getTime()));
  25. return JSUtil.wrapJsVar(ReturnValue,true);
  26. }

第六步:当你写完所有的业务后,就可以进行调试了。Android调试我就不说了。剩下的就是到处apk了。

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

52yxgame
nmei\u7f8e\u5973\u56fe\u5e93

暂无评论

发表评论

电子邮件地址不会被公开。