CN111338633A - 免安装文件生成方法、装置及电子设备 - Google Patents
免安装文件生成方法、装置及电子设备 Download PDFInfo
- Publication number
- CN111338633A CN111338633A CN202010085302.9A CN202010085302A CN111338633A CN 111338633 A CN111338633 A CN 111338633A CN 202010085302 A CN202010085302 A CN 202010085302A CN 111338633 A CN111338633 A CN 111338633A
- Authority
- CN
- China
- Prior art keywords
- code
- installation
- platform
- application
- target
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44584—Portable applications, i.e. making applications self-contained, e.g. U3 standard
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种免安装文件生成方法、装置及电子设备,涉及互联网技术领域。其中,该方法包括:获取目标应用的业务逻辑源码,将业务逻辑源码转换为目标代码,目标代码包括二进制业务逻辑代码,二进制业务逻辑代码包括第一调用指令,该第一调用指令用于调用第一平台的第一功能接口;设置封装有第二调用指令的第一功能接口,第二调用指令用于调用第二平台的第二功能接口;根据目标代码和封装有第二调用指令的第一功能接口,生成目标应用的免安装文件,以用于在第二平台中免安装启动目标应用。如此,可以提高免安装启动的目标应用的运行效率。
Description
技术领域
本申请涉及互联网技术领域,更具体地,涉及一种免安装文件生成方法、装置及电子设备。
背景技术
现有的应用(Application,APP)通常需要用户从应用商店下载安装包,并安装至电子设备中,才能实现应用程序的运行。为了节约下载安装包的时长及安装包在电子设备中占据的内存空间,免安装应用应运而生。免安装应用是指无需下载和安装即可直接运行的应用程序。
目前,通常是根据应用的源码生成适用于特定平台(如,页面浏览平台)的的免安装文件,从而可以在无需将应用的安装包下载并安装至电子设备的情况下,在该特定平台基于免安装文件实现应用的运行。但是,采用现有方式生成的免安装文件运行效率不高,容易出现卡顿。
发明内容
有鉴于此,本申请提出了一种免安装文件生成方法、装置及电子设备,以改善上述问题。
第一方面,本申请实施例提供了一种免安装文件生成方法,包括:获取目标应用的业务逻辑源码;将所述业务逻辑源码转换为目标代码,目标代码包括二进制业务逻辑代码,二进制业务逻辑代码包括第一调用指令,第一调用指令用于调用第一平台的第一功能接口;设置封装有第二调用指令的第一功能接口,以供第一调用指令调用,第二调用指令用于调用第二平台的第二功能接口;根据目标代码和封装有第二调用指令的第一功能接口,生成目标应用的免安装文件,以用于在第二平台中免安装启动目标应用。
第二方面,本申请实施例提供了一种免安装文件生成装置,包括:获取模块、转换模块、设置模块和生成模块。其中,获取模块用于获取目标应用的业务逻辑源码。转换模块用于将业务逻辑源码转换为目标代码,目标代码包括二进制业务逻辑代码,二进制业务逻辑代码包括第一调用指令,第一调用指令用于调用第一平台的第一功能接口。设置模块用于设置封装有第二调用指令的第一功能接口,以供所述第一调用指令调用,第二调用指令用于调用第二平台的第二功能接口。生成模块用于根据目标代码和封装有第二调用指令的第一功能接口,生成目标应用的免安装文件,以用于在第二平台中免安装启动所述目标应用。
第三方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储器;一个或多个程序。其中,一个或多个程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于执行上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其中存储有程序代码,该程序代码可被处理器调用执行上述的方法。
相对于现有技术,本申请提供的方案,可以将目标应用的业务逻辑源码转换为可在第二平台中免安装启动的免安装文件,且该免安装文件中的业务逻辑代码为二进制代码,具有较高的运行效率,可以避免出现卡顿等问题。
进一步地,对于一些视频类的应用,如游戏应用,提高运行效率则可以提高画面刷新的速率,从而可以缓解画面失真、掉帧等问题。
本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了一种适用于本申请实施例的应用环境示意图。
图2示出了根据本申请一个实施例的免安装文件生成方法的流程图。
图3示出了根据本申请另一个实施例的免安装文件生成方法流程图。
图4示出了图3所示实施例的免安装文件生成方法的另一流程图。
图5示出了图4所示步骤S440的子步骤示意图。
图6示出了图5所示步骤S443的子步骤示意图。
图7示出了本申请又一个实施例的免安装文件生成方法流程图。
图8示出了本申请实施例提供的一种免安装文件生成装置的框图。
图9是本申请实施例的用于执行根据本申请实施例的免安装文件生成方法的电子设备的框图。
图10是本申请实施例的用于保存或者携带实现根据本申请实施例的免安装文件生成方法的程序代码的存储单元。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
现有的免安装文件大多是基于页面浏览平台的文件,页面浏览平台例如可以是浏览器或某些应用的WebView(网络视图)控件等。在此情况下,免安装文件中用于实现业务逻辑的代码通常为适用于页面浏览平台的解释执行的语言,如JavaScript。这种语言的代码的运行方式是:对读取的语句进行词法解析、语法解析以生成语法树,然后基于该语法树执行该语句。这种代码的运行效率较低,容易出现卡顿等问题。
进一步地,对于某些视频类应用(如,视频播放应用、游戏应用等),代码运行效率低可能导致视频画面刷新的速率低,从而导致出现掉帧、画面失真等问题。
发明人经过长期的研究,提出了一种免安装文件生成方法、装置及电子设备,可以提高生成的免安装文件所启动的应用的运行效率。下面对该内容进行阐述。
请参照图1,图1为一种适用于本申请实施例的免安装文件生成方法的应用环境示意图。其中,电子设备100、服务器200和移动终端300可以通过网络通信连接。
移动终端300安装有客户端310,服务器200运行有与客户端310对应的免安装平台210。其中,免安装平台210是运行于服务器200中的服务端程序,客户端310是与免安装平台210对应的客户端程序,可以通过帐户信息等录至该免安装平台210,从而访问免安装平台210上的免安装应用。免安装平台210则可以根据用户在客户端310上针对某一免安装应用的访问操作,基于该免安装应用的免安装文件启动并运行该免安装应用。
其中,电子设备100可以是个人计算机(Personnal Computer,PC)、服务器、笔记本电脑等具有数据处理功能的设备。一些例子中,电子设备100和服务器200可以是同一个设备,在此情况下,电子设备100可以基于下文描述的免安装文件生成方法生成某一应用的免安装文件,并配置于本设备中,以供移动终端300中的客户端310访问。
另一些例子中,电子设备100和服务器200可以是同一集群中的设备;再一些例子中,电子设备100可以是与服务器200不同的设备,但可以与服务器200通信。在此情况下,电子设备100可以基于下文的免安装文件生成方法生成某一应用的免安装文件,并配置于服务器200中,以供移动终端300中的客户端310访问。
请参照图2,图2为本申请一实施例提供的一种免安装文件生成方法,该方法应用于图1所示的电子设备100。下面对该方法包括的步骤进行阐述。
步骤S110,获取目标应用的业务逻辑源码。
其中,用户可以上传任一应用的业务逻辑源码至电子设备100,并触发针对该应用的免安装文件生成操作。如此,该应用可以视为所述目标应用。
每个应用通常是由开发人员在开发环境下通过编程语言编写得到的,则开发人员采用编程语言编写的代码即为应用的源代码。所述编程语言例如可以为Java语言、C语言、C++语言、C#语言等。
一些实施方式中,应用的源代码需要被打包成安装包(apk文件),则移动终端300等设备可以安装该安装包得到相应的应用。另一些实施方式中,应用的源代码需要被打包成免安装包(rpk文件),从而可以在特定平台中直接基于免安装包启动并运行相应的应用。
目标应用的源代码中,通常包括用于实现目标应用的业务逻辑的代码以及其他代码。其中,所述用于实现目标应用的业务逻辑的代码即为业务逻辑源码。所述其他代码例如可以是资源文件、目标应用的入口文件等。本实施例对此没有限制。
步骤S120,将业务逻辑源码转换为目标代码,所述目标代码包括二进制业务逻辑代码,所述二进制业务逻辑代码包括第一调用指令,所述第一调用指令用于调用第一平台的第一功能接口。
本实施例中,可以利用转换工具对目标应用的业务逻辑源码进行转换处理,以将业务逻辑源码转换为适用于特定平台的二进制格式的代码。该转换工具输出的二进制格式的代码可以包括:二进制业务逻辑代码、二进制业务逻辑代码所需的运行环境信息等。其中,二进制业务逻辑代码是指用于实现目标应用的业务逻辑的二进制格式的代码。特定平台即为上述的第一平台,随使用的转换工具的变化而变化。
目标应用在运行过程中通常涉及到文件操作、网络操作、音频信息操作、图像信息操作等。对应地,在上述转换得到的二进制业务逻辑代码中,存在用于实现这些操作的指令。由于步骤S120中转换得到的二进制业务逻辑代码是适用于特定平台(第一平台)的,因而,二进制业务逻辑代码中用于实现前述操作的指令,通常为针对第一平台中实现前述操作的接口的调用指令。
为便于描述,本申请实施例中,将第一平台中用于实现前述的文件操作、网络操作、音频信息操作、图像信息操作等操作的接口描述为第一功能接口。将用于调用第一功能接口的指令描述为第一调用指令。
可以理解,本实施例中,上述关于第一功能接口实现的操作的描述仅为举例,还可以包括用于实现其他操作的第一功能接口,例如登录操作、自定义的广告展示操作、支付操作等,本实施例对此没有限制。
步骤S130,设置封装有第二调用指令的第一功能接口,所述第二调用指令用于调用第二平台的第二功能接口。
一些例子中,若上述第一平台为终端应用平台,比如安卓(Android)应用平台、iOS应用平台等,则转换后的二进制业务代码包含的第一调用指令,调用的是该终端应用平台提供的第一功能接口,因此需要将转换后的二进制业务逻辑代码仍需要被打包进安装包中,再将安装包安装于具有相应操作系统的移动终端300中,从而可以在移动终端300中运行目标应用。其中,如果终端应用平台是安卓应用平台,相应操作系统即为安卓操作系统。如果终端应用平台是iOS应用平台,相应操作系统即为iOS操作系统。
因此,上述例子中,基于转换后的二进制业务逻辑代码还无法实现免安装启动并运行目标应用。
另一些例子中,若上述第一平台为页面浏览平台或是类似的第三方平台,则无法基于转换后的二进制业务逻辑代码在第一平台中免安装启动目标应用,而需要在其他免安装平台(在此描述为第二平台)上基于二进制业务逻辑代码免安装启动目标应用。但是,转换后的二进制业务逻辑代码中包含的第一调用指令让人调用的是第一平台提供的第一功能接口,而第二平台并未提供第一功能接口,从而可能导致目标应用运行出错。
为了使得适用于第一平台的二进制业务逻辑代码可以适用于第二平台,以在第二平台免安装启动目标应用,本实施例中,电子设备100可以设置供第一调用指令调用的第一功能接口,设置的第一功能接口中封装有第二调用指令。换言之,本实施例中设置的第一功能接口与第一平台实际提供的第一功能接口是不同的。
其中,第二调用指令是用于调用第二平台的第二功能接口的指令,第二功能接口是第二平台提供的用于实现前述操作的接口。
如此,当二进制业务逻辑代码中的第一调用指令被执行时,会调用步骤S130中设置的第一功能接口,从而执行设置的第一功能接口中的第二调用指令,即调用第二平台的第二功能接口。
步骤S140,根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件,所述免安装文件用于在所述第二平台中免安装启动所述目标应用。
本实施例中,电子设备100可以将目标代码及封装有第二调用指令的各第一功能接口(即,上述设置的各第一功能接口)的代码一并打包为后缀为rpk格式的文件。该后缀为rpk的文件可以为所述免安装文件。
进一步地,电子设备100还可以将目标应用的源代码中的资源文件转换为二进制格式代码后,将得到的二进制格式代码一并打包进免安装文件中。本实施例对此没有限制。
由于免安装文件中的代码为二进制代码,因而可以直接在第二平台上运行免安装文件,从而启动并运行目标应用。并且,由于二进制代码在运行过程中无需动态解析,相较于解释执行的代码,提高了代码运行效率,避免了卡顿。
进一步地,对于目标应用是视频类应用的情况,代码运行效率的提高使得画面刷新速率得到了提高,从而改善了因画面刷新速率低导致的画面失真、掉帧等问题。
请参阅图3,本申请另一实施例提供了一种免安装文件生成方法,可应用于图1所示的电子设备100,下面对该方法包括的步骤进行阐述。
步骤S210,获取目标应用的业务逻辑源码。
本实施例中,步骤S210的详细实现过程与前一实施例中的步骤S110类似,在此不再赘述。
步骤S220,将所述业务逻辑源码转换为目标代码,所述目标代码包括二进制业务逻辑代码和胶水代码,所述二进制业务逻辑代码包括第一调用指令,所述第一调用指令用于调用第一平台的第一功能接口,所述胶水代码用于加载二进制业务逻辑代码。
本实施例中,步骤S220与前一实施例中的步骤S120类似,转换后的目标代码中的二进制业务逻辑代码也与前一实施例类似,在此不再赘述。
详细地,本实施例中,目标代码还可以包括胶水代码,胶水代码又可以称为“粘合代码”,其用于粘合不可能兼容的两种代码。胶水代码是由转换工具根据业务逻辑源码所使用的编程语言、转换后的目标代码的语言自动生成,其中可以包括上述的运行环境信息,此外还可以包括针对二进制业务逻辑代码的加载指令等。
步骤S230,设置中间层,在所述中间层中设置封装有第二调用指令的第一功能接口,所述第二调用指令用于调用第二平台的第二功能接口。
其中,步骤S230的详细实现过程与前一实施例的步骤S130类似。区别在于,各第一功能接口被设置于中间层中,中间层可以视作一个包括多个第一功能接口的集合或类,其中的每个第一功能接口包含有第二调用指令。
步骤S240,获取所述封装有第二调用指令的第一功能接口的代码地址,将所述第一调用指令中的所述名称与所述代码地址关联。
在设置封装有第二调用指令的第一功能接口之后,可以建立设置的第一功能接口与第一调用指令的关联,以使第一调用指令被执行时,设置的第一功能接口可以被调用。
第一调用指令通常包括需要调用的第一功能接口的名称,实际应用中,运行免安装文件的设备或平台通常是基于该名称来查找相应的代码地址,从而执行该代码地址处的代码。基于此,本实施例中,可以在设置封装有第二调用指令的第一功能接口之后,将设置的第一功能接口的代码地址与调用该第一功能接口的第一调用指令中的接口名称(即,第一功能接口的名称)关联。
可选地,本实施例中,可以根据二进制业务逻辑代码包含的第一调用指令来确定需要设置的第一功能接口。
详细地,电子设备100可以遍历二进制业务逻辑代码,识别出其中的每条第一调用指令,对于识别出的每条第一调用指令t-1i(i为正整数),确定第一调用指令t-1i调用的第一功能接口API-1i,并查找中间层中是否已经设置有该第一功能接口API-1i。如果否,则确定该第一功能接口API-1i实现的操作,作为目标操作。从第二平台提供的第二功能接口中确定实现该目标操作的第二功能接口API-2i,作为目标第二功能接口。生成调用所述目标第二功能接口的调用指令t-2i,作为第二调用指令。将生成的第二调用指令t-2i封装为一第一功能接口,并将封装有指令t-2i的第一功能接口设置于中间层中。
如此,可以确保二进制业务逻辑代码需要执行的操作,均能够通过调用第二平台的相应第二功能接口实现。
步骤S250,根据所述目标代码和所述中间层中设置的第一功能接口,生成所述目标应用的免安装文件,所述免安装文件用于在所述第二平台中免安装启动所述目标应用。
步骤S250的详细实现流程与前一实施例中的步骤S140类似,在此不再赘述。
步骤S260,在所述免安装文件的入口文件中设置加载指令,用于依次加载所述中间层和所述胶水代码。
实际应用中,当在第二平台中基于免安装文件免安装启动目标应用时,入口文件首先将被第二平台读取和执行,则第二平台可以根据入口文件首先加载中间层,然后再加载胶水代码,从而根据胶水代码加载二进制业务逻辑代码。由于二进制业务逻辑代码被加载执行时,设置有第一功能接口的中间层已经被加载,则第二平台在执行二进制业务逻辑代码的第一调用指令时,可以从中间层调用设置的第一功能接口,从而执行设置的第一功能接口中的第二调用指令,根据该第二调用指令对第二平台中的相应第二功能接口进行调用。
通过图3所示流程,基于生成的免安装文件启动的目标应用具有较高的运行效率,可以避免卡顿。特别地,对于视频类应用,可以提高画面刷新速率,改善因画面刷新速率低导致的画面失真、掉帧等问题。
本实施例中,生成的免安装文件可以保存在运行第二平台的服务器上。以图1所示的免安装平台210是第二平台为例,目标应用的免安装文件可以被保存在服务器200上。如此,移动终端300的客户端310可以访问第二平台,并请求启动目标应用。
可选地,在执行步骤S250之后,本实施例提供的免安装文件生成方法还可以包括图4所示的步骤。下面以电子设备100和服务器200是同一设备为例,进行描述。
步骤S410,将所述目标应用的应用标识与所述目标应用的免安装文件关联。
本实施例中,第二平台可以支持多种应用的免安装应用的运行,在此情况下,为了区分多种应用,可以在生成一种应用的免安装文件之后,建立该应用的应用标识与该应用的免安装文件之间的关联关系。
其中,应用标识例如可以包括应用名称和应用版本信息,又如可以是第二平台为应用分配的标识符信息,本实施例对此没有限制。所述关联关系例如可以是包括应用标识和免安装文件的文件标识(如,文件名称)的数据记录。
步骤S420,接收应用启动请求,所述应用启动请求包括所述目标应用的应用标识。
实施过程中,客户端310可以根据用户输入的帐户信息等录至免安装平台210。免安装平台210可以向客户端310发送可供免安装启动和运行的应用的图标,客户端310展示接收的图标,并在检测到用户针对某一应用(例如,目标应用)的图标的选取操作时,向服务器200中的免安装平台210发送包括目标应用的应用标识的应用启动请求。
步骤S430,根据所述应用启动请求中的应用标识,查找与所述应用标识关联的所述免安装文件。
由于服务器200存储有免安装平台210支持的免安装应用的应用标识与免安装文件的关联关系,因此,可以以应用启动请求中携带的目标应用的应用标识为索引,查找包含该应用标识的关联关系,并获取查找到的关联关系中的文件标识,将具有该文件标识的免安装文件确定为目标应用的免安装文件,即应用启动请求中的应用标识对应的免安装文件。
步骤S440,在所述第二平台中运行所述免安装运行文件。
在查找到应用启动请求中的应用标识对应的免安装文件之后,可以直接运行该免安装文件,从而可以在服务器200的免安装平台210中免安装运行该应用标识所指示的应用,并将相应的应用界面发送给客户端310,以展示给用户。
可选地,本实施例中,基于图3所示的生成免安装文件的过程,步骤S310可以通过图5所示流程实现。值得说明的是,图5所示流程示出的是电子设备100与服务器200是同一设备的情况,如果两者为不同设备,则下述流程由服务器200执行。下面以第二平台是图1所示的免安装平台210为例,对图5所示步骤进行详细阐述。
步骤S441,依次加载中间层和胶水代码。
实施过程中,服务器200中的免安装平台210首先读取免安装文件中的入口文件,则可以从入口文件中读取到加载指令,执行该加载指令,从而可以基于该加载指令依次加载中间层和胶水代码。其中,中间层包括封装有第二调用指令的第一功能接口,加载中间层即为加载所述封装有第二调用指令的第一功能接口。加载胶水代码,则可以实现对二进制业务逻辑代码及目标应用的其他代码的加载。其中,其他代码例如可以包括上述的资源文件,此外,还可以包括用于实现界面显示的一些JavaScript代码等,本实施例对此没有限制。
步骤S442,调用第二平台的编译接口,对中间层的代码以及二进制业务逻辑代码进行编译,得到编译后的可执行文件。
实施过程中,免安装平台210可以将加载的中间层的代码,即其中包括的各第一功能接口封装为一个对象,并将加载的二进制业务逻辑代码以及所述对象作为输入参数,传递给第二平台的编译接口,并调用该编译接口,得到的返回结果即为编译后的所述可执行文件。其中,第二平台的编译接口中封装有进行代码编译所需的指令。
步骤S443,在所述第二平台中运行所述可执行文件,以在所述第二平台中启动所述目标应用。
在得到可执行文件后,免安装平台210可以直接运行所述可执行文件,从而免安装启动并运行目标应用,并将相应的显示界面发送给客户端310,以向用户展示。
本实施例中,第二平台在执行可执行文件的过程,可以与其提供的第二功能接口交互。详细地,如前文所述的,第一功能接口是第一平台提供的执行目标操作的接口,第二功能接口是第二平台提供的执行所述目标操作的接口。所述目标操作例如可以是前文描述的文件操作、网络操作、音频信息操作、图像信息操作等。在此情况下,步骤S443可以通过图6所示的步骤实现。
步骤S610,针对所述可执行文件中与所述第一调用指令对应的可执行代码,当运行至所述可执行代码时,根据所述可执行代码确定所述第一调用指令中的所述第一功能接口的名称。
本实施例中,调用第二平台的编译接口之后,二进制业务逻辑代码中的各第一调用指令均被第二平台编译为可执行文件中的可执行代码。对于每一第一调用指令对应的可执行代码,第二平台可以从中确定该第一调用指令调用的接口的名称。
步骤S620,根据确定的所述第一功能接口的名称,查找与所述名称关联的代码地址。
步骤S630,根据与所述名称关联的代码地址,获取所述封装有第二调用指令的第一功能接口的代码,根据获取的代码执行所述第二调用指令,执行所述目标操作。
本实施例中,第一调用指令中的接口名称是与中间层中的特定代码的代码地址关联的。因此,基于所确定的第一功能接口的名称,可以查找到该名称关联的代码地址。查找到的代码地址即为中间层中设置的、具有所确定的名称的第一功能接口的代码,执行该代码则可以调用相应的第二功能接口以实现所述目标操作。
基于此,第二平台可以从查找到的代码地址所指示的位置,获取并执行存储于该位置的代码,从而实现目标操作。
此外,在执行可执行文件的过程中,第二平台还可以使用加载的资源文件中的资源。
请参照图7,图7为本申请又一实施例提供的一种免安装文件生成方法的流程示意图,该方法可以应用于图1所示的电子设备100。本实施例以目标应用是基于Unity游戏引擎开发的游戏应用为例,对免安装文件生成方法的步骤进行阐述。
步骤S710,获取基于Unity游戏引擎开发的游戏应用的业务逻辑源码。
其中,步骤S710的实现过程与前述实施例中的S110、S210类似,在此不再赘述。
步骤S720,调用Unity游戏引擎的转换工具,将所述业务逻辑源码转换为C++代码;获取LLVM(Low Level Virtual machine,低级虚拟机)根据所述C++代码输出的二进制业务逻辑代码和胶水代码,作为所述目标代码,所述二进制业务逻辑代码包括第一调用指令,所述第一调用指令用于调用第页面浏览平台中的第一功能接口。
其中,基于Unity游戏引擎开发的源代码为C#语言的代码,在此情况下,所述转换工具例如可以是l2cpp或者mono,其中,l2cpp和mono均为Unity游戏引擎提供的编译器,可以用于将C#代码编译为C++代码。
本实施例中,LLVM是架构编译器(compiler)的架构系统,一种具体的实现形式可以为Emscripten。示例性地,可以通过Emscripten来对所述C++代码进行编译,从而可以得到用于实现游戏应用的业务逻辑的二进制业务逻辑代码以及胶水代码。
步骤S730,设置中间层,在所述中间层中设置封装有第二调用指令的第一功能接口,所述第二调用指令用于调用免安装平台210中的第二功能接口。
步骤S740,获取所述封装有第二调用指令的第一功能接口的代码地址,将所述第一调用指令中的接口名称与所述代码地址关联。
步骤S750,生成包括游戏应用的二进制游戏资源文件、JavaScript代码、入口文件及所述目标代码的免安装文件,并将游戏应用的应用标识与生成的免安装文件关联。
其中,入口文件中可以设置有用于依次加载中间层和胶水代码的加载指令。
步骤S760,接收包括游戏应用的应用标识的应用启动请求,根据所述应用启动请求中的应用标识查找所述游戏应用的免安装文件。
步骤S770,若查找到所述游戏应用的免安装文件,则读取所述免安装文件的入口文件,依次加载中间层和胶水代码,根据胶水代码加载游戏应用的二进制游戏资源文件、JavaScript代码及二进制业务逻辑代码。
步骤S780,将加载的中间层的代码封装为一个对象,以所述对象及加载的二进制业务逻辑代码为输入参数,调用免安装平台210的编译接口,得到游戏应用的可执行文件。
步骤S790,在免安装平台210执行所述执行文件。
其中,上述步骤S730-步骤S790的详细实现过程与前述实施例中的相应步骤类似,在此不再赘述。
通过图7所示流程,可以基于生成的免安装文件提高免安装运行的游戏应用的运行效率,避免游戏卡顿,此外,还可以改善游戏画面掉帧、游戏画面失真等问题。
请参阅图8,其示出了本申请实施例提供的一种免安装文件生成装置110的结构框图。该装置110可以包括:获取模块111、转换模块112、设置模块113以及生成模块114。
其中,获取模块111用于获取目标应用的业务逻辑源码。
转换模块112用于将所述业务逻辑源码转换为目标代码,所述目标代码包括二进制业务逻辑代码,所述二进制业务逻辑代码包括第一调用指令,所述第一调用指令用于调用第一平台的第一功能接口。
设置模块113用于设置封装有第二调用指令的第一功能接口,所述第二调用指令用于调用第二平台的第二功能接口。
生成模块114用于根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件,所述免安装文件用于在所述第二平台中免安装启动所述目标应用。
可选地,装置110还可以包括关联模块。关联模块可以用于:在生成模块114根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件之前,获取所述封装有第二调用指令的第一功能接口的代码地址,将所述第一调用指令中的所述名称与所述代码地址关联。
可选地,关联模块还可以用于:在生成模块114根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件之后,将所述目标应用的应用标识与所述目标应用的免安装文件关联。
可选地,所述目标代码还包括胶水代码,所述胶水代码用于加载二进制业务逻辑代码,所述免安装文件包括入口文件。在此情况下,设置模块113还可以用于:在所述入口文件中设置加载指令,用于依次加载所述封装有第二调用指令的第一功能接口和所述胶水代码。
可选地,装置110还可以包括启动模块。启动模块可以用于:在关联模块将所述目标应用的应用标识与所述目标应用的免安装文件关联之后,接收应用启动请求,所述应用启动请求包括所述目标应用的应用标识;根据所述应用启动请求中的应用标识,查找与所述应用标识关联的所述免安装文件;在所述第二平台中运行所述免安装文件。
可选地,所述启动模块可以通过如下方式在所述第二平台中运行所述免安装文件:依次加载所述封装有第二调用指令的第一功能接口和所述胶水代码;调用所述第二平台的编译接口,对所述封装有第二调用指令的第一功能接口的代码以及所述二进制业务逻辑代码进行编译,得到编译后的可执行文件;在所述第二平台中运行所述可执行文件,以在所述第二平台中启动所述目标应用。
可选地,本实施例中,所述第一功能接口为所述第一平台提供的执行目标操作的接口,所述第二功能接口为所述第二平台提供的执行所述目标操作的接口。在此情况下,启动模块可以通过如下方式在所述第二平台中运行所述可执行文件:
针对所述可执行文件中与所述第一调用指令对应的可执行代码,当运行至所述可执行代码时,根据所述可执行代码确定所述第一调用指令中的所述第一功能接口的名称;根据确定的所述第一功能接口的名称,查找与所述名称关联的代码地址;根据与所述名称关联的代码地址,获取所述封装有第二调用指令的第一功能接口的代码,根据获取的代码执行所述第二调用指令,执行所述目标操作。
可选地,本实施例中,目标应用可以为基于Unity游戏引擎开发的游戏应用。在此情况下,转换模块将所述业务逻辑源码转换为目标代码的方式可以为:
调用所述Unity游戏引擎的转换工具,将所述业务逻辑源码转换为C++代码;获取低级虚拟机LLVM根据所述C++代码输出的二进制业务逻辑代码和胶水代码,作为所述目标代码。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,所显示或讨论的模块相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
请参考图9,其示出了本申请实施例提供的一种电子设备100的结构框图。该电子设备100可以是智能手机、平板电脑、电子书等能够运行应用程序的电子设备。本申请中的电子设备100可以包括一个或多个如下部件:处理器101、存储器102、以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器102中并被配置为由一个或多个处理器101执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。
处理器101可以包括一个或者多个处理核。处理器101利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器102内的指令、程序、代码集或指令集,以及调用存储在存储器102内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器101可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器101可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器101中,单独通过一块通信芯片进行实现。
存储器102可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器102可用于存储指令、程序、代码、代码集或指令集。存储器102可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备100在使用中所创建的数据(比如目标代码、中间层)等。
可以理解,图9所示结构仅为示意,电子设备100还可以包括比图9所示更多或更少的组件,或是具有与图9所示完全不同的配置。比如,电子设备100还可以包括通信单元。
请参考图10,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质1000中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质1000可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质800包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质1000具有执行上述方法中的任何方法步骤的程序代码1010的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码1010可以例如以适当形式进行压缩。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (11)
1.一种免安装文件生成方法,其特征在于,包括:
获取目标应用的业务逻辑源码;
将所述业务逻辑源码转换为目标代码,所述目标代码包括二进制业务逻辑代码,所述二进制业务逻辑代码包括第一调用指令,所述第一调用指令用于调用第一平台的第一功能接口;
设置封装有第二调用指令的第一功能接口,所述第二调用指令用于调用第二平台的第二功能接口;
根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件,所述免安装文件用于在所述第二平台中免安装启动所述目标应用。
2.根据权利要求1所述的方法,其特征在于,所述第一调用指令包括第一功能接口的名称;在所述根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件之前,所述方法还包括:
获取所述封装有第二调用指令的第一功能接口的代码地址;
将所述第一调用指令中的所述名称与所述代码地址关联。
3.根据权利要求1或2所述的方法,其特征在于,所述目标代码还包括胶水代码,所述胶水代码用于加载二进制业务逻辑代码,所述免安装文件包括入口文件;所述方法还包括:
在所述入口文件中设置加载指令,用于依次加载所述封装有第二调用指令的第一功能接口和所述胶水代码。
4.根据权利要求3所述的方法,其特征在于,在所述根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件之后,所述方法还包括:
将所述目标应用的应用标识与所述目标应用的免安装文件关联。
5.根据权利要求4所述的方法,其特征在于,在所述将所述目标应用的应用标识与所述目标应用的免安装文件关联之后,所述方法还包括:
接收应用启动请求,所述应用启动请求包括所述目标应用的应用标识;
根据所述应用启动请求中的应用标识,查找与所述应用标识关联的所述免安装文件;
在所述第二平台中运行所述免安装文件。
6.根据权利要求5所述的方法,其特征在于,所述在所述第二平台运行所述免安装文件,包括:
依次加载所述封装有第二调用指令的第一功能接口和所述胶水代码;
调用所述第二平台的编译接口,对所述封装有第二调用指令的第一功能接口的代码以及所述二进制业务逻辑代码进行编译,得到编译后的可执行文件;
在所述第二平台中运行所述可执行文件,以在所述第二平台中启动所述目标应用。
7.根据权利要求6所述的方法,其特征在于,所述第一功能接口为所述第一平台提供的执行目标操作的接口,所述第二功能接口为所述第二平台提供的执行所述目标操作的接口;所述在所述第二平台中运行所述可执行文件,包括:
针对所述可执行文件中与所述第一调用指令对应的可执行代码,当运行至所述可执行代码时,根据所述可执行代码确定所述第一调用指令中的所述第一功能接口的名称;
根据确定的所述第一功能接口的名称,查找与所述名称关联的代码地址;
根据与所述名称关联的代码地址,获取所述封装有第二调用指令的第一功能接口的代码,根据获取的代码执行所述第二调用指令,执行所述目标操作。
8.根据权利要求1或2所述的方法,其特征在于,所述目标应用为基于Unity游戏引擎开发的游戏应用,所述将所述业务逻辑源码转换为目标代码,包括:
调用所述Unity游戏引擎的转换工具,将所述业务逻辑源码转换为C++代码;
获取低级虚拟机LLVM根据所述C++代码输出的二进制业务逻辑代码和胶水代码,作为所述目标代码。
9.一种免安装文件生成装置,其特征在于,包括:
获取模块,用于获取目标应用的业务逻辑源码;
转换模块,用于将所述业务逻辑源码转换为目标代码,所述目标代码包括二进制业务逻辑代码,所述二进制业务逻辑代码包括第一调用指令,所述第一调用指令用于调用第一平台的第一功能接口;
设置模块,用于设置封装有第二调用指令的第一功能接口,所述第二调用指令用于调用第二平台的第二功能接口;
生成模块,用于根据所述目标代码和所述封装有第二调用指令的第一功能接口,生成所述目标应用的免安装文件,所述免安装文件用于在所述第二平台中免安装启动所述目标应用。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如权利要求1-8中任意一项所述的方法。
11.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行如权利要求1-8中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010085302.9A CN111338633B (zh) | 2020-02-10 | 2020-02-10 | 免安装文件生成方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010085302.9A CN111338633B (zh) | 2020-02-10 | 2020-02-10 | 免安装文件生成方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111338633A true CN111338633A (zh) | 2020-06-26 |
CN111338633B CN111338633B (zh) | 2023-08-15 |
Family
ID=71181512
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010085302.9A Active CN111338633B (zh) | 2020-02-10 | 2020-02-10 | 免安装文件生成方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111338633B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112214223A (zh) * | 2020-10-29 | 2021-01-12 | Oppo广东移动通信有限公司 | 应用启动方法、装置、终端设备及计算机可读存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130263083A1 (en) * | 2012-04-02 | 2013-10-03 | Kony Solutions, Inc. | Systems and methods for application development |
US8626919B1 (en) * | 2008-11-07 | 2014-01-07 | Google Inc. | Installer-free applications using native code modules and persistent local storage |
CN106708580A (zh) * | 2016-12-27 | 2017-05-24 | 北京奇虎科技有限公司 | 应用程序免安装运行的方法、系统及智能终端 |
US20180081640A1 (en) * | 2016-09-16 | 2018-03-22 | Oracle International Corporation | Systems and methods for building applications using building blocks linkable with metadata |
CN107943484A (zh) * | 2017-11-30 | 2018-04-20 | 广州酷狗计算机科技有限公司 | 执行业务功能的方法和装置 |
CN108647028A (zh) * | 2018-05-09 | 2018-10-12 | 广州腾讯科技有限公司 | 应用程序信息处理方法和装置 |
CN109347916A (zh) * | 2018-09-14 | 2019-02-15 | 北京小米移动软件有限公司 | 游戏交互方法、装置及计算机可读存储介质 |
CN109582310A (zh) * | 2018-11-30 | 2019-04-05 | 北京微播视界科技有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
CN109814853A (zh) * | 2019-01-18 | 2019-05-28 | 宜创(北京)科技有限公司 | 基于可视化的多平台数据生成方法、装置、设备及介质 |
CN109947433A (zh) * | 2019-03-28 | 2019-06-28 | 优信拍(北京)信息科技有限公司 | 一种小程序的生成方法、更新方法及装置 |
CN110187931A (zh) * | 2019-05-17 | 2019-08-30 | 北京百度网讯科技有限公司 | 小程序的运行方法及装置 |
CN110489088A (zh) * | 2019-08-13 | 2019-11-22 | 绿漫科技有限公司 | 一种跨平台的小程序开发方法 |
-
2020
- 2020-02-10 CN CN202010085302.9A patent/CN111338633B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8626919B1 (en) * | 2008-11-07 | 2014-01-07 | Google Inc. | Installer-free applications using native code modules and persistent local storage |
US20130263083A1 (en) * | 2012-04-02 | 2013-10-03 | Kony Solutions, Inc. | Systems and methods for application development |
US20180081640A1 (en) * | 2016-09-16 | 2018-03-22 | Oracle International Corporation | Systems and methods for building applications using building blocks linkable with metadata |
CN106708580A (zh) * | 2016-12-27 | 2017-05-24 | 北京奇虎科技有限公司 | 应用程序免安装运行的方法、系统及智能终端 |
CN107943484A (zh) * | 2017-11-30 | 2018-04-20 | 广州酷狗计算机科技有限公司 | 执行业务功能的方法和装置 |
CN108647028A (zh) * | 2018-05-09 | 2018-10-12 | 广州腾讯科技有限公司 | 应用程序信息处理方法和装置 |
CN109347916A (zh) * | 2018-09-14 | 2019-02-15 | 北京小米移动软件有限公司 | 游戏交互方法、装置及计算机可读存储介质 |
CN109582310A (zh) * | 2018-11-30 | 2019-04-05 | 北京微播视界科技有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
CN109814853A (zh) * | 2019-01-18 | 2019-05-28 | 宜创(北京)科技有限公司 | 基于可视化的多平台数据生成方法、装置、设备及介质 |
CN109947433A (zh) * | 2019-03-28 | 2019-06-28 | 优信拍(北京)信息科技有限公司 | 一种小程序的生成方法、更新方法及装置 |
CN110187931A (zh) * | 2019-05-17 | 2019-08-30 | 北京百度网讯科技有限公司 | 小程序的运行方法及装置 |
CN110489088A (zh) * | 2019-08-13 | 2019-11-22 | 绿漫科技有限公司 | 一种跨平台的小程序开发方法 |
Non-Patent Citations (3)
Title |
---|
JAY SHARMA等: "Lightweight Application Development Mechanisms for UNIX based Environments", pages 124 - 128 * |
张博文等: "快应用的技术特征分析与系统实现", vol. 48, no. 12, pages 2592 - 2531 * |
王伶俐等: "基于NodeJS+Express框架的轻应用定制平台的设计与实现", vol. 44, no. 2, pages 596 - 599 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112214223A (zh) * | 2020-10-29 | 2021-01-12 | Oppo广东移动通信有限公司 | 应用启动方法、装置、终端设备及计算机可读存储介质 |
CN112214223B (zh) * | 2020-10-29 | 2024-02-09 | Oppo广东移动通信有限公司 | 应用启动方法、装置、终端设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111338633B (zh) | 2023-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078318B (zh) | 配置文件的处理方法、装置、系统及存储介质 | |
WO2017050094A1 (zh) | 加载应用程序的方法及装置 | |
CN111324421B (zh) | 一种容器镜像的提供方法、加载方法及相关设备和系统 | |
CN111049870B (zh) | 应用下载和发送的方法、装置及系统 | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
WO2021027772A1 (zh) | 一种应用切换运行的方法及设备 | |
CN112558984A (zh) | 代码编译的方法、装置、电子设备以及服务器 | |
CN111338633B (zh) | 免安装文件生成方法、装置及电子设备 | |
CN111913741B (zh) | 对象拦截方法、装置、介质及电子设备 | |
CN112395098A (zh) | 应用程序接口调用方法、装置、存储介质和电子设备 | |
CN112154417A (zh) | 经由仿真网络通信信道在应用的单机版本和基于Web的版本之间共享代码库 | |
CN107423093B (zh) | 控制方法及装置、计算机装置和计算机可读存储介质 | |
US20220292141A1 (en) | Quick Application Startup Method and Related Apparatus | |
CN110610080B (zh) | 应用的隔离实现方法、移动终端、计算机设备和存储介质 | |
CN109408057B (zh) | 自动生成代码的方法、装置、介质和计算设备 | |
WO2022078057A1 (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 | |
JP6001199B2 (ja) | アンドロイドアプリケーションのタイゼン導入可能パッケージ自動変換方法及びこのためのコンピュータ読み取り可能な記録媒体 | |
CN111290740B (zh) | 应用程序的开发方法、装置、计算机设备和存储介质 | |
CN116643778B (zh) | 一种应用程序优化方法及电子设备 | |
WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
CN111984343B (zh) | 插件资源查找方法、装置、设备及可读存储介质 | |
CN113010172B (zh) | 配置文件的处理方法、装置、系统及存储介质 | |
CN114443582B (zh) | 一种操作系统上文件系统挂载方法、装置、设备及介质 | |
CN113010178B (zh) | 应用程序运行控制方法、装置、设备和介质 | |
EP4213016A1 (en) | Cloud platform and cloud platform-based program code processing method |
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 |