发明内容
以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
本申请实施例提供一种基于API接口的原生能力拓展方法、设备及存储介质,能够有效提高原生交互能力开发操作的灵活性和便捷性。
第一方面,本申请实施例提供一种基于API接口的原生能力拓展方法,包括:
获取来自插件仓库的原生功能插件;
将所述原生功能插件添加到插件目录;
根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。
在一可选的实现方式中,所述获取来自插件仓库的原生功能插件之前,还包括:
创建原生功能插件;
将原生功能插件上传到所述插件仓库。
在一可选的实现方式中,所述创建原生功能插件,包括:
创建JSSDK插件;
为所述JSSDK插件设置API请求接口,编写插件原生功能,以生成原生功能插件。
在一可选的实现方式中,所述创建JSSDK插件,包括:
获取创建指令;所述创建指令包括命令行“poros-devtools create JSSDKplugincom.comtop.myplugin”;
根据所述创建指令,创建JSSDK插件。
在一可选的实现方式中,所述将所述原生功能插件添加到插件目录,包括:
获取添加指令;所述添加指令包括命令行“poros-devtools add JSSDKplugincom.comtop.myplugin”;
根据所述添加指令,将所述原生功能插件添加到插件目录。
在一可选的实现方式中,一种基于API接口的原生能力拓展方法还包括:
在HTML应用部分程序中通过API请求的方式进行原生功能插件调用。
在一可选的实现方式中,一种基于API接口的原生能力拓展方法还包括:
接收删除指令;
根据所述删除指令,删除所述插件目录中对应的原生功能插件;
根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。
在一可选的实现方式中,所述HTML应用程序包为APK包,所述HTML应用程序为HTML5应用程序。
第二方面,本申请实施例提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的基于API接口的原生能力拓展方法。
第三方面,本申请实施例提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行第一方面所述的基于API接口的原生能力拓展方法。
本申请实施例第一方面提供的基于API接口的原生能力拓展方法,与相关技术相比,通过获取来自插件仓库的原生功能插件,将所述原生功能插件添加到插件目录,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。本申请实施例实现原生能力的快速热插拔,降低原生能力开发难度,节省开发成本,提升开发效率,同时让整个系统更加稳定,维护更加便捷,从而有效提高原生交互能力开发操作的灵活性和便捷性。
可以理解的是,上述第二方面至第三方面与相关技术相比存在的有益效果与上述第一方面与相关技术相比存在的有益效果相同,可以参见上述第一方面中的相关描述,在此不再赘述。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请实施例。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请实施例的描述。
需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
还应当理解,在本申请实施例说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请实施例的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
本申请实施例提供的基于API(Application Programming Interface,应用程序接口)接口的原生能力拓展方法,与相关技术相比,通过获取来自插件仓库的原生功能插件,将所述原生功能插件添加到插件目录,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。本申请实施例实现原生能力的快速热插拔,降低原生能力开发难度,节省开发成本,提升开发效率,同时让整个系统更加稳定,维护更加便捷,从而有效提高原生交互能力开发操作的灵活性和便捷性。
下面结合附图,对本申请实施例作进一步阐述。
如图1所示,图1是本申请一个实施例提供的用于执行基于API接口的原生能力拓展方法的系统架构的示意图。在图1的示例中,该系统架构包括HTML(Hyper Text MarkupLanguage,超文本标记语言)应用程序包110、插件工具120和插件仓库130。该系统架构中的插件工具作为应用程序开发的系统,可以运行在终端设备中,终端设备可以为移动终端设备,也可以为非移动终端设备。移动终端设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载终端设备、可穿戴设备、超级移动个人计算机、上网本、个人数字助理等;非移动终端设备可以为个人计算机、电视机、柜员机或者自助机等;本发明实施方案不作具体限定。在一些实施例中,HTML应用程序包110为终端设备最终生成的应用程序包。在一些实施例中,插件仓库130可以设置在远端服务器中,也可以和插件工具设置在同一终端设备中,本申请实施例对此不做限定。
其中,插件仓库130与插件工具120通信连接,插件仓库130用于存储原生能力插件,例如摄像头原生能力插件、麦克风原生能力插件、图像分析原生能力插件等。原生能力插件均为具有API接口可访问的原生能力插件。插件仓库130可以设置在远端服务器中,也可以和插件工具设置在同一终端设备中(本地插件),本申请实施例对此不做限定。
插件工具120分别与插件仓库130和HTML应用程序包110通信连接,一方面用于创建和封装原生能力插件传输给插件仓库130进行存储,另一方面用于获取插件仓库130的原生能力插件并打包进HTML应用程序包110,实现原生能力的拓展。在一些实施例中,插件工具120还用于删除HTML应用程序包110插件目录中对应的原生能力插件。
HTML应用程序包110与插件工具120通信连接,HTML应用程序包110包括HTML应用程序部分和原生能力插件部分,HTML应用程序部分可通过API请求的方式进行原生能力插件调用。在一些实施例中,HTML应用程序包是本申请方法的产物,可以被安装和运行的应用程序包,例如,可以安装在Android系统的移动终端的应用程序包,也可以是IOS的移动终端的应用程序包。
本申请实施例描述的系统架构以及应用场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着系统架构的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图1中示出的系统架构并不构成对本申请实施例的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
在图1所示的系统架构中,插件工具120可以调用其储存的原生能力拓展程序,以执行基于API接口的原生能力拓展方法。
基于上述系统架构,提出本申请实施例的基于API接口的原生能力拓展方法的各个实施例。
参照图2,本申请实施例提供一种基于API接口的原生能力拓展方法,包括:
步骤S1100,获取来自插件仓库的原生功能插件;
步骤S1200,将所述原生功能插件添加到插件目录;
步骤S1300,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。
应用端的HTML(如HTML5,以下简称H5),最终都是通过系统的API来完成两个端的交互,但是对于比较通用的原生能力通常可以提供给通用的h5项目进行,但随着需要的原生交互能力原来越多或者有些需要依赖体积比较大的APK(Android applicationpackage,Android应用程序包),通用的原生能力库就会变得越来越大,对于有些不需要的原生能力,白白增加的APK的体积,所以就需要一种以热插拔的插件方式接入、移除原生能力。相关技术中,可以通过添加现有插件仓库里面的插件来拓展原生能力,例如,相关技术可以进行创建插件工程,然后编写自定义的原生能力,然后通过加入自己编写的插件即可实现集成自定义的原生能力。但是在开发自定义插件的过程中往往需要去自己去手动配置难以理解的plugin.xml配置,导致在编写插件时会因为plugin.xml的配置错误而导致项目构建不通过或者调用失败。
本申请实施例基于API接口请求的原生能力调用,通过打包构建脚本对于原生能力的热插拔机制,并且提供动态接入原生能力的机制,简化插件编写的难度,将原生能力与前端API解耦合,添加原生能力无需更改或添加前端文件,简化项目的打包依赖,将插件作为整体的依赖包打包到HTML应用程序包,防止频繁的打包错误,提升开发效率。
在一些实施例中,步骤S1200中,插件目录是指HTML应用程序包需要用到的原生能力插件的列表,可以通过插件目录中原生功能插件的增加实现添加原生功能插件,也可以通过插件目录中原生功能插件的减少实现删除原生功能插件,从而使得原生功能插件的拓展和变更更加灵活。
在一些实施例中,步骤S1300中,可以将插件目录对应的原生功能插件打包进HTML应用程序包。使得HTML应用程序包既包含HTML应用程序部分,又包含原生功能插件部分,HTML应用程序部分可调用HTML应用程序包内部的原生功能插件。在一些实施例中,HTML应用程序包可以是APK包。
本申请实施例提供的基于API接口的原生能力拓展方法,与相关技术相比,通过获取来自插件仓库的原生功能插件,将所述原生功能插件添加到插件目录,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。本申请实施例实现原生能力的快速热插拔,降低原生能力开发难度,节省开发成本,提升开发效率,同时让整个系统更加稳定,维护更加便捷,从而有效提高原生交互能力开发操作的灵活性和便捷性。
参照图3,在一些实施例中,步骤S1100,所述获取来自插件仓库的原生功能插件之前,还包括:
步骤S1400,创建原生功能插件;
步骤S1500,将原生功能插件上传到所述插件仓库。
在一些实施例中,针对管理插件仓库,高频使用的插件轻松集成使用。通过上述步骤可实现原生能力的快速热插拔,降低原生能力开发难度,节省开发成本,提升开发效率通过API接口请求方式,将H5与原生能力直接进行解耦合,让整个系统更加稳定,维护更加便捷;丰富的插件仓库,能够满足大部分项目的原生能力需求。
在一些实施例中,步骤S1400,所述创建原生功能插件,包括:
步骤S1410,创建JSSDK(JavaScript-Software Development Kit,JS软件开发工具包)插件;
步骤S1420,为所述JSSDK插件设置API请求接口,编写插件原生功能,以生成原生功能插件。
步骤S1420是对JSSDK插件进行封装,使得其可通过API请求接口被调用。
在一些实施例中,步骤S1410,所述创建JSSDK插件,包括:
步骤S1411,获取创建指令;所述创建指令包括命令行“poros-devtools createJSSDKplugin com.comtop.myplugin”;
步骤S1412,根据所述创建指令,创建JSSDK插件。
在一些实施例中,可以通过人机交互装置(如鼠标、键盘、触摸屏等),获取来自用户的特定的创建命令行,创建JSSDK插件,例如,命令行可以是“poros-devtools createJSSDKplugin com.comtop.myplugin”,创建JSSDK插件“com.comtop.myplugin”。
在一些实施例中,步骤S1200,所述将所述原生功能插件添加到插件目录,包括:
步骤S1210,获取添加指令;所述添加指令包括命令行“poros-devtools addJSSDKplugin com.comtop.myplugin”;
步骤S1220,根据所述添加指令,将所述原生功能插件添加到插件目录。
在一些实施例中,可以通过人机交互装置(如鼠标、键盘、触摸屏等),获取来自用户的特定的添加命令行,将所述原生功能插件添加到插件目录,例如,命令行可以是“poros-devtools add JSSDKplugin com.comtop.myplugin”,添加JSSDK插件“com.comtop.myplugin”。
参照图4,在一些实施例中,一种基于API接口的原生能力拓展方法还包括:
步骤S1600,在HTML应用部分程序中通过API请求的方式进行原生功能插件调用。
在一些实施例中,在HTML应用部分程序中通过API请求的方式进行原生功能插件调用例如,API请求命令行可以是“eim://com.comtop.eim/extension/com.comtop.myplugin?action=xxx&succallback=xxx&failcallb ack=xxx&key1=value1&key2=value2.....”。
参照图5,在一些实施例中,一种基于API接口的原生能力拓展方法还包括:
步骤S1700,接收删除指令;
步骤S1800,根据所述删除指令,删除所述插件目录中对应的原生功能插件;
步骤S1900,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。
在一些实施例中,可以通过人机交互装置(如鼠标、键盘、触摸屏等),获取来自用户的特定的删除命令行,将所述原生功能插件从插件目录中删除。
在一些实施例中,所述HTML应用程序包为APK包,所述HTML应用程序为HTML5应用程序。
在一些实施例中,HTML应用程序包可以根据应用系统环境而变化,可以是android系统的应用程序包,也可以是IOS系统的应用程序包等等。
在一些实施例中,插件工具能够完成插件的创建、添加(本地插件或插件仓库上的插件)、删除。应用端通过打包构建脚本动态的添加删除原生能力依赖包。H5使用API接口形式的请求来调用动态化的原生能力。
在一些实施例中,可以使用命令行添加插件,插件会被添加到对应的插件目录;也可以使用命令行删除插件,插件会从对应的插件目录被删除掉;也可以使用命令行进行打包,打包插件会将插件目录中的插件统一打包进APK中;H5端使用统一的API进行调用原生功能插件。
以下以两个具体的示例进行说明本申请实施例的原生能力拓展机制。
示例一
基于API接口的原生能力拓展方法包括步骤:
(1)创建JSSDK插件。
例如,可通过poros-devtools create JSSDKplugin com.comtop.myplugin来创建插件。
(2)定义好API请求接口,编写插件原生功能。
(3)添加插件。
例如,可通过poros-devtools add JSSDKplugin com.comtop.myplugin来添加插件。
(4)打包构建。打包构建脚本会将插件动态的打包进APK中。
(5)H5调用原生能力。
在H5中通过API请求的方式进行com.comtop.myplugin插件的原生能力调用。例如,可通过命令“eim://com.comtop.eim/extension/com.comtop.myplugin?action=xxx&succallback=xxx&failcallb ack=xxx&key1=value1&key2=value2.....”,实现插件的原生能力调用。
示例二
基于API接口的原生能力拓展方法包括步骤:
(1)通过命令行工具创建插件模板工程(android端示例)。例如,可以创建调用工程目录和插件目录。
(2)在PluginEntryProvider中的onAction方法中进行业务逻辑的开发,创建原生能力插件。
例如,业务逻辑的开发的部分代码可以参照如下:
CRouterMeta(path="/extension/com.example.mytaost")
public class PluginEntryProvider extends AbstractRouteProvider{
//获veb就需要调用action的key private static final String PARAMS_ACTION="action";
//定义toast操作
private static final String PARANS_ACTION_TOAST="toast";
//taost操作参数的key private static final String ACTION_TOAST_PARAMS_MESSAGE="message";eoverride public boolean onAction(GNonNul1 Contextcontext,@NonNull WebView webview,GNonNu11 Bundle data,@NonNullRouterProviderMeta item){
//获veb端需要调用action
string action=data.getstring(PARAMS_ACTION);if(Textutils.isEmpty(action)){
return true;if(Textutils.equals(action,PARANS_ACTION_TOAST)){
//获段toast操作的message参数的值,并完成吐司
Toast.makeText(context,data.getstring(ACTION_TOAST_PARAIMS_MESSAGE),ToaSt.LENGTH_SHORT).show();return true;}。
上述开发的插件的难度和工作量相比与相关技术大大降低。
(3)插件调试,直接运行example项目加载上线H5应用进行调试插件功能,H5应用通过JSSDK插件拓展接口进行调用插件功能。
例如,插件调试的部分代码可以参照如下:
jssdk.extendJssdk(
‘com.comtop.pluginlib',//pluginId
‘toast',//要调用的action
{message:‘吐司内容'},//toast操作所需要的nessage参数function(){console.log('success')},//成功回调function(){console.log('fail')}//失败回调);
(4)通过命令行工具添加插件到项目。
例如,可通过命令行“poros-devtools add com.comtop.pluginlib”将原生能力插件添加到插件目录。
(5)打包器读取JSSDK插件目录将JSSDK插件功能打包进项目。
例如,打包的部分代码可以参照如下:
def projectRoot=rootProject.projectDir def pluginsFile=new File(projectRoot,'files/poros_plugins')
if(pluginsFile.exists()&&pluginsFile.directory){
pluginsFile.listFiles().each{File f->
if(f.directory){
implementation project(":${f.name}")
(6)最后在项目中进行调用。
例如,在H5中通过API请求的方式进行com.comtop.myplugin插件的原生能力调用。例如,可通过命令“eim://com.comtop.eim/extension/com.comtop.myplugin?action=xxx&succallback=xxx&failcallba ck=xxx&key1=value1&key2=value2.....”,实现插件的原生能力调用。
在一些实施例中,实现调用部分代码如下:
JSSDK.extend]sSDK(
‘com.comtop.pluginlib',//pluginId
‘toast',/∥要调用的的ction
{message:’吐司内容},//toast操作所需要的nessage参数function(){console.log('success')},/∥成动回潮function(){console.1og('fail')}//关败回调);
有上述可知,相对于相关技术,开发的插件的难度和工作量大大降低。
另外,本申请实施例还提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的基于API接口的原生能力拓展方法。
处理器和存储器可以通过总线或者其他方式连接。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
需要说明的是,本实施例中的电子设备,可以应用为如图1所示实施例的系统架构中的电子设备,本实施例中的电子设备和如图1所示实施例的系统架构中的电子设备具有相同的发明构思,因此这些实施例具有相同的实现原理以及技术效果,此处不再详述。
实现上述实施例的基于API接口的原生能力拓展方法所需的非暂态软件程序以及指令存储在存储器中,当被处理器执行时,执行上述实施例中的基于API接口的原生能力拓展方法,例如,执行以上描述的图2中的方法步骤S1100至S1300。
本申请实施例提供的基于API接口的原生能力拓展方法,与相关技术相比,通过获取来自插件仓库的原生功能插件,将所述原生功能插件添加到插件目录,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。本申请实施例实现原生能力的快速热插拔,降低原生能力开发难度,节省开发成本,提升开发效率,同时让整个系统更加稳定,维护更加便捷,从而有效提高原生交互能力开发操作的灵活性和便捷性。
另外,本申请实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行上述的基于API接口的原生能力拓展方法。该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个处理器或控制器执行,例如,被上述电子设备实施例中的一个处理器执行,可使得上述处理器执行上述实施例中的基于API接口的原生能力拓展方法,例如,执行以上描述的图2中的方法步骤S1100至S1300。
本申请实施例提供的基于API接口的原生能力拓展方法,与相关技术相比,通过获取来自插件仓库的原生功能插件,将所述原生功能插件添加到插件目录,根据所述插件目录,将插件目录对应的原生功能插件打包进HTML应用程序包。本申请实施例实现原生能力的快速热插拔,降低原生能力开发难度,节省开发成本,提升开发效率,同时让整个系统更加稳定,维护更加便捷,从而有效提高原生交互能力开发操作的灵活性和便捷性。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本申请实施例的较佳实施进行了具体说明,但本申请实施例并不局限于上述实施方式,熟悉本领域的技术人员在不违背本申请实施例精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请实施例权利要求所限定的范围内。