CN108536444B - 插件编译方法、装置、计算机设备和存储介质 - Google Patents
插件编译方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN108536444B CN108536444B CN201810159516.9A CN201810159516A CN108536444B CN 108536444 B CN108536444 B CN 108536444B CN 201810159516 A CN201810159516 A CN 201810159516A CN 108536444 B CN108536444 B CN 108536444B
- Authority
- CN
- China
- Prior art keywords
- package
- plug
- compiling
- public
- compiled
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及一种插件编译方法、装置、计算机设备和存储介质。所述方法包括:记录各个公共库之间的第一依赖关系,并将所述公共库进行编译得到公共编译包;根据所述第一依赖关系得到所述公共编译包之间的第二依赖关系;获取待编译插件,并对所述待编译插件进行编译;当所述待编译插件编译过程中需要使用所述公共编译包时,根据所述第二依赖关系生成调用所述公共编译包的调用程序,并修改调用的所述公共编译包的名称;将所述调用程序打包至插件包中,并在所述插件包打包完成后,恢复修改的所述公共编译包的名称。采用本方法能够减少插件包的大小。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种插件编译方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,出现了Android插件,当应用程序需要改动时,为了避免改动的较多,则可以生成Android插件,并在插件打包完成后进行下发安装。
传统技术中,将Android插件APK打包时将对公共库的依赖转化为对jar包的依赖,即在编译的过程中,当需要使用公共jar包的时候,则直接将该jar包保存在插件中,从而导致插件包较大。
发明内容
基于此,有必要针对上述技术问题,提供一种能够减少插件包大小的插件编译方法、装置、计算机设备和存储介质。
一种插件编译方法,所述方法包括:
记录各个公共库之间的第一依赖关系,并将所述公共库进行编译得到公共编译包;
根据所述第一依赖关系得到所述公共编译包之间的第二依赖关系;
获取待编译插件,并对所述待编译插件进行编译;
当所述待编译插件编译过程中需要使用所述公共编译包时,根据所述第二依赖关系生成调用所述公共编译包的调用程序,并修改调用的所述公共编译包的名称;
将所述调用程序打包至插件包中,并在所述插件包打包完成后,恢复修改的所述公共编译包的名称。
在其中一个实施例中,所述方法还包括:
将私库进行编译得到私有编译包;
当所述待编译插件编译过程中需要使用私有编译包时,则将所述私有编译包打包至所述插件包中。
在其中一个实施例中,所述私有编译包包括jar包和/或so包。
在其中一个实施例中,所述公共编译包包括jar包和/或so包。
在其中一个实施例中,所述方法还包括:
通过调试桥命令启动第一终端中安装的应用程序;
在所述第一终端中安装的应用程序启动后,通过调试桥命令将所述插件包推送到所述第一终端;
广播插件包安装指令,所述插件包安装指令用于指示所述第一终端安装所述插件包。
在其中一个实施例中,所述方法还包括:
广播插件包卸载指令,所述插件包卸载指令用于指示所述第一终端接收所述插件包卸载指令,并查找与所述插件包卸载指令对应的插件包,当查找到与所述插件包卸载指令对应的插件包时,则判断与所述插件包卸载指令对应的插件包是否已经安装,当与所述插件包卸载指令对应的插件包已安装,则卸载所述插件包。
一种插件编译装置,所述装置包括:
公共库编译模块,用于记录各个公共库之间的第一依赖关系,并将所述公共库进行编译得到公共编译包;
依赖关系获取模块,用于根据所述第一依赖关系得到所述公共编译包之间的第二依赖关系;
插件编译模块,用于获取待编译插件,并对所述待编译插件进行编译;
调用程序生成模块,用于当所述待编译插件编译过程中需要使用所述公共编译包时,根据所述第二依赖关系生成调用所述公共编译包的调用程序,并修改调用的所述公共编译包的名称;
打包模块,用于将所述调用程序打包至插件包中,并在所述插件包打包完成后,恢复的所述公共编译包的名称。
在其中一个实施例中,所述装置还包括:
私包编译模块,用于将私库进行编译得到私有编译包;
所述打包模块还用于当所述待编译插件编译过程中需要使用私有编译包时,则将所述私有编译包打包至所述插件包中。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
上述插件编译方法、装置、计算机设备和存储介质,首先对公共库进行编译得到公共编译包,并根据公共库的依赖关系得到公共编译包的依赖关系,从而编译的时候,直接根据该公共编译包的依赖关系生成调用该公共编译包的调用程序,实现插件的编译,不需要将公共编译包打包至插件包中,使得所生成的插件包容量小,且为了防止编译过程中将公共编译包打包至插件包中,在编译过程中修改公共编译包的名称,从而编译过程中无法获得该公共编译包,进而不能将该公共编译包打包至插件包中,从而在公共编译包修改时,不需要对插件包进行重新修改。
附图说明
图1为一个实施例中插件编译方法的应用场景图;
图2为一个实施例中插件编译方法的流程示意图;
图3为一个实施例中各个公共库之间的依赖关系的示意图;
图4为一个实施例中插件编译装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的插件编译方法,可以应用于如图1所示的应用环境中。其中,第一终端与第二终端进行通信。其中第一终端中安装有应用程序,第二终端中可以对于该应用程序对应的插件进行编译,并将编译完成后的插件发送给第一终端,从而第一终端可以实现插件的安装和卸载,以便于对应用程序进行更新。其中对于插件的编译可以在第二终端进行,即首先记录公共库之间的第一依赖关系,并对公共库进行编译得到公共编译包,从而根据所记录的第一依赖关系即可以获取到公共编译包的依赖关系,其次是对插件进行编译,当待编译插件编译过程中需要使用公共编译包时,则生成调用该公共编译包的程序,将该调用程序打包至插件包中,且为了避免将公共编译包打包到插件包中,先修改该公共编译包的名称,在打包完成后,再将该公共编译包的名称复原,以便于下次编译调用该公共编译包。其中,第一终端可以但不限于是各种智能手机、平板电脑和便携式可穿戴设备等可以安装应用程序的硬件设备,第二终端可以但不限于各种个人计算机、笔记本电脑等可以实现编程的硬件设备。
在一个实施例中,如图2所示,提供了一种插件编译方法,以该方法应用于图1中的第二终端为例进行说明,包括以下步骤:
S202:记录各个公共库之间的第一依赖关系,并将公共库进行编译得到公共编译包。
具体地,公共库为至少两个插件可能用到的代码工程库,例如安卓***中的library工程。依赖关系为各个公共库之间的结构关系,其中包括一般依赖关系、继承和聚合;其中若第一公共库引用了第二公共库,则第二公共库依赖于第一公共库。参见图3,图3为一个实施例中各个公共库之间的依赖关系的示意图,其中公共库A1依赖于公共库B1和公共库B2,公共库A2依赖于公共库B2和公共库B3,公共库B1依赖于公共库C1和公共库C2,公共库B2依赖于公共库C2和公共库C3,公共库B3依赖于公共库C3和公共库C4。公共编译包是将源语言编写的公共库进行编译得到的,该公共编译包为至少两个插件可能用到的编译包。
编译即利用编译程序根据源语言编写的源程序产生目标程序的过程,第二终端在记录公共库之间的第一依赖关系后,则通过编译程序将公共库从源语言编写的源程序转换为目标语言的目标程序得到公共编译包,实现了对公共库的编译。
S204:根据第一依赖关系得到公共编译包之间的第二依赖关系。
具体地,结合图3,第二终端在记录的公共库的第一依赖关系后,并将公共库编译成公共编译包,由于公共编译包与公共库存在一一对应关系,即一个公共库编译成一个公共编译包,因此第二终端可以根据公共库的第一依赖关系得到公共编译包的依赖关系。假设第二终端将公共库A1编译成公共编译包a1,公共库B1编译成公共编译包b1,公共库B2编译成公共编译包b2,则由于公共库A1依赖于公共库B1和公共库B2,因此第二终端可以得到公共编译包a1依赖于公共编译包b1和公共编译包b2。第二第一终端首先记录公共库的名称,然后将公共库编译成公共编译包,即一个公共库编译成一个公共编译包,并记录该公共编译包的名称,第一依赖关系中记录了各个公共库的名称以及各个名称之前的依赖关系作为第一依赖关系,将第一依赖关系中的公共库的名称替换为对应的公共编译包的名称即可以得到第二依赖关系。
S206:获取待编译插件,并对待编译插件进行编译。
具体地,第二终端在对公共库编译完成后,则可以开始对待编译插件进行编译,首先第二终端获取到本次待编译的插件,以及对应的编译程序,根据该编译程序即可以对待编译插件进行编译。
一般地,第二终端可以编译一个gradle插件工程(gradle为一个基于JVM(JavaVirtualMachine,java虚拟机)的构建工具),用于管理待编译插件,其中提供根工程、应用程序工程AppPlugin和库工程LibPlugin,可以从该库工程中获取到公共库进行编译,在公共库编译完成后,则对该gradle插件工程中的待编译插件进行编译。
S208:当待编译插件编译过程中需要使用公共编译包时,根据第二依赖关系生成调用公共编译包的调用程序,并修改调用的公共编译包的名称。
具体地,当待编译插件编译过程中需要使用公共编译包时,即应用程序工程中存在调用库工程中的公共库时,第二终端则可以通过钩子函数(hook函数)实现公共编译包的调用,从而将编译时依赖公共库修改为依赖公共编译包,且获取通过钩子函数实现的对公共编译包的调用程序,以便于将该调用程序打包至插件包。另外为了避免编译过程中将公共编译包打包至插件包,可以修改公共编译包的名称,从而编译程序不能根据公共编译包的名称获取到对应的公共编译包,从而编译程序不会将公共编译包打包至插件包中,仅是将调用程序打包至插件包中,即将调用程序复制到插件包中。
S210:将调用程序打包至插件包中,并在插件包打包完成后,恢复修改的公共编译包的名称。
具体地,第二终端中的编译程序获取到调用程序后,将该调用程序打包至插件包中即可实现插件的编译过程,且在插件包打包完成后,恢复所修改的公共编译包的名称,以便于下一次编译过程中生成调用程序等。第二终端恢复公共编译包的名称的步骤可以包括:在修改公共编译包的名称前,第二终端首先记录公共编译包的当前名称,然后按照预设逻辑对该当前名称进行修改,且在插件包打包完成后,第二终端将公共编译包的名称恢复为所记录的当前名称。其中所涉及到的预设逻辑可以是将当前名称中的字符的先后顺序改变,增加预设字符或减少预设字符等,在此不作具体限制,只需要当前名称与修改后的名称不同即可。
上述插件编译方法,首先对公共库进行编译得到公共编译包,并根据公共库的依赖关系得到公共编译包的依赖关系,从而编译的时候,直接根据该公共编译包的依赖关系生成调用该公共编译包的调用程序,实现插件的编译,不需要将公共编译包打包至插件包中,使得所生成的插件包容量小,且为了防止编译过程中将公共编译包打包至插件包中,在编译过程中修改公共编译包的名称,从而编译过程中无法获得该公共编译包,进而不能将该公共编译包打包至插件包中,从而在公共编译包修改时,由于未将公共编译包打包至插件包中,因此不需要对插件包进行重新修改。
在其中一个实施例中,该插件编译方法还可以包括:将私库进行编译得到私有编译包;当待编译插件编译过程中需要使用私有编译包时,则将私有编译包打包至插件包中。
具体地,私库是指只有一个插件所使用的代码工程库,因此首先将该私库进行编译得到私有编译包,并当待编译插件编译过程中需要使用私有编译包时,因为其他的插件不会使用该私有编译包,因此直接将该私有编译包打包至插件包中即可,即将私有编译包复制到插件包中。私有编译包是将源语言编写的私库进行编译得到的,该私有编译包是指只有一个插件可能用到的编译包。
可选地,对于该私有编译包,第二终端也可以生成通过钩子函数调用该私有编译包的调用程序,并修改该私有编译包的名称,将所生成的私有编译包的调用程序打包至插件包中,且第二终端在插件包打包完成后,修改调用的私有编译包的名称为原始的名称,以便于下次调用,这样可以实现私有编译包的共享,从而不需要在其他插件需要调用该私有编译包时,还需要重新调用编写该私库,并编译得到私有编译包。
上述实施例中,当待编译插件编译过程中需要使用私有编译包时,由于其他的插件不会使用该私有编译包,因此可以直接将该私有编译包打包至插件包中,不需要生成调用程序等。
在其中一个实施例中,私有编译包可以包括jar包和/或so包,公共编译包可以包括jar包和/或so包。其中jar包是针对java程序的,so包是针对c语言或c++语言的,因此两者是分开存储的。
在实际应用中可以设置一个插件工程gradle,其提供rootPlugin(用于根Project),提供AppPlugin(用于Application Project),提供LibPlugin(用于LibraryProject),实现插件的编译首先要编译库工程Library Project,然后是编译插件,即在库编译的基础上对插件进行编译。
其中在第一步编译库工程时,第二终端首先记录公共库和私库所依赖的其他库,即第二终端遍历公共库中所涉及到的其他公共库,私库中所涉及到的其他私库,并将每一个公共库生成唯一的公共编译包,每一个私库生成唯一的私有编译包,并根据公共库的第一依赖关系记录公共编译包的依赖关系,根据私库的第一依赖关系记录私有编译包的依赖关系。例如图3中,公共库A1依赖于公共库B1和公共库B2,公共库B1依赖于公共库C1和公共库C2,因此可以根据公共库A1生成的公共编译包a1依赖于公共编译包b1(公共库B1编译得到)和公共编译包b2(公共库B2编译得到),公共编译包b1(公共库B1编译得到)依赖于公共编译包c1(公共库C1编译得到)和公共编译包c2(公共库C2编译得到)。
在第二步对插件进行编译时,第二终端可以首先生成关于jar包的第一调用程序,然后生成关于so包的第二调用程序,并修改公共编译包的名称,即修改jar包和/或so包的名称以移除对公共库的依赖,第二终端然后将第一调用程序和第二调用程序打包至插件包,且在插件包打包完成后将jar包和/或so包的名称复原。具体地,第二终端将jar包和/或so包对于公共库的编译依赖动态修改为provide依赖,即依赖第一个任务生成的jar包和/或so包,这样在安卓插件打包成插件包时,需要hook Javac编译器,修改默认路径下生成的jar包的名称,避免打包时合入APK,且将将生成的hook函数调用程序打包到插件中,对合并so包时需要使用hook mergeJniLibsTask,修改公共库中的so包名称,打包完成后恢复jar包和so包的名称,这样最后生成出来的插件APK就不包含公共库的代码了。
上述实施例中,不仅涉及到java程序的jar包,还包括c语言等的so包,使得应用范围扩大。
在其中一个实施例中,当jar包打包完成后,仅需要在安装的根工程中进入该插件包即可实现应用程序的更新。传统上,在将插件安装到应用程序后,进行调试时,需要将插件上传都分发服务器,更新配置文件,将分发服务中的插件下载,然后安装等几个独立的步骤,造成配置繁琐,开发效率不高,为了避免该种情况的发生,可以在插件工程gradle中添加安装插件和卸载插件的任务。
其中,为了方便,可以在给第一终端使用的插件库中注册安卓的广播接收组件,用于监听插件的安装和卸载的广播。例如可以第一终端首先定义一个网络广播接收器类,比如broadcastreceiver,然后定义一个构造器方法以加入需要监听的广播,第三,第一终端加入管理广播的注册和广播注销的方法,从而方便该广播的注册和注销。
在其中一个实施例中,插件安装的步骤可以包括通过调试桥命令启动第一终端中安装的应用程序;在第一终端中安装的应用程序启动后,通过调试桥命令将插件包推送到第一终端;广播插件包安装指令,插件包安装指令用于指示第一终端安装插件包。
具体地,调试桥命令可以为adb命令,其中adb命令是连接第一终端和第二终端的桥梁,其中第一终端可以是安装有应用程序的手机,第二终端可以是用于调试的电脑等,从而研发人员可以在第二终端上对第一终端进行控制,而不需要将插件上传分发服务器等复杂的步骤,提高了效率。
在实际操作过程中,第二终端在对插件编译完成后,可以生成插件包,从而研发人员通过第二终端使用调试桥命名启动第一终端中安装的应用程序,然后第二终端再通过该调试桥命令将插件包推送到第一终端中,例如可以推送到第一终端的sd卡(SecureDigital,存储卡)上。可选地,第二终端可以通过计算哈希值的方式判断该插件包是否推送成功,例如可以在第二终端按照预设算法计算插件包的第一哈希值,然后将该插件包推送到第一终端,第一终端按照与第二终端相同的预设算法计算所接收到的插件包的第二哈希值,并返回给第二终端,第二终端通过比较第一哈希值和第二哈希值来确定该插件包是否推送成功,当推送成功,则第二终端可以向第一终端广播插件包安装指令,从而第一终端可以使用插件库中注册的安装广播接收组件BoardcastReceiver接收到该插件包安装指令,并根据该插件包安装指令从sd卡上获取到对应的插件包,例如通过插件包的名称来从sd卡上获取到对应的插件包,并在获取到对应的插件包后将该插件包安装在应用程序的根工程中,从而可以实现插件的安装。
可选地,在第一终端接收到插件安装指令的时候,第一终端还可以判断是否已经安装了该插件,即根据插件名称判断应用程序的根目录中是否已经存在该插件,如果已经存在,则第一终端向第二终端发送已安装提示,和/或是否需要覆盖提示等,并在接收到第二终端发送的覆盖指令或重新安装指令后,重新安装该插件,即将新的插件包存储至应用程序的根目录中。
上述实施例中,在生成插件包进行调试的过程中,不需要将该插件包上传至分发服务器,第一终端从分发服务器下载该插件包并安装的复杂步骤,仅仅可以通过调试桥命令将该插件包从第二终端推送到第一终端,第二终端向第一终端广播插件安装指令,第一终端在接收广播安装指令后进行安装即可,且在安装完成后,可以通过第一终端来对应用程序进行调试,大大节省了调试时间。
在其中一个实施例中,插件卸载的步骤可以包括:广播插件包卸载指令,插件包卸载指令用于指示第一终端接收插件包卸载指令,并查找与插件包卸载指令对应的插件包,当查找到与插件包卸载指令对应的插件包时,则判断与插件包卸载指令对应的插件包是否已经安装,当与插件包卸载指令对应的插件包已安装,则卸载插件包。
具体地,在调试完成,或者调试过程中需要对插件包进行修改时,第二终端可以广播针对该插件包的插件包卸载指令,从而第一终端可以使用插件库中注册的安装广播接收组件BoardcastReceiver接收到该插件包卸载指令,并根据该插件包卸载指令中所携带的插件的名称查找到该插件包,实现对该插件包的卸载,即将该插件包从对应的应用程序的根目录中删除。可选地,在第一终端接收到该插件包卸载指令后,可以先判断第一终端的对应的应用程序中是否已经安装了该插件包,如果没有安装该插件包,则第一终端不执行卸载操作,并向第二终端返回未安装该插件包的提示,如果已经安装了该插件包,第一终端则将该插件包从该应用程序的根目录中删除,以实现对插件包的卸载。
上述实施例中,在插件包进行卸载的时候,不需要将整个应用程序卸载,并安装不包含该插件包的应用程序,而仅需要第二终端广播插件包卸载指令,从而第一终端在接收到该插件包卸载指令后,可以将该插件包从应用程序的根目录中删除,不影响原应用程序。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图4所示,提供了一种插件编译装置,包括:公共库编译模块100、依赖关系获取模块200、插件编译模块300、调用程序生成模块400和打包模块500,其中:
公共库编译模块100,用于记录各个公共库之间的第一依赖关系,并将公共库进行编译得到公共编译包。
依赖关系获取模块200,用于根据第一依赖关系得到公共编译包之间的第二依赖关系。
插件编译模块300,用于获取待编译插件,并对待编译插件进行编译。
调用程序生成模块400,用于当待编译插件编译过程中需要使用公共编译包时,根据第二依赖关系生成调用公共编译包的调用程序,并修改调用的公共编译包的名称。
打包模块500,用于将调用程序打包至插件包中,并在插件包打包完成后,回复修改的公共编译包的名称。
在其中一个实施例中,插件编译装置还可以包括:
私包编译模块,用于将私库进行编译得到私有编译包。
打包模块500还用于当待编译插件编译过程中需要使用私有编译包时,则将私有编译包打包至插件包中。
在其中一个实施例中,私有编译包包括jar包和/或so包。
在其中一个实施例中,公共编译包可以包括jar包和/或so包。
在其中一个实施例中,插件编译装置还可以包括:
启动模块,用于通过调试桥命令启动第一终端中安装的应用程序。
推送模块,用于在第一终端中安装的应用程序启动后,通过调试桥命令将插件包推送到第一终端。
广播模块,用于广播插件包安装指令,插件包安装指令用于指示第一终端安装插件包。
在其中一个实施例中,广播模块还用于广播插件包卸载指令,插件包卸载指令用于指示第一终端接收插件包卸载指令,并查找与插件包卸载指令对应的插件包,当查找到与插件包卸载指令对应的插件包时,则判断与插件包卸载指令对应的插件包是否已经安装,当与插件包卸载指令对应的插件包已安装,则卸载插件包。
关于插件编译装置的具体限定可以参见上文中对于插件编译方法的限定,在此不再赘述。上述插件编译装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是第一终端,其内部结构图可以如图5所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的第一终端通过网络连接通信。该计算机程序被处理器执行时以实现一种插件编译方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:记录各个公共库之间的第一依赖关系,并将公共库进行编译得到公共编译包;根据第一依赖关系得到公共编译包之间的第二依赖关系;获取待编译插件,并对待编译插件进行编译;当待编译插件编译过程中需要使用公共编译包时,根据第二依赖关系生成调用公共编译包的调用程序,并修改调用的公共编译包的名称;将调用程序打包至插件包中,并在插件包打包完成后,恢复修改的公共编译包的名称。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:将私库进行编译得到私有编译包;当待编译插件编译过程中需要使用私有编译包时,则将私有编译包打包至插件包中。
在一个实施例中,处理器执行计算机程序时所实现的步骤中的私有编译包包括jar包和/或so包。
在一个实施例中,处理器执行计算机程序时所实现的步骤中的公共编译包包括jar包和/或so包。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过调试桥命令启动第一终端中安装的应用程序;在第一终端中安装的应用程序启动后,通过调试桥命令将插件包推送到第一终端;广播插件包安装指令,插件包安装指令用于指示第一终端安装插件包。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:广播插件包卸载指令,插件包卸载指令用于指示第一终端接收插件包卸载指令,并查找与插件包卸载指令对应的插件包,当查找到与插件包卸载指令对应的插件包时,则判断与插件包卸载指令对应的插件包是否已经安装,当与插件包卸载指令对应的插件包已安装,则卸载插件包。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:记录各个公共库之间的第一依赖关系,并将公共库进行编译得到公共编译包;根据第一依赖关系得到公共编译包之间的第二依赖关系;获取待编译插件,并对待编译插件进行编译;当待编译插件编译过程中需要使用公共编译包时,根据第二依赖关系生成调用公共编译包的调用程序,并修改调用的公共编译包的名称;将调用程序打包至插件包中,并在插件包打包完成后,回复修改的公共编译包的名称。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:将私库进行编译得到私有编译包;当待编译插件编译过程中需要使用私有编译包时,则将私有编译包打包至插件包中。
在一个实施例中,计算机程序被处理器执行时所实现的步骤中的私有编译包包括jar包和/或so包。
在一个实施例中,计算机程序被处理器执行时所实现的步骤中的公共编译包包括jar包和/或so包。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:通过调试桥命令启动第一终端中安装的应用程序;在第一终端中安装的应用程序启动后,通过调试桥命令将插件包推送到第一终端;广播插件包安装指令,插件包安装指令用于指示第一终端安装插件包。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:广播插件包卸载指令,插件包卸载指令用于指示第一终端接收插件包卸载指令,并查找与插件包卸载指令对应的插件包,当查找到与插件包卸载指令对应的插件包时,则判断与插件包卸载指令对应的插件包是否已经安装,当与插件包卸载指令对应的插件包已安装,则卸载插件包。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种插件编译方法,所述方法包括:
记录各个公共库之间的第一依赖关系,并将所述公共库进行编译得到公共编译包;
根据所述第一依赖关系得到所述公共编译包之间的第二依赖关系,所述公共编译包与公共库存在一一对应关系;
获取待编译插件,并对所述待编译插件进行编译;
当所述待编译插件编译过程中需要使用所述公共编译包时,根据所述第二依赖关系生成调用所述公共编译包的调用程序,并修改调用的所述公共编译包的名称,包括:通过钩子函数实现公共编译包的调用,从而将编译时依赖公共库修改为依赖公共编译包,且获取通过钩子函数实现的对公共编译包的调用程序;
将所述调用程序打包至插件包中,并在所述插件包打包完成后,恢复修改的所述公共编译包的名称。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将私库进行编译得到私有编译包;
当所述待编译插件编译过程中需要使用私有编译包时,则将所述私有编译包打包至所述插件包中。
3.根据权利要求2所述的方法,其特征在于,所述私有编译包包括jar包和/或so包。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述公共编译包包括jar包和/或so包。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过调试桥命令启动第一终端中安装的应用程序;
在所述第一终端中安装的应用程序启动后,通过调试桥命令将所述插件包推送到所述第一终端;
广播插件包安装指令,所述插件包安装指令用于指示所述第一终端安装所述插件包。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
广播插件包卸载指令,所述插件包卸载指令用于指示所述第一终端接收所述插件包卸载指令,并查找与所述插件包卸载指令对应的插件包,当查找到与所述插件包卸载指令对应的插件包时,则判断与所述插件包卸载指令对应的插件包是否已经安装,当与所述插件包卸载指令对应的插件包已安装,则卸载所述插件包。
7.一种插件编译装置,其特征在于,所述装置包括:
公共库编译模块,用于记录各个公共库之间的第一依赖关系,并将所述公共库进行编译得到公共编译包;
依赖关系获取模块,用于根据所述第一依赖关系得到所述公共编译包之间的第二依赖关系,所述公共编译包与公共库存在一一对应关系;
插件编译模块,用于获取待编译插件,并对所述待编译插件进行编译;
调用程序生成模块,用于当所述待编译插件编译过程中需要使用所述公共编译包时,根据所述第二依赖关系生成调用所述公共编译包的调用程序,并修改调用的所述公共编译包的名称,包括:通过钩子函数实现公共编译包的调用,从而将编译时依赖公共库修改为依赖公共编译包,且获取通过钩子函数实现的对公共编译包的调用程序;
打包模块,用于将所述调用程序打包至插件包中,并在所述插件包打包完成后,恢复的所述公共编译包的名称。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
私包编译模块,用于将私库进行编译得到私有编译包;
所述打包模块还用于当所述待编译插件编译过程中需要使用私有编译包时,则将所述私有编译包打包至所述插件包中。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810159516.9A CN108536444B (zh) | 2018-02-26 | 2018-02-26 | 插件编译方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810159516.9A CN108536444B (zh) | 2018-02-26 | 2018-02-26 | 插件编译方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536444A CN108536444A (zh) | 2018-09-14 |
CN108536444B true CN108536444B (zh) | 2022-02-18 |
Family
ID=63485871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810159516.9A Active CN108536444B (zh) | 2018-02-26 | 2018-02-26 | 插件编译方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108536444B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113407165B (zh) * | 2021-06-29 | 2023-04-07 | 抖音视界有限公司 | Sdk的生成和自升级方法、装置、可读介质和设备 |
CN115268924B (zh) * | 2022-06-10 | 2023-05-02 | 知学云(北京)科技股份有限公司 | 一种基于aPaaS平台的公式计算引擎服务方法及*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130198182A1 (en) * | 2011-08-12 | 2013-08-01 | Sanofi | Method, system and program for comparing claimed antibodies with a target antibody |
CN103763325A (zh) * | 2014-01-26 | 2014-04-30 | 深圳英飞拓科技股份有限公司 | 构建ip安防产品开发环境的方法 |
CN105224378A (zh) * | 2015-10-27 | 2016-01-06 | 上海斐讯数据通信技术有限公司 | 软件开发包的编译方法、***及所适用的交换机设备 |
-
2018
- 2018-02-26 CN CN201810159516.9A patent/CN108536444B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130198182A1 (en) * | 2011-08-12 | 2013-08-01 | Sanofi | Method, system and program for comparing claimed antibodies with a target antibody |
CN103763325A (zh) * | 2014-01-26 | 2014-04-30 | 深圳英飞拓科技股份有限公司 | 构建ip安防产品开发环境的方法 |
CN105224378A (zh) * | 2015-10-27 | 2016-01-06 | 上海斐讯数据通信技术有限公司 | 软件开发包的编译方法、***及所适用的交换机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108536444A (zh) | 2018-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491695B (zh) | 一种集成安卓应用的增量更新方法 | |
Koshy et al. | Remote incremental linking for energy-efficient reprogramming of sensor networks | |
KR101003888B1 (ko) | 전자 장치에서의 3-단계 부팅 프로세스 | |
CN109144519B (zh) | 升级包的生成方法、装置、计算机设备和存储介质 | |
CN109032631B (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN107797818A (zh) | 应用程序升级方法及装置 | |
CN108228077B (zh) | 存储区的管理方法、运行方法、装置、设备、可读介质 | |
CN113835713B (zh) | 源码包下载方法、装置、计算机设备和存储介质 | |
CN113126893B (zh) | 扩展***分区的方法、装置、存储介质和计算机设备 | |
CN108536444B (zh) | 插件编译方法、装置、计算机设备和存储介质 | |
CN110765394A (zh) | so文件加载方法、装置、存储介质及终端设备 | |
CN106293790B (zh) | 基于Firefox操作***的应用程序升级方法和装置 | |
CN113867768A (zh) | 操作***处理方法、装置、电子设备及存储介质 | |
US10552135B1 (en) | Reducing a size of an application package | |
CN112860287A (zh) | ***程序升级方法、装置、计算机设备及存储介质 | |
CN111143790B (zh) | 代码混淆方法、装置、设备及存储介质 | |
CN114077458A (zh) | 应用程序内业务模块启动方法、装置、设备和存储介质 | |
CN111949301B (zh) | 应用程序热更新方法、装置和计算机可读存储介质 | |
WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
CN113641389A (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN112214213A (zh) | Linux内核的开发和管理方法、装置、计算机设备和存储介质 | |
CN111736863A (zh) | 一种软件升级方法、装置及电子设备 | |
CN112148377A (zh) | EFI Shell环境下防止SSD异常掉电的方法和装置 | |
CN113010199B (zh) | 应用更新方法、装置、计算机设备和存储介质 | |
US20240152387A1 (en) | Method, apparatus, electronic device and storage medium for application launch |
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 |