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

  • uniapp安卓官方SDKhttps://nativesupport.dcloud.net.cn/AppDocs/download/android.html#

  • 官方uni原生插件开发教程(android)网址:https://nativesupport.dcloud.net.cn/NativePlugin/

第一步,开发环境的准备

  1. 下载uniapp安卓官方SDK待后面使用,解压完成如下图所示。

图片[1] - uniapp原生插件开发调用第三方SDK - MaxSSL

  1. JAVA环境 jdk,打开cmd输入java -version查看自己的jdk版本,官方文档中提示jdk版本应在1.7及以上,如果达不到标准,自行下载相关版本配置好环境变量即可。

图片[2] - uniapp原生插件开发调用第三方SDK - MaxSSL

  1. Android Studio 下载,下载地址https://developer.android.google.cn/studio/index.html

第二步,创建自己的项目

打开AndroidStudio,在菜单栏选择File>New>New Project,新建自定义项目

图片[3] - uniapp原生插件开发调用第三方SDK - MaxSSL

填写项目名称点击完成

图片[4] - uniapp原生插件开发调用第三方SDK - MaxSSL

创建完成后为了方便使用我们转为Project视图,我这里是汉化后的

图片[5] - uniapp原生插件开发调用第三方SDK - MaxSSL

接下来创建模板,点击菜单栏选择File>New>New Module

图片[6] - uniapp原生插件开发调用第三方SDK - MaxSSL

选择Android Library,填写module name点击完成

图片[7] - uniapp原生插件开发调用第三方SDK - MaxSSL

创建完毕后如图所示

图片[8] - uniapp原生插件开发调用第三方SDK - MaxSSL

配置刚创建的Module(testplugin)的build.gradle信息

图片[9] - uniapp原生插件开发调用第三方SDK - MaxSSL

将dependencies下默认生成的依赖注释掉,添加uni-app所需库依赖

//必须添加的依赖compileOnly 'androidx.recyclerview:recyclerview:1.0.0'compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'compileOnly 'androidx.appcompat:appcompat:1.0.0'compileOnly 'com.alibaba:fastjson:1.2.83'

图片[10] - uniapp原生插件开发调用第三方SDK - MaxSSL

导入官方提供的uni插件原生项目

图片[11] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[12] - uniapp原生插件开发调用第三方SDK - MaxSSL

将UniPlugin-Hello-AS下的app>libs下的文件复制到自己项目的app>libs

图片[13] - uniapp原生插件开发调用第三方SDK - MaxSSL

回到刚刚创建的testplugin的build.gradle中,进行导入aar需要的配置操作,在dependencies内添加

compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')

图片[14] - uniapp原生插件开发调用第三方SDK - MaxSSL

然后点击Sync Now进行同步处理

图片[15] - uniapp原生插件开发调用第三方SDK - MaxSSL

第三步,原生插件的开发

在我们所创建的module(testPlugin)>src>main>java>com.test.testPlugin创建类TestModule

图片[16] - uniapp原生插件开发调用第三方SDK - MaxSSL

  • Module 扩展必须继承 UniModule 类

  • 扩展方法必须加上@UniJSMethod (uiThread = false or true) 注解。UniApp 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。

我只做了最简单的返回插件调用成功的语句,可根据自己的业务逻辑自行编写

package com.test.testplugin;import com.alibaba.fastjson.JSONObject;import io.dcloud.feature.uniapp.annotation.UniJSMethod;import io.dcloud.feature.uniapp.bridge.UniJSCallback;import io.dcloud.feature.uniapp.common.UniModule;public class TestModule extends UniModule {@UniJSMethod(uiThread = false)public void open(UniJSCallback callback) {JSONObject data = new JSONObject();data.put("code","插件调用成功");callback.invoke(data);}}

第四步,注册插件

在app>src>main目录下创建assets文件夹

图片[17] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[18] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[19] - uniapp原生插件开发调用第三方SDK - MaxSSL

在app>src>main>assets目录下创建dcloud_uniplugins.json文件

图片[20] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[21] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[22] - uniapp原生插件开发调用第三方SDK - MaxSSL

将官方dcloud_uniplugins.json复制过来进行修改

dcloud_uniplugins.json说明

  • nativePlugins: 插件跟节点 可存放多个插件

  • hooksClass: 生命周期代理(实现AppHookProxy接口类)格式(完整包名加类名)

  • plugins: 插件数组

  • name : 注册名称

  • class : module 或 component 实体类完整名称

  • type : module 或 component类型。

{"nativePlugins":[{"hooksClass":"uni.dcloud.io.uniplugin_richalert.apphooks","plugins":[{"type":"module","name":"DCloud-RichAlert","class":"uni.dcloud.io.uniplugin_richalert.RichAlertModule"}]}]}

图片[23] - uniapp原生插件开发调用第三方SDK - MaxSSL

第五步,打包插件

打包插件到uniapp中使用,选择右侧Gradle>testplugin>Tasks>other>assembleRelease,双击assembleRelease等待系统module的arr文件。

注意:官方文档中是选择Gradle—>插件module—>Tasks—>build—>assembleRelease编译module的aar文件

图片[24] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[25] - uniapp原生插件开发调用第三方SDK - MaxSSL

成功后在testPlugin>build>outputs>aar目录下就可以找到相关插件了

图片[26] - uniapp原生插件开发调用第三方SDK - MaxSSL

第六步,HBuilderX导入和使用本地插件

新建uniapp项目如图所示

图片[27] - uniapp原生插件开发调用第三方SDK - MaxSSL

按照官方目录,创建目录nativeplugins>插件文件夹名称(最好和dcloud_uniplugins.json文件里填写的name一样)>android目录下,将刚才打包的插件放到android下,创建package.json文件,放入到插件文件夹目录下。

图片[28] - uniapp原生插件开发调用第三方SDK - MaxSSL

配置package.json,官方描述https://nativesupport.dcloud.net.cn/NativePlugin/course/package.html#

图片[29] - uniapp原生插件开发调用第三方SDK - MaxSSL

注意:插件标识id必须和name一致,plugins下的class是注册插件的类名要填对(同dcloud_uniplugins.json文件中的class一致)。配置文件为 json 格式,不能有注释,否则会解析失败

最后在manifest.json下选择我们开发的插件点击确认

图片[30] - uniapp原生插件开发调用第三方SDK - MaxSSL

在uniapp项目中获取插件

通过使用uni.requireNativePlugin获取插件对象。

图片[31] - uniapp原生插件开发调用第三方SDK - MaxSSL

第五步,运行项目

1.通过在线打包制作自定义基座来运行

选择运行>运行到手机或模拟器>制作自定义调试基座

图片[32] - uniapp原生插件开发调用第三方SDK - MaxSSL

我这里使用自用证书(证书没有的可自行申请),填写完成后点击打包

图片[33] - uniapp原生插件开发调用第三方SDK - MaxSSL

打自定义调试基座成功后,运行项目选择自定义调试基座

图片[34] - uniapp原生插件开发调用第三方SDK - MaxSSL

然后运行到Android App基座

图片[35] - uniapp原生插件开发调用第三方SDK - MaxSSL

运行后点击按钮调用插件方法获取到了插件返回值,调用插件成功,接下来可以进行自己的业务开发

图片[36] - uniapp原生插件开发调用第三方SDK - MaxSSL

上述运行是离线打包制作自定义基座来运行也可以通过AndroidStudio来运行条件基本一致,所以前期先把共同条件配置好

2.通过AndroidStudio来运行

配置AndroidManifest.xml,app>src>main>AndroidManifest.xml

图片[37] - uniapp原生插件开发调用第三方SDK - MaxSSL

添加内容到application节点,复制官方文档中的配置。

图片[38] - uniapp原生插件开发调用第三方SDK - MaxSSL

如下图在build.gradle(app)中添加引用资源

图片[39] - uniapp原生插件开发调用第三方SDK - MaxSSL

uni-app配置时需要在build.gradle中添加aaptOptions配置,在android中配置

aaptOptions {additionalParameters '--auto-add-overlay'ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"}

然后点击右上角的Sync Now。然后回到uniapp项目中,如图在发行选项>原生APP-本地打包(L)中选择生成本地打包App资源(R)

图片[40] - uniapp原生插件开发调用第三方SDK - MaxSSL

成功后找到如下所示文件

图片[41] - uniapp原生插件开发调用第三方SDK - MaxSSL

回到Android studio中在assets文件夹下创建apps文件夹,将本地打包资源处理后的文件(我的是__UNI__D95B2DF)拷贝到apps文件夹下。

图片[42] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[43] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[44] - uniapp原生插件开发调用第三方SDK - MaxSSL

然后在build.gradle(app)下添加,implementation project(‘:testPlugin’)用来引入本地插件

图片[45] - uniapp原生插件开发调用第三方SDK - MaxSSL

将下载的SDK在目录Android-SDK@3.6.18.81676_20230117\SDK\assets中找到data文件夹,拷贝到app>src>main>assets下

图片[46] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[47] - uniapp原生插件开发调用第三方SDK - MaxSSL

自定义基座的配置

在app目录下,将assets下apps文件夹中的manifest.json文件和data文件夹中的dcloud_control.xml文件打开,确保manifest.json中的id和dcloud_control.xml中的appid一致。并设置根节点的debug和syncDebug为true

图片[48] - uniapp原生插件开发调用第三方SDK - MaxSSL

在app>src>main>res>values配置strings.xml文件,将manifest.json文件中的name配置到strings.xml文件中

图片[49] - uniapp原生插件开发调用第三方SDK - MaxSSL

登陆dcloud开发者中心找到我们创建的uniapp项目,打开项目点击安卓云端证书-创建证书,等待生成证书。

图片[50] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[51] - uniapp原生插件开发调用第三方SDK - MaxSSL

生成证书后点击下载证书我们将下载好的证书重命名为demoKeys.keystore,将在Android studio中自己项目的app下创建文件夹key>testaline,将demoKeys.keystore放在此目录下如下图所示

图片[52] - uniapp原生插件开发调用第三方SDK - MaxSSL

然后在dcloud中点击各平台信息点击修改

图片[53] - uniapp原生插件开发调用第三方SDK - MaxSSL

包名为build.gradle(app)文件中android下的defaultConfig下的applicationId。SHA1、MD5、SHA256的值在刚申请的证书详情中,注意对应

图片[54] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[55] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[56] - uniapp原生插件开发调用第三方SDK - MaxSSL

修改后点击保存,创建离线打包Key

图片[57] - uniapp原生插件开发调用第三方SDK - MaxSSL

在Android studio项目中app>src>main>AndroidManifest.xml文件中添加代码,android:value的值是我们创建的appkey,将第二张图红色框中的appkey复制进去就行。

图片[58] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[59] - uniapp原生插件开发调用第三方SDK - MaxSSL

在build.gradle(app)文件中添加如下代码,红线框为需要添加部分

图片[60] - uniapp原生插件开发调用第三方SDK - MaxSSL

然后切换为app,点击运行到你连接的设备就行了,我这里是运行到雷电模拟器

图片[61] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[62] - uniapp原生插件开发调用第三方SDK - MaxSSL

插件开发成功接下来可以进行自己的业务开发,调用第三方SDK。我涉及的是调用SDK获取称重数据,将SDK导入module下的libs目录下

图片[63] - uniapp原生插件开发调用第三方SDK - MaxSSL

在build.gradle(:testPlugin)中引入jar文件

图片[64] - uniapp原生插件开发调用第三方SDK - MaxSSL

然后编写自己的业务逻辑,原本怎么调用SDK的就怎么调用。

关于获取上下文

在module下新建MyApplication类,输入下列代码。然后将lib5+导入到libs下

图片[65] - uniapp原生插件开发调用第三方SDK - MaxSSL

import android.content.Context;import io.dcloud.application.DCloudApplication;public class MyApplication extends DCloudApplication{public static Context context;public static Context getContext() {returncontext;}public static boolean xSSurcess = false;@Overridepublic void onCreate() {super.onCreate();context = this;}}

图片[66] - uniapp原生插件开发调用第三方SDK - MaxSSL

在AndroidMainfest.xml中配置

图片[67] - uniapp原生插件开发调用第三方SDK - MaxSSL 图片[68] - uniapp原生插件开发调用第三方SDK - MaxSSL

参考文章:

  • https://mp.weixin.qq.com/s?__biz=MzAwNjI4MDU0OA==&mid=100000439&idx=1&sn=3b367e74da86a6c6e6b4ee2827fd8a09&chksm=1b0e86bc2c790faa7181a72a7a7f62c75852da0a7b1ae018cc1c100a6f56696759bc59309971&mpshare=1&scene=23&srcid=0220o6usaYR7gT00nvUoA2Iq&sharer_sharetime=1676885979115&sharer_shareid=190ac1f8c41fa309279bf41548a6febf#rd

  • https://www.u7007.com/article/details/174225268810

小白分享自己的开发过程,如有错误请各位大佬指出。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享