CN110321228B - 原生方法的调用方法、装置、设备及计算机可读存储介质 - Google Patents
原生方法的调用方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110321228B CN110321228B CN201810264438.9A CN201810264438A CN110321228B CN 110321228 B CN110321228 B CN 110321228B CN 201810264438 A CN201810264438 A CN 201810264438A CN 110321228 B CN110321228 B CN 110321228B
- Authority
- CN
- China
- Prior art keywords
- layer
- information
- native
- calling
- called
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Abstract
本发明实施例公开了一种原生方法的调用方法、装置、设备及计算机可读存储介质。方法包括:获取JS层对原生方法的调用请求,所述调用请求携带所述原生方法的信息;对所述调用请求进行权限验证;当所述权限验证通过时,将所述调用请求转发至原生层,所述原生层根据所述调用请求中携带的原生方法的信息调用所述原生方法。当获取到JS层对原生方法的调用请求后,通过对该调用请求进行权限验证,从而保证了安全性;在通过权限验证后,通过将调用请求转发至原生层进行处理,避免了再去通知JS层,缩短了调用路径,进而提高了调用效率。
Description
技术领域
本发明实施例涉及计算机技术领域,特别涉及一种原生方法的调用方法、装置、设备及计算机可读存储介质。
背景技术
随着计算机技术的发展,应用程序(App)的种类越来越多。为了开发App,时常需要调用原生方法,例如,通过JS(javascript,一种脚本语言)调用Native(原生)方法。
相关技术在实现原生方法的调用时,任何JS模块(JSModule)可以发起NativeCall(Native调用)来调用Native层的任意方法。在JS模块发起调用请求时,会将方法名、参数等放入JS侧的消息队列(MessageQueue)中。之后,通过Java层事件通知JS层后,消息队列将JS放入的内容通过中间层(JSBridge)传递给Native层,Native层根据方法名调用相应的方法。
然而,由于每个JS模块都可以调用任意Native方法,导致安全性较低。此外,JS调用Native时需要通过Java层事件通知JS层,导致调用效率较低。
发明内容
本发明实施例提供了一种原生方法的调用方法、装置、设备及计算机可读存储介质,可用于解决相关技术中的问题。所述技术方案如下:
一方面,本发明实施例提供一种原生方法的调用方法,所述方法包括:
获取JS层对原生方法的调用请求,所述调用请求携带所述原生方法的信息;
对所述调用请求进行权限验证;
当所述权限验证通过时,将所述调用请求转发至原生层,所述原生层根据所述调用请求中携带的原生方法的信息调用所述原生方法。
一方面,提供了一种原生方法的调用装置,所述装置包括:
获取模块,用于获取JS层对原生方法的调用请求,所述调用请求携带所述原生方法的信息;
验证模块,用于对所述调用请求进行权限验证;
转发模块,用于当所述权限验证通过时,将所述调用请求转发至原生层;
调用模块,用于所述原生层根据所述调用请求中携带的原生方法的信息调用所述原生方法。
一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被所述处理器执行时实现上述的原生方法的调用方法。
一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被执行时实现上述的原生方法的调用方法。
本发明实施例提供的技术方案可以带来如下有益效果:
当获取到JS层对原生方法的调用请求后,通过对该调用请求进行权限验证,从而保证了安全性;在通过权限验证后,通过将调用请求转发至原生层进行处理,避免了再去通知JS层,缩短了调用路径,进而提高了调用效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是相关技术中提供的一种原生方法的调用过程示意图;
图2是本发明实施例提供的一种实施环境示意图;
图3是本发明实施例提供的一种原生方法的调用方法流程图;
图4是本发明实施例提供的一种权限配置文件的下载过程示意图;
图5是本发明实施例提供的一种权限验证的过程示意图;
图6是本发明实施例提供的一种处理调用请求的过程示意图;
图7是本发明实施例提供的一种原生方法的调用过程示意图;
图8是本发明实施例提供的一种原生方法的调用装置的结构示意图;
图9是本发明实施例提供的一种原生方法的调用装置的结构示意图;
图10是本发明实施例提供的一种原生方法的调用装置的结构示意图;
图11是本发明实施例提供的一种终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
随着计算机技术的发展,开发出的应用程序(App)的种类越来越多。目前,主流的App开发模式可以概括成四种:NativeApp(原生App)、Web App(网页App)、Hybrid App(混合模式App)以及React NativeApp。其中,Hybrid App为基于webView(网页视图)的跨平台混合开发App技术,由原生App提供统一的API(Application Program Interface,应用程序接口)给JS侧调用,实现一套前端代码在多端进行功能复用。Web App与Hybrid App受限于webView的性能桎梏,相比原生而言有不少损耗,体验无法和原生相比。
React NativeApp为一种移动端技术框架,可以通过使用JavaScript和React技术在android(安卓)与ios(移动操作系统)端上构建原生App,获得完全一致的开发体验。另外,React NativeApp通过写一套JS代码就能在多端实现功能,同时其性能体验高于HybridApp甚至不逊色于原生。它通过基于JavaScriptCore(JS核)使得JS侧与Native侧可以互相调用。而JSBridge(JS桥)作为JS与Native的中间层,起到请求转发的作用,对于React NativeApp而言,其本质为JS层与Native层互相调用的过程。其中,JavaScriptCore是webkit(浏览器引擎)的一个重要组成部分,主要是对JS进行解析和提供执行环境。
然而,在App开发过程中,无论上述哪种App开发模式,时常需要调用原生方法(即java调用非java代码的接口),例如,通过JS(javascript)调用Native(原生)方法。如图1所示,相关技术在实现原生方法的调用时,任何JS模块(JSModule)可以发起NativeCall(原生调用)来调用Native层的任意方法。在JS模块发起请求时,将方法名、参数等放入JS侧的消息队列(MessageQueue)中。通过Java层事件通知JS层后,消息队列将JS放入的内容通过中间层(JSBridge)传递给Native层,Native层根据方法名调用相应的方法。
另外,目前JS侧调用Native时,只校验了java方法是否有能被JS侧调用的标志,由于每个JS模块都可以调用任意Native方法,导致安全性较低。此外,相关技术中,JS不是直接通过注册接口去主动调用java方法的,而是要通过java层的驱动(例如事件,timer等)到JS层后,JS才会将数据返回给java层,再通过注册表去调用原生方法,整体JS调用Native的流程过长,导致调用效率较低,影响性能。
为此,本发明实施例提供了一种原生方法的调用方法,该方法优化了JS调用Native的流程,在JSBridge层加入了API Permission(权限)校验,并使JS可以随时主动调用Native方法,缩短了调用路径,使整套方案更加安全高效。该方法包括但不限于应用在同一个App中,需要控制不同JS能调用不同Native方法的权限等应用场景中。
请参考图2,其示出了本发明实施例提供的实施环境的示意图。该实施环境可以包括:终端21和服务器22。
终端21安装有App开发客户端,当该客户端启动后,可通过终端21从服务器22上获取权限配置文件或预设的默认配置文件,该权限配置文件或预设的默认配置文件中存储有JS层可调用和/或禁止调用的原生方法的信息,该信息包括但不限于原生方法名。终端21获取到权限配置文件后,可据此对获取到的JS层对原生方法的调用请求进行权限验证,进而保证调用的安全性。此外,终端21还可以基于权限验证后,继续处理JS层调用原生方法的操作。
服务器22用于存储JS文件及权限配置文件等,并当接收到终端21发送的请求后,将权限配置文件等发送给终端21。
其中,终端21可以是诸如手机、平板电脑、个人计算机等电子设备。
服务器22可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。
终端21与服务器22通过有线或无线网络建立通信连接。
基于上述实施环境,本发明实施例提供了一种原生方法的调用方法,请参考图3,其示出了本发明实施例提供的原生方法的调用方法流程图,该方法可应用于图2所示实施环境的终端21中。如图3所示,本发明实施例提供的方法可以包括如下几个步骤:
在步骤301中,获取JS层对原生方法的调用请求,调用请求携带原生方法的信息。
当需要通过JS层调用Native层的原生方法时,JS层发起调用请求,即获取到JS层对原生方法的调用请求。其中,调用请求中携带的原生方法的信息可以为原生方法的方法名,还可以包括对应的参数,本发明实施例对此不加以限定。
在步骤302中,对调用请求进行权限验证。
为了保证安全性,本发明实施例提供的方法在获取到调用请求后,并非直接执行调用,而是先对调用请求进行权限验证。权限验证过程,包括但不限于获取权限配置文件,权限配置文件中存储有JS层可调用和/或禁止调用的原生方法的信息;根据权限配置文件对调用请求进行权限验证。
其中,获取权限配置文件的方式,包括但不限于当从服务器下载待渲染的JS文件时,从服务器下载权限配置文件。
实际应用过程中,考虑到网络连接出现问题等突发情况有可能无法从服务器中下载权限配置文件,为此,本发明实施例提供的方法还包括:当获取权限配置文件失败时,获取预设的默认配置文件,该预设的默认配置文件中存储有JS层可调用和/或禁止调用的原生方法的信息;根据预设的默认配置文件对调用请求进行权限验证。其中,该预设的默认配置文件可以为技术人员预先配置并上传至终端中的,也可以是终端预先从服务器中下载的,本发明实施例对预设的默认配置文件的获取方式不做具体限定。
为了便于理解,获取配置文件的过程可如图4所示,从服务器下载待渲染的JS文件时,会在JS文件所在的压缩包中将权限配置文件一起下载并保存在本地。如果获取失败,则获取预设的默认配置文件。
为了进一步地提高安全性,上述压缩包可以是经过加密与MD5校验的压缩包,从而防止权限配置文件与JS文件在下载过程中被篡改泄露等。针对权限配置文件被加密的情况,本发明实施例提供的方法在根据权限配置文件对调用请求进行权限验证时,先对权限配置文件进行解密,之后根据解密后的权限配置文件对调用请求进行权限验证。解密时,可采用加密时对应的解密方法。
需要说明的是,由于上述权限配置文件和预设的默认配置文件均可用于权限验证,因而该权限配置文件及默认配置文件中均可以存储有JS层可调用和/或禁止调用的原生方法的信息,该信息包括但不限于原生方法名、标识、参数等。对于存储有多个原生方法的信息的情况,还可以列表的方式进行存储。此外,还可以按照不同的JS层的上下文运行环境来存储JS层可调用和/或禁止调用的原生方法的信息。
进一步地,无论是采用上述权限配置文件对调用请求进行权限验证,还是采用上述预设的默认配置文件对调用请求进行权限验证,针对其存储的JS层可调用和/或禁止调用的原生方法的信息,对调用请求进行权限验证的方式,包括但不限于:
获取当前正在运行的JS上下文环境信息,根据JS上下文环境信息获取JS层可调用的原生方法的信息;当调用请求中携带的原生方法的信息与JS层可调用的原生方法的信息相匹配时,权限验证通过。
或者,获取当前正在运行的JS上下文环境信息,根据JS上下文环境信息获取JS层禁止调用的原生方法的信息;当调用请求中携带的原生方法的信息与JS层禁止调用的原生方法的信息相匹配时,权限验证未通过。
其中,上述JS层可调用和/或禁止调用的原生方法的信息可通过权限配置文件进行获取,在权限配置文件获取失败时,也可以通过预设的默认配置文件获取。可选地,上述相匹配可以为信息内容一致,如方法名相同。采用权限配置文件和预设的默认配置文件进行权限验证的方式原理一致,以权限配置文件为例进行如下说明。
例如,若权限配置文件中存储有JS层可调用的原生方法的信息,则进行权限验证时,获取当前正在运行的JS上下文环境信息后,根据JS上下文环境信息从权限配置文件中获取JS层可调用的原生方法的信息,将调用请求中携带的原生方法的信息与JS层可调用的原生方法的信息相比对,如果二者一致,则调用请求中携带的原生方法的信息与JS层可调用的原生方法的信息相匹配,权限验证通过。
又例如,若权限配置文件中存储有JS层禁止调用的原生方法的信息,则进行权限验证时,获取当前正在运行的JS上下文环境信息后,根据JS上下文环境信息从权限配置文件中获取JS层禁止调用的原生方法的信息,将调用请求中携带的原生方法的信息与JS层禁止调用的原生方法的信息相比对,如果二者一致,则调用请求中携带的原生方法的信息与JS层禁止调用的原生方法的信息相匹配,权限验证未通过。
再例如,若权限配置文件中存储有JS层可调用和禁止调用的原生方法的信息,则进行权限验证时,获取当前正在运行的JS上下文环境信息后,根据JS上下文环境信息从权限配置文件中获取JS层可调用的原生方法的信息,当调用请求中携带的原生方法的信息与JS层可调用的原生方法的信息相匹配时,权限验证通过。当调用请求中携带的原生方法的信息与JS层可调用的原生方法的信息不匹配时,再根据JS上下文环境信息从权限配置文件中获取JS层禁止调用的原生方法的信息,当调用请求中携带的原生方法的信息与JS层禁止调用的原生方法的信息相匹配时,权限验证未通过。当调用请求中携带的原生方法的信息与JS层可调用和禁止调用的原生方法的信息均不匹配时,可以设为权限验证未通过。当然,该种方式下,除了按照上述顺序先从权限配置文件中获取JS层可调用的原生方法的信息进行匹配,不匹配时再获取JS层禁止调用的原生方法的信息外,还可以先获取JS层禁止调用的原生方法的信息进行匹配,不匹配时再获取JS层可调用的原生方法的信息,本发明实施例对此不加以限定。
为了便于理解,以JS上下文环境信息为JS上下文环境名,原生方法的信息为原生方法名为例,该权限验证的过程可如图5所示。当JS层发起原生方法(Native模块)的调用请求时,为了防止JS文件被篡改,因而启动权限验证过程。首先,获取当前正在运行的JScontext(JS上下文环境)名,然后在已保存的权限配置文件中根据JS上下文环境名获取对应可调用的原生方法名(Native模块名),将调用请求中携带的原生方法名与可调用的原生方法名进行比对。如果调用请求中携带的原生方法名在可调用的原生方法名中,则权限验证通过,可以将其送入调度层分发请求处理。如果调用请求中携带的原生方法名不在可调用的原生方法名中,则权限验证不通过。
在一种实现方式中,当调用请求未通过权限验证时,本发明实施例提供的方法还包括发出告警的过程。其中,该告警方式包括但不限于显示告警信息等,从而提示相关技术人员进行问题排查,进一步保证安全性。
此外,在调用请求未通过权限验证时,还可以将其进行丢弃。对于权限验证通过的情况,通过后续步骤实现调用。
在步骤303中,当权限验证通过时,将调用请求转发至原生层。
在权限验证通过后,为了响应调用请求,本发明实施例提供的方法还包括将调用请求转发至原生层的过程。
为了提高调用效率,本发明实施例提供的方法在执行调用操作之前,还包括注册JS层调用原生方法的中转方法的过程。在一种实现方式中,可使用javaScriptCore的JSC_JSObjectSetProperty接口注册onJSCallMethod方法,该方法为JS层主动调用Native模块的中转方法。其中,JSC_JSObjectSetProperty接口为javaScriptCore中对象设置性质接口,用于设置新的对象,本方法实施例中用于设置新的方法。
当注册完该中转方法后,将调用请求转发至原生层时,可通过该中转方法将调用请求转发至原生层,从而避免再上报JS层,缩短了调用路径,提高调用效率。
在步骤304中,原生层根据调用请求中携带的原生方法的信息调用原生方法。
根据原生方法的信息调用原生方法对调用请求进行处理,包括:根据原生方法的信息调用原生方法下载数据;通过JS层回调函数将下载的数据传递至JS层;调用JS层对下载的数据进行处理,生成待渲染的数据;调用原生层对待渲染的数据进行渲染。
如图6所示,在应用启动时,Native层会指定运行对应JS模块,并将初始化数据传递给JS层,JS主动调用Native层的LoadData(数据加载)模块,利用Native层的网络或本地能力加载数据,并提供JS callback(JS回调)方法给Native层。Native获取数据完毕后回调JS callback方法重新回到JS层。JS层在本地对数据进行处理后,生成最终页面要渲染的UI(用户界面)view Json(JavaScript Object Notation,是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式),携带该Json数据通知Native层渲染,形成最终的页面。从图6可以看出,整体调用流程很清晰,加上权限验证保证了应用的安全性。
为了便于理解,整个原生方法的调用过程可如图7所示,基于JavaScriptCore和Gateway(网关)来实现原生方法的调用。图7中,JS模块1(JS Module1)、JS模块2(JSModule2)和JS模块3(JS Module3)分别对应一个调用请求,用于调用不同的NativeMethod(原生方法)。其中,JS模块1用于调用Native方法1、JS模块2用于调用Native方法2、JS模块3用于调用Native方法3。当调用请求由中转方法onJSCallMethod转发至Gateway后,对该调用请求进行权限验证。如果权限验证通过,则进入dispatcher(调度)层分发请求处理,如图7所示,JS模块1和JS模块2的调用请求通过权限验证,因而可以调用Native方法1和Native方法2。而JS模块3的调用请求未通过权限验证,因而未能调用Native方法3。
本发明实施例提供的方法,当获取到JS层对原生方法的调用请求后,通过对该调用请求进行权限验证,从而保证了安全性;在通过权限验证后,通过将调用请求转发至原生层进行处理,避免了再去通知JS层,缩短了调用路径,进而提高了调用效率。
基于与上述方法同样的构思,参见图8,本发明实施例提供了一种原生方法的调用装置,用于执行上述原生方法的调用方法,该装置包括:
获取模块801,用于获取JS层对原生方法的调用请求,调用请求携带原生方法的信息;
验证模块802,用于对调用请求进行权限验证;
转发模块803,用于当权限验证通过时,将调用请求转发至原生层;
调用模块804,用于原生层根据调用请求中携带的原生方法的信息调用原生方法。
在一种实现方式中,验证模块802,用于获取权限配置文件,权限配置文件中存储有JS层可调用和/或禁止调用的原生方法的信息;根据权限配置文件对调用请求进行权限验证。
在一种实现方式中,验证模块802,用于当权限配置文件被加密时,对权限配置文件进行解密,根据解密后的权限配置文件对调用请求进行权限验证。
在一种实现方式中,验证模块802,还用于当获取权限配置文件失败时,获取预设的默认配置文件,预设的默认配置文件中存储有JS层可调用和/或禁止调用的原生方法的信息;根据预设的默认配置文件对调用请求进行权限验证。
在一种实现方式中,验证模块802,用于获取当前正在运行的JS上下文环境信息,根据JS上下文环境信息获取JS层可调用的原生方法的信息;当调用请求中携带的原生方法的信息与JS层可调用的原生方法的信息相匹配时,权限验证通过。
在一种实现方式中,验证模块802,用于获取当前正在运行的JS上下文环境信息,根据JS上下文环境信息获取JS层禁止调用的原生方法的信息;当调用请求中携带的原生方法的信息与JS层禁止调用的原生方法的信息相匹配时,权限验证未通过。
在一种实现方式中,参见图9,该装置还包括:
注册模块805,用于注册JS层调用原生方法的中转方法;
转发模块803,用于通过中转方法将调用请求转发至原生层。
在一种实现方式中,调用模块804,用于根据原生方法的信息调用原生方法下载数据;通过JS层回调函数将下载的数据传递至JS层;调用JS层对下载的数据进行处理,生成待渲染的数据;调用原生层对待渲染的数据进行渲染。
在一种实现方式中,参见图10,该装置还包括:
告警模块806,用于当调用请求未通过权限验证时,发出告警。
在一种实现方式中,获取模块801,用于当从服务器下载待渲染的JS文件时,从服务器下载权限配置文件。
本发明实施例提供的装置,当获取到JS层对原生方法的调用请求后,通过对该调用请求进行权限验证,从而保证了安全性;在通过权限验证后,通过将调用请求转发至原生层进行处理,避免了再去通知JS层,缩短了调用路径,进而提高了调用效率。
需要说明的是,上述实施例提供的装置在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图11示出了本发明一个示例性实施例提供的终端1000的结构框图。该终端1000可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端1000还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端1000包括有:处理器1001和存储器1002。
处理器1001可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1001可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1001也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1001可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1001还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1002可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1002还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1002中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1001所执行以实现本申请中方法实施例提供的原生方法的调用方法。
在一些实施例中,终端1000还可选包括有:外围设备接口1003和至少一个外围设备。处理器1001、存储器1002和外围设备接口1003之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1003相连。具体地,外围设备包括:射频电路1004、触摸显示屏1005、摄像头1006、音频电路1007和电源1009中的至少一种。
外围设备接口1003可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器1001和存储器1002。在一些实施例中,处理器1001、存储器1002和外围设备接口1003被集成在同一芯片或电路板上;在一些其他实施例中,处理器1001、存储器1002和外围设备接口1003中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路1004用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1004通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1004将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1004包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1004可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1004还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1005用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1005是触摸显示屏时,显示屏1005还具有采集在显示屏1005的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1001进行处理。此时,显示屏1005还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1005可以为一个,设置终端1000的前面板;在另一些实施例中,显示屏1005可以为至少两个,分别设置在终端1000的不同表面或呈折叠设计;在再一些实施例中,显示屏1005可以是柔性显示屏,设置在终端1000的弯曲表面上或折叠面上。甚至,显示屏1005还可以设置成非矩形的不规则图形,也即异形屏。显示屏1005可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1006用于采集图像或视频。可选地,摄像头组件1006包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1006还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1007可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1001进行处理,或者输入至射频电路1004以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1000的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1001或射频电路1004的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1007还可以包括耳机插孔。
电源1009用于为终端1000中的各个组件进行供电。电源1009可以是交流电、直流电、一次性电池或可充电电池。当电源1009包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端1000还包括有一个或多个传感器1010。该一个或多个传感器1010包括但不限于:加速度传感器1011、陀螺仪传感器1012、压力传感器1013、光学传感器1015以及接近传感器1016。
加速度传感器1010可以检测以终端1000建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1011可以用于检测重力加速度在三个坐标轴上的分量。处理器1001可以根据加速度传感器1011采集的重力加速度信号,控制触摸显示屏1005以横向视图或纵向视图进行用户界面的显示。加速度传感器1011还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1012可以检测终端1000的机体方向及转动角度,陀螺仪传感器1012可以与加速度传感器1011协同采集用户对终端1000的3D动作。处理器1001根据陀螺仪传感器1012采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1013可以设置在终端1000的侧边框和/或触摸显示屏1005的下层。当压力传感器1013设置在终端1000的侧边框时,可以检测用户对终端1000的握持信号,由处理器1001根据压力传感器1013采集的握持信号进行左右手识别或快捷操作。当压力传感器1013设置在触摸显示屏1005的下层时,由处理器1001根据用户对触摸显示屏1005的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
光学传感器1015用于采集环境光强度。在一个实施例中,处理器1001可以根据光学传感器1015采集的环境光强度,控制触摸显示屏1005的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏1005的显示亮度;当环境光强度较低时,调低触摸显示屏1005的显示亮度。在另一个实施例中,处理器1001还可以根据光学传感器1015采集的环境光强度,动态调整摄像头组件1006的拍摄参数。
接近传感器1016,也称距离传感器,通常设置在终端1000的前面板。接近传感器1016用于采集用户与终端1000的正面之间的距离。在一个实施例中,当接近传感器1016检测到用户与终端1000的正面之间的距离逐渐变小时,由处理器1001控制触摸显示屏1005从亮屏状态切换为息屏状态;当接近传感器1016检测到用户与终端1000的正面之间的距离逐渐变大时,由处理器1001控制触摸显示屏1005从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图11中示出的结构并不构成对终端1000的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例中实施例中,还提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集。所述至少一条指令、至少一段程序、代码集或指令集经配置以由一个或者一个以上处理器执行,以实现上述原生方法的调用方法。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被计算机设备的处理器执行时实现上述原生方法的调用方法。
可选地,上述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上所述仅为本发明的示例性实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种原生方法的调用方法,其特征在于,所述方法包括:
使用JavaScriptCore的JSC_JSObjectSetProperty接口注册JS层调用原生方法的中转方法,所述中转方法为onJSCallMethod方法;
获取JS层对原生方法的调用请求,所述调用请求携带所述原生方法的信息;
通过所述中转方法将所述调用请求转发至网关后,获取当前正在运行的JS上下文环境信息,根据所述JS上下文环境信息获取所述JS层可调用的原生方法的信息,所述JS层可调用的原生方法的信息包括原生方法名、标识和参数,所述JS层可调用的原生方法的信息按照不同的JS层的上下文运行环境存储于列表中;
当所述调用请求中携带的原生方法的信息与所述JS层可调用的原生方法的信息一致时,对所述调用请求的权限验证通过;
当所述调用请求中携带的原生方法的信息与所述JS层可调用的原生方法的信息不一致时,根据所述JS上下文环境信息获取所述JS层禁止调用的原生方法的信息,所述JS层禁止调用的原生方法的信息包括原生方法名、标识和参数,所述JS层禁止调用的原生方法的信息按照不同的JS层的上下文运行环境存储于列表中;
当所述调用请求中携带的原生方法的信息与所述JS层禁止调用的原生方法的信息一致时,对所述调用请求的权限验证未通过;
当所述调用请求中携带的原生方法的信息与所述JS层禁止调用的原生方法的信息不一致时,设为对所述调用请求的权限验证未通过;
当对所述调用请求的权限验证通过时,通过所述中转方法将所述调用请求转发至原生层,所述原生层根据所述调用请求中携带的原生方法的信息调用所述原生方法下载数据,通过JS层回调函数将下载的数据传递至所述JS层,调用所述JS层对所述下载的数据进行处理,生成待渲染的数据,调用所述原生层对所述待渲染的数据进行渲染,其中,所述JS层回调函数由所述JS层调用所述原生层的数据加载模块并通过所述原生层的网络或者本地能力加载初始化数据后向所述原生层提供,所述初始化数据由所述原生层向所述JS层传递。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:获取权限配置文件,所述权限配置文件中存储有所述JS层可调用的原生方法的信息和所述JS层禁止调用的原生方法的信息;
所述根据所述JS上下文环境信息获取所述JS层可调用的原生方法的信息,包括:根据所述JS上下文环境信息从所述权限配置文件中获取所述JS层可调用的原生方法的信息;
所述根据所述JS上下文环境信息获取所述JS层禁止调用的原生方法的信息,包括:根据所述JS上下文环境信息从所述权限配置文件中获取所述JS层禁止调用的原生方法的信息。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:当所述权限配置文件被加密时,对所述权限配置文件进行解密;
所述根据所述JS上下文环境信息从所述权限配置文件中获取所述JS层可调用的原生方法的信息,包括:所述根据所述JS上下文环境信息从解密后的权限配置文件中获取所述JS层可调用的原生方法的信息;
所述根据所述JS上下文环境信息从所述权限配置文件中获取所述JS层禁止调用的原生方法的信息,包括:根据所述JS上下文环境信息从所述解密后的权限配置文件中获取所述JS层禁止调用的原生方法的信息。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当获取权限配置文件失败时,获取预设的默认配置文件,所述预设的默认配置文件中存储有所述JS层可调用的原生方法的信息和所述JS层禁止调用的原生方法的信息;
根据所述预设的默认配置文件对所述调用请求进行权限验证。
5.根据权利要求1-4中任一所述的方法,其特征在于,所述方法还包括:
当所述调用请求未通过权限验证时,发出告警。
6.根据权利要求2-4中任一所述的方法,其特征在于,所述获取权限配置文件,包括:
当从服务器下载待渲染的JS文件时,从所述服务器下载所述权限配置文件。
7.一种原生方法的调用装置,其特征在于,所述装置包括:
注册模块,用于使用JavaScriptCore的JSC_JSObjectSetProperty接口注册JS层调用原生方法的中转方法,所述中转方法为onJSCallMethod方法;
获取模块,用于获取JS层对原生方法的调用请求,所述调用请求携带所述原生方法的信息;
验证模块,用于通过所述中转方法将所述调用请求转发至网关后,获取当前正在运行的JS上下文环境信息,根据所述JS上下文环境信息获取所述JS层可调用的原生方法的信息,所述JS层可调用的原生方法的信息包括原生方法名、标识和参数,所述JS层可调用的原生方法的信息按照不同的JS层的上下文运行环境存储于列表中;当所述调用请求中携带的原生方法的信息与所述JS层可调用的原生方法的信息一致时,对所述调用请求的权限验证通过;当所述调用请求中携带的原生方法的信息与所述JS层可调用的原生方法的信息不一致时,根据所述JS上下文环境信息获取所述JS层禁止调用的原生方法的信息,所述JS层禁止调用的原生方法的信息包括原生方法名、标识和参数,所述JS层禁止调用的原生方法的信息按照不同的JS层的上下文运行环境存储于列表中;当所述调用请求中携带的原生方法的信息与所述JS层禁止调用的原生方法的信息一致时,对所述调用请求的权限验证未通过;当所述调用请求中携带的原生方法的信息与所述JS层禁止调用的原生方法的信息不一致时,设为对所述调用请求的权限验证未通过;
转发模块,用于当对所述调用请求的权限验证通过时,通过所述中转方法将所述调用请求转发至原生层;
调用模块,用于所述原生层根据所述调用请求中携带的原生方法的信息调用所述原生方法下载数据,通过JS层回调函数将下载的数据传递至所述JS层,调用所述JS层对所述下载的数据进行处理,生成待渲染的数据,调用所述原生层对所述待渲染的数据进行渲染,其中,所述JS层回调函数由所述JS层调用所述原生层的数据加载模块并通过所述原生层的网络或者本地能力加载初始化数据后向所述原生层提供,所述初始化数据由所述原生层向所述JS层传递。
8.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一段程序,所述至少一段程序在被所述处理器执行时实现如权利要求1至6任一项所述的原生方法的调用方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一段程序,所述至少一段程序在被执行时实现如权利要求1至6任一项所述的原生方法的调用方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810264438.9A CN110321228B (zh) | 2018-03-28 | 2018-03-28 | 原生方法的调用方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810264438.9A CN110321228B (zh) | 2018-03-28 | 2018-03-28 | 原生方法的调用方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110321228A CN110321228A (zh) | 2019-10-11 |
CN110321228B true CN110321228B (zh) | 2023-09-22 |
Family
ID=68109986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810264438.9A Active CN110321228B (zh) | 2018-03-28 | 2018-03-28 | 原生方法的调用方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110321228B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502708B (zh) * | 2019-08-27 | 2020-10-30 | 北京达佳互联信息技术有限公司 | 基于JSBridge进行通信的方法、装置及存储介质 |
CN111258683A (zh) * | 2020-01-19 | 2020-06-09 | 北京三快在线科技有限公司 | 检测方法、装置、计算机设备及存储介质 |
CN111857667A (zh) * | 2020-07-23 | 2020-10-30 | 平安普惠企业管理有限公司 | 基于Hybird框架的输入方法及相关设备 |
CN113204722B (zh) * | 2021-03-30 | 2022-11-22 | 北京达佳互联信息技术有限公司 | 页面展示方法、装置、电子设备及存储介质 |
CN113626787B (zh) * | 2021-08-27 | 2024-01-30 | 京东方科技集团股份有限公司 | 设备指纹生成方法及相关设备 |
CN114003412A (zh) * | 2021-12-27 | 2022-02-01 | 支付宝(杭州)信息技术有限公司 | 小程序和宿主程序进行通信的方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102537A (zh) * | 2013-04-07 | 2014-10-15 | 华为技术有限公司 | 一种应用调用方法及用户终端 |
CN105718313A (zh) * | 2016-01-22 | 2016-06-29 | 北京京东尚科信息技术有限公司 | 应用操作方法和装置 |
CN106850545A (zh) * | 2016-12-15 | 2017-06-13 | 华中科技大学 | 一种安卓混合应用的细粒度访问控制方法 |
CN106951233A (zh) * | 2017-03-02 | 2017-07-14 | 广州天高软件科技有限公司 | 混合模式智能手机应用开发框架 |
CN107169320A (zh) * | 2017-04-20 | 2017-09-15 | 北京小米移动软件有限公司 | 校验方法及装置 |
-
2018
- 2018-03-28 CN CN201810264438.9A patent/CN110321228B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102537A (zh) * | 2013-04-07 | 2014-10-15 | 华为技术有限公司 | 一种应用调用方法及用户终端 |
CN105718313A (zh) * | 2016-01-22 | 2016-06-29 | 北京京东尚科信息技术有限公司 | 应用操作方法和装置 |
CN106850545A (zh) * | 2016-12-15 | 2017-06-13 | 华中科技大学 | 一种安卓混合应用的细粒度访问控制方法 |
CN106951233A (zh) * | 2017-03-02 | 2017-07-14 | 广州天高软件科技有限公司 | 混合模式智能手机应用开发框架 |
CN107169320A (zh) * | 2017-04-20 | 2017-09-15 | 北京小米移动软件有限公司 | 校验方法及装置 |
Non-Patent Citations (1)
Title |
---|
Javascript与Objectiv-C通信方法;兄弟联盟工作室;《CSDN博客:https://blog.csdn.net/RANKAIHUA/article/details/21010571》;20140311;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110321228A (zh) | 2019-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110321228B (zh) | 原生方法的调用方法、装置、设备及计算机可读存储介质 | |
CN110837473B (zh) | 应用程序调试方法、装置、终端及存储介质 | |
CN111092809B (zh) | 实时推送信息的方法、装置、计算机设备及存储介质 | |
CN108717365B (zh) | 在应用程序中执行功能的方法和装置 | |
CN111523136B (zh) | 应用程序的权限管理方法、装置、设备及存储介质 | |
CN110032384B (zh) | 资源更新的方法、装置、设备及存储介质 | |
CN112749362B (zh) | 控件创建方法、装置、设备及存储介质 | |
CN111159604A (zh) | 图片资源加载方法及装置 | |
CN110912830B (zh) | 传输数据的方法和装置 | |
CN113190362B (zh) | 服务调用方法、装置、计算机设备及存储介质 | |
CN112612539B (zh) | 数据模型卸载方法、装置、电子设备及存储介质 | |
CN109413190B (zh) | 文件获取方法、装置、电子设备及存储介质 | |
CN108837509B (zh) | 配置虚拟场景的设置参数的方法、计算机设备及存储介质 | |
CN111258683A (zh) | 检测方法、装置、计算机设备及存储介质 | |
CN113377647B (zh) | 页面处理方法、装置、服务器、终端及可读存储介质 | |
CN113051015B (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN112528311B (zh) | 数据管理方法、装置及终端 | |
CN114386066A (zh) | 应用加固方法及装置 | |
CN112163677B (zh) | 应用机器学习模型的方法、装置及设备 | |
CN110971692B (zh) | 开通服务的方法、装置及计算机存储介质 | |
CN111741040B (zh) | 连接建立方法、地址获取方法、装置、设备及存储介质 | |
CN110362330B (zh) | 应用程序更新方法、装置、终端及存储介质 | |
CN111148181A (zh) | 使用5g通信网络的方法、装置、电子设备及介质 | |
CN111414563B (zh) | 网页交互的方法、装置、计算机设备和存储介质 | |
CN111586891B (zh) | 网络连接的方法、装置、电子设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |