[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

CN110333872A - 一种应用的处理方法、装置、设备和介质 - Google Patents

一种应用的处理方法、装置、设备和介质 Download PDF

Info

Publication number
CN110333872A
CN110333872A CN201910615185.XA CN201910615185A CN110333872A CN 110333872 A CN110333872 A CN 110333872A CN 201910615185 A CN201910615185 A CN 201910615185A CN 110333872 A CN110333872 A CN 110333872A
Authority
CN
China
Prior art keywords
control
original
target
application
target control
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
Application number
CN201910615185.XA
Other languages
English (en)
Other versions
CN110333872B (zh
Inventor
黄伟武
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Huya Technology Co Ltd
Original Assignee
Guangzhou Huya Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangzhou Huya Technology Co Ltd filed Critical Guangzhou Huya Technology Co Ltd
Priority to CN201910615185.XA priority Critical patent/CN110333872B/zh
Publication of CN110333872A publication Critical patent/CN110333872A/zh
Application granted granted Critical
Publication of CN110333872B publication Critical patent/CN110333872B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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

一种应用的处理方法、装置、设备和介质
技术领域
本发明实施例涉及控件的使用技术,尤其涉及一种应用的处理方法、装置、设备和介质。
背景技术
当运用编译器开始一个项目时,可以看到的是写入的源代码文件。以运用Java语言为例,项目可以包括源代码(Java Code)文件或Java虚拟机(JVM Code),资源文件,配置文件,但是通过编译打包(Run project),可以得到一个在我们的安卓设备上可以运行的安卓安装包(AndroidPackage,Apk)。将该安装包上线应用市场,还需要我们对其进行签名处理,来确保我们应用程序的唯一性和安全性。整个过程就是所谓的项目构建。
在实现整个构建的过程中,对于每一个构建的步骤,都需要相应的功能模块来进行,比如Java Code编译,如何打成dex包等等,而安卓则为我们提供了相应的工具,我们可以通过相应的命令行来进行控制,但是,整个构建过程涉及到很多的步骤,很多的工具的使用,如果都通过命令行来进行控制,势必会相当麻烦,因此集成开发环境(IntegratedDevelopment Environment,IDE)则对整个过程进行了一个打包,当我们在编译打包的时候,底层的打包工具就会被调用,打包流程都会自动执行。然后我们只需要对构建文件按照自己的需求进行相应的配置,就可以构建出自己所需要的项目。
对于一些布局文件(Layout)对应的控件,为了使代码可以被正常编译,需要直接引入该控件依赖的库文件,即依赖库,此时会导致依赖库变大,进而在编译代码时,需要花时间从庞大的依赖库中寻找控件所需的内容,使得编译时间变长。
发明内容
本发明提供一种应用的处理方法、装置、设备和介质,以解决为了使代码可以被正常编译,需要直接引入该控件对应依赖库,此时会导致依赖库变大,进而在编译代码时,需要花时间从庞大的依赖库中寻找控件所需的内容,使得编译时间变长的问题。
第一方面,本发明实施例提供了一种应用的处理方法,包括:
在应用中确定原始控件,所述原始控件依赖库文件;
参照所述原始控件生成目标控件,所述目标控件依赖程序文件;
在应用中使用所述目标控件替换所述原始控件。
在此基础上,所述原始控件包括路径名和原始参数,所述原始控件的路径名指向库文件,所述原始参数包括键和值;
所述参照所述原始控件生成目标控件,包括:
建立一目标控件,所述目标控件包括路径名、第一目标参数、第二目标参数,所述第一目标参数包括值,所述第二目标参数包括值;
将所述目标控件的路径名指向程序文件;
将所述原始控件的路径名设置为所述第一目标参数的值;
将所述原始参数的键和值设置为所述第二目标参数的值。
在此基础上,所述在应用中使用所述目标控件替换所述原始控件之后,还包括:
对所述应用进行编译处理,获得数据包。
第二方面,本发明实施例还提供了一种应用的处理方法,包括:
确定对应用完成编译后获得的数据包;
确定所述数据包中的目标控件,所述目标控件依赖程序文件;
参照所述目标控件生成原始控件,所述原始控件依赖库文件;
在所述数据包中使用所述原始控件替换所述目标控件。
在此基础上,所述确定所述数据包中的目标控件,包括:
确定目标控件的路径名;
对所述数据包进行反编译,以获得所述应用;
从所述应用中检测路径名为所述路径名的目标控件,作为目标控件。
在此基础上,确定所述目标控件包括的路径名、第一目标参数、第二目标参数,所述第一目标参数包括预设的键,所述第二目标参数包括预设的键;
所述参照所述目标控件生成原始控件,包括:
建立一原始目标控件,所述原始控件包括路径名、原始参数;
将所述第一目标参数的值设置为所述原始控件的路径名;
将所述第二目标参数的值设置为所述原始参数的键和值。
在此基础上,所述在所述数据包中使用所述原始控件替换所述目标控件,包括:
从所述数据包中标记所述目标控件对应的第一字节码;
将所述原始控件编译为第二字节码;
使用所述第二字节码替换所述第一换字节码。
在此基础上,在所述数据包中使用所述原始控件替换所述目标控件之后,还包括:
将所述数据包进行打包,以获得应用软件安装包。
第三方面,本发明实施例还提供了一种应用的处理装置,包括:
原始控件确定模块,用于在应用中确定原始控件,所述原始控件依赖库文件;
目标控件生成模块,用于参照所述原始控件生成目标控件,所述目标控件依赖程序文件;
控件替换模块,用于在应用中使用所述目标控件替换所述原始控件。
第四方面,本发明实施例还提供了一种应用的处理装置,包括:
数据包确定模块,用于确定对应用完成编译后获得的数据包;
目标控件确定模块,用于确定所述数据包中的目标控件,所述目标控件依赖程序文件;
原始控件生成模块,用于参照所述目标控件生成原始控件,所述原始控件依赖库文件;
控件替换模块,用于在所述数据包中使用所述原始控件替换所述目标控件。
第五方面,本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面或第二方面所述的一种应用的处理方法。
第六方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面或第二方面所述的一种应用的处理方法。
本发明实施例首先在应用中确定依赖库文件原始控件,这些原始控件在被编译时是需要将其依赖的库文件一起进行编译的。在确定原始控件后,参照该原始控件生成目标控件,此时的目标控件依赖程序文件,依赖程序文件的目标控件在被编译时不用编译库文件。同时,目标控件包含了原始控件的所有信息,可以实现和原始控件一样的功能。因此,编译目标控件与编译原始控件相比,减少了编译库文件的时间。
附图说明
图1A为本发明实施例一提供的一种应用的处理方法的流程图;
图1B为本发明实施例一提供的一种原始控件的结构图;
图2A为本发明实施例二提供的一种应用的处理方法的流程图;
图2B为本发明实施例二提供的一种根据原始控件生成目标控件的结构图图;
图3为本发明实施例三提供的一种应用的处理方法的流程图;
图4为本发明实施例四提供的一种应用的处理方法的流程图;
图5为本发明实施例五提供的一种应用的处理装置的结构图;
图6为本发明实施例六提供的一种应用的处理装置的结构图;
图7为本发明实施例七提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1A为本发明实施例一提供的一种应用的处理方法的流程图,本发明实施例可适用于将应用中的依赖库文件的原始控件替换为依赖程序的目标控件的场景。该方法可以由本发明实施例中的应用的处理装置来执行,该装置可采用软件和/或硬件的方式实现,通常配置在编译器中。
编译器是一种基本的开发工具,用于将“高级语言”(源代码)翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标代码(object code)→链接器(Linker)→可执行程序(executables)。
Java编译器是一种常见的编译器。Java编译器(Javac.exe)的作用是将Java源程序编译成中间代码字节码文件,是最基本的开发工具。编译时首先读入Java源程序(即在MS-DOS命令行下键入Javac HelloWorld.Java等文件名参数和其他选项参数),然后进行语法检查,如果出现问题就终止编译。语法检查通过后,生成中间代码即字节码,字节码文件名和源文件名相同,扩展名为.class。
一般的,以安卓(Android)为例,从源代码开始,到获得安装的APK文件的过程可以理解为:
首先安卓资源打包工具(Android Asset Packaging Tool,AAPT)会将安卓文件进行转化,生成对应资源编号(ID)的R文件(R.Java)和资源文件(二进制文件)。然后,adil工具会将其中的aidl接口转化成Java的接口。至此,Java编译器开始进行Java文件向class文件的转化,将R文件,Java源代码,由aidl转化来的Java接口,统一转化成.class文件。通过dx工具将class文件转化为dex文件。此时我们得到了经过处理后的资源文件和一个dex文件,当然,还会存在一些其它的资源文件,这个时候,就是将其打包成一个类似apk的文件。但还并不是直接可以安装在安卓系统上的APK文件。通过签名工具对其进行签名。通过Zipalign工具进行优化,提升运行速度(原理后文会提及)。最终,可以获得一个可以安装在我们移动终端上的APK。
参考图1A,该方法具体包括:
S101、在应用中确定原始控件。
在一可行的实现方式中,AAPT检查AndroidManifest.xml,使用table.addIncludedResources(bundle,assets)添加被引用资源包,比如系统的那些Android:命名空间下的资源。收集资源文件,处理重叠包(overlay),将收集到的资源文件加到资源表(ResourceTable),对res目录下的各个资源子目录进行处理,对资源文件名做合法性检查,并将其添加到ResourceTable内。给包(bag)资源分配ID,在继续编译其他资源之前,我们需要先给bag资源(attrs,比如orientation这种属性的取值范围定义的子元素)分配ID,因为其他资源可能对它们有引用。编译xml资源文件。程序会对layouts,anims,animators等逐一调用ResourceTable.cpp的进行编。
一般的,当一个控件被编译时,会根据该控件的路径名去确定该控件的依赖对象。若依赖对象为库文件,则在编译时需要添加库文件一同进行编译;若依赖对象为程序文件,则不需要添加其他文件,直接进行编译即可。
一般的,当通过控件的路径名确定一个控件的依赖对象为库文件(本实施例中的原始控件),说明当其被编译时需要加载该库文件,只有在加载库文件的基础上,才可以完成对原始控件的编译。
在一可行的实现方式中,在使用table.addIncludedResources(bundle,assets)添加被引用资源包之前,在应用中确定原始控件,原始控件为依赖库文件(包括被引用的资源包)的控件。
S102、参照所述原始控件生成目标控件。
一般的,控件包括控件路径名与参数。路径名即表示控件的名字,也表示该从何处对控件进行寻找。当路径指向一库文件时,认为该控件依赖库文件,添加被依赖的库文件。当路径指向一程序文件时,则不作处理。
图1B为本发明实施例一提供的一种原始控件的结构图。参考图1B,路径名11中的com.huya.view.BarrageView表示:在com文件夹下的huya文件夹下的view文件夹下的BarrageView。参数12表示属性前缀和他对应的一组键值对。冒号左边的Android和app为属性前缀,冒号右边为键值对,键值对表明将等号右边的值赋给等号左边的键。
一般的,基于编译器的设定,若一控件的路径名指向程序文件,就不在编译时考虑是是否添加库文件。即使该控件所述依赖的程序文件中表明需要依赖某些库文件的资源才可以实现功能,若该控件的路径名指向程序文件,就完成对该控件的编译。
在一可行的实现方式中,由于原始控件依赖库文件,因此需要将原始控件进行处理,以使得在对控件路径名进行查找时,不会指向库文件。因此参照原始控件生成目标控件,使得目标控件依赖程序文件,同时目标控件包括原始控件的所有信息。
参照原始控件生成目标控件是指目标控件与原始控件可以实现一样的功能,原始控件的所有信息都可以在目标控件中进行体现。
S103、在应用中使用所述目标控件替换所述原始控件。
在一可行的实现方式中,设定好原始控件中路径名和参数转化为目标控件时的转化规则,当确定原始控件的路径名后,则可以通过脚本语言批量的将原始控转化为目标控件。
示例性的,如要在Android系统中实现直播功能,则需要通过Java源代码实现,此时可以将整个Java源代码认为是一个应用。直播功能中要求有弹幕,那么,在Java源代码中,会有一段代码来实现弹幕功能。一般的,会将弹幕功能相关的代码组合到一个“弹幕控件”中。
比如弹幕控件,弹幕控件对应着有弹幕的频率限制、字数限制、弹幕颜色设置等等的属性,我们原本在依赖库布局中引用到它的地方,会直接通过xml进行定义
而替换后定义为
在组件单独构建过程中,这样的方式能够解开当前组件对该View的强依赖关系。只有在集成到主工程,进行应用程序整体构建时,才会将跨组件控件还原为原始控件信息,以完成应用程序的构建。
本发明实施例首先在应用中确定依赖库文件原始控件,这些原始控件在被编译时是需要将其依赖的库文件一起进行编译的。在确定原始控件后,参照该原始控件生成目标控件,此时的目标控件依赖程序文件,依赖程序文件的目标控件在被编译时不用编译库文件。同时,目标控件包含了原始控件的所有信息,可以实现和原始控件一样的功能。因此,编译目标控件与编译原始控件相比,减少了编译库文件的时间。
实施例二
图2A为本发明实施例二提供的一种应用的处理方法的流程图。本实施例在实施例一的基础上,对参照原始控件生成目标控件进行了详细描述。参考图2A,该方法具体包括:
S201、在应用中确定原始控件。
在一可行的实现方式中,通过脚本检测出应用中的依赖库文件的原始控件。由开发人员从中确定需要进行替换的原始控件。
在一可行的实现方式中,可以建立筛选规则,通过筛选规则从原始控件中确定需要进行替换的原始控件。
通过脚本和筛选规则在应用中确定需要进行替换的原始控件,可以提高效率,节约开发人员的时间,同时避免人工筛选带来的遗漏等。
S202、建立一目标控件。
建立一个目标控件,该目标控件包括指向程序文件的路径名和存储原始控件中参数的参数。为了便于说明,将目标控件的参数区分为第一目标参数与第二目标参数,第一目标参数与第二目标参数分别用于存储原始控件中的路径名与参数。
当然第一目标参数与第二目标参数的构造符合参数的基本形式,即键值对。
S203、将所述目标控件的路径名指向程序文件。
为目标控件设定路径名,并将路径名指向程序文件。以使得目标控件被编译时不需要添加库文件。
S204、将所述原始控件的路径名设置为所述第一目标参数的值。
图2B为本发明实施例二提供的一种根据原始控件生成目标控件的结构图图。参考图2B,目标控件包括第一目标参数21。第一目标参数21用于存放原始控件的路径名11。首先构造第一目标参数的键“accName”,用于存放原始控件的路径名,然后将原始空间控件的路径名“com.huya.view.BarrageView”处理为字符串,作为accName的值,即表现为accName=“com.huya.view.BarrageView”。最后加上属性前缀,在本实施例中,属性前缀包括app和Android这两类,属性前缀一般不用主动设置,Android可以默认为,系统中对属性前缀Android已经有事先的定义。而属性前缀app可以通过本领域技术人员的自行定义来实现。
S205、将所述原始参数的键和值设置为所述第二目标参数的值。
参考图2B,目标控件包括第二目标参数22。第二目标参数22用于存放原始控件的参数12。原始控件的参数12可以为分为两类,一类是属性前缀为app的,一类为属性前缀为Android的。属性前缀为Android的原始控件的参数在被设置为第二目标参数时,保留属性前缀Android,然后直接将原始控件的参数的键作为目标控件参数的键,将原始控件的参数的值作为目标控件参数的值。属性前缀为app的原始控件的参数在被设置为第二目标参数时,保留属性前缀为app,将自定义的键attr_wrapper加上数字编号,如attr_wrapper_1等,作为第二目标参数的键,将原始控件的参数的键值对(处理为字符串)作为目标控件参数的值。
S206、在应用中使用所述目标控件替换所述原始控件。
S207、对所述应用进行编译处理,获得数据包。
将原始控件替换为目标控件后,aapt打包资源文件,生成R.Java和编译后的资源(二进制文件)。使用Android接口定义语言(Android Interface Definition Language,aidl),通过输入aidl后缀的文件,以获得用于进程通信的C/S端Java代码。
我们有了R.Java和aidl生成的Java文件,再加上工程的源代码,现在可以使用Javac进行正常的Java编译生成class文件了。
输入Java source的文件夹(另外还包括了build/generated下的:R.Java,aidl生成的Java文件,以及BuildConfig.Java)。输出:对于gradle编译,可以在build/intermediates/classes里,看到输出的class文件,即数据包。
本发明实施例首先在应用中确定依赖库文件原始控件,这些原始控件在被编译时是需要将其依赖的库文件一起进行编译的。在确定原始控件后,参照该原始控件生成目标控件,此时的目标控件依赖程序文件,依赖程序文件的目标控件在被编译时不用编译库文件。同时,目标控件包含了原始控件的所有信息,可以实现和原始控件一样的功能。因此,编译目标控件与编译原始控件相比,减少了编译库文件的时间。在此基础上,通过脚本和筛选规则在应用中确定需要进行替换的原始控件,可以提高效率,节约开发人员的时间,同时避免人工筛选带来的遗漏等。
实施例三
图3为本发明实施例三提供的一种应用的处理方法的流程图,本发明实施例可适用于将数据包(.class文件)中的依赖程序的目标控件替换为依赖库文件的原始控件的场景。该方法可以由本发明实施例中的应用的处理装置来执行,该装置可采用软件和/或硬件的方式实现,通常配置在编译器中。
参考图3,该方法具体包括:
S301、确定对应用完成编译后获得的数据包。
数据包中的文件为二进制的字节码形式,此时的数据包为class文件。同时,数据包中包括目标控件。
S302、确定所述数据包中的目标控件。
将字节码进行反向编译,以获得应用,在应用中根据目标控件的路径名确定数据包中包括的目标控件。
S303、参照所述目标控件生成原始控件。
一般的,控件包括控件路径名与参数。路径名即表示控件的名字,也表示该从何处对控件进行寻找。当路径指向一库文件时,认为该控件依赖库文件,添加被依赖的库文件。当路径指向一程序文件时,则不作处理。
在一可行的实现方式中,由于根据由于目标控件依赖程序文件,因此需要将目标控件进行处理,以使得在对控件路径名进行查找时,指向库文件。因此参照目标控件生成原始控件。
S304、在所述数据包中使用所述原始控件替换所述目标控件。
在一可行的实现方式中,设定好目标控件中路径名和参数转化为原始控件时的转化规则,当确定目标控件的路径名后,则可以通过脚本语言批量的将目标控转化为原始控件。
本发明实施例通过确定对应用完成编译后获得的数据包;确定数据包包含目标控件,目标控件依赖程序文件;参照目标控件生成原始控件,原始控件依赖库文件;在数据包中使用原始控件替换目标控件。解决了直接使用依赖程序文件的目标控件进行编译,导致的增加了一层只有部分开发人员能解封的封装的问题。使得应用在被打包成为安装包之前,将开发人员设置为目标控件的原始控件替换回来,实现了在编译时控件与依赖库之间的依赖关系被隐藏,提高了编译的速度,节约编译时间的基础上,对非其他开发人员的控件透明的有益效果。
实施例四
图4为本发明实施例四提供的一种应用的处理方法的流程图。本实施例在实施例三的基础上,对参照目标控件生成原始控件进行了详细描述。参考图4,该方法具体包括:
S401、确定对应用完成编译后获得的数据包。
S402、确定目标控件的路径名。
在一可行的实现方式中,通过脚本检测出应用中的依赖库文件的原始控件。由开发人员从中确定需要进行替换的原始控件。
在一可行的实现方式中,可以建立筛选规则,通过筛选规则从原始控件中确定需要进行替换的原始控件。
通过脚本和筛选规则在应用中确定需要进行替换的目标控件,可以提高效率,节约开发人员的时间,同时避免人工筛选带来的遗漏等。
S403、对所述数据包进行反编译,以获得所述应用。
在一可行的实现方式中,可以通过Javassist对数据包进行反向编译,以获得临时的应用。Java字节码以二进制的形式存储在class文件中,每一个class文件包含一个Java类或接口。Javaassist就是一个用来处理Java字节码的类库。在Javassist中,类Javaassit.CtClass表示class文件。一个GtClass(编译时类)对象可以处理一个class文件。
当然,对数据包进行反向编译的方式不限于通过Javassist实现,本实施例在此不做限制,可以按照本领域技术人员的经验来进行。
S404、从所述应用中检测路径名为所述路径名的目标控件,作为目标控件。
设置一插件,在插件中包括目标控件的路径名。在反向编译的过程中。当插件检测到目标控件的路径名时,将其确定为目标控件。
S405、建立一原始控件。
建立一个原始控件,该原始控件包括指向程序文件的路径名、存储原始控件中路径名的第一目标参数和存储原始控件中参数键值对的第二目标参数。为了便于说明。
当然第一目标参数与第二目标参数的构造符合参数的基本形式,即键值对。
S406、将所述第一目标参数的值设置为所述原始控件的路径名。
参考图2B,目标控件包括第一目标参数21。第一目标参数21用于存放原始控件的路径名11。首先构造第一目标参数的键“accName”,用于存放原始控件的路径名,然后将原始空间控件的路径名“com.huya.view.BarrageView”处理为字符串,作为accName的值,即表现为accName=“com.huya.view.BarrageView”。最后加上属性前缀,在本实施例中,属性前缀包括app和Android这两类,属性前缀一般不用主动设置,Android可以默认为,系统中对属性前缀Android已经有事先的定义。而属性前缀app可以通过本领域技术人员的自行定义来实现。
将第一目标参数中的值设置为所述原始控件的路径名,此时原始控件的路径名指向一库文件。
S407、将所述第二目标参数的值设置为所述原始参数的键和值。
参考图2B,目标控件包括第二目标参数22。第二目标参数22用于存放原始控件的参数12。目标控件的参数22可以为分为两类,一类是属性前缀为app的,一类为属性前缀为Android的。属性前缀为Android的第二目标参数设置为原始参数时,保留属性前缀Android,然后直接将目标控件的参数的键作为原始控件参数的键,将目标控件的参数的值作为原始控件参数的值。属性前缀为app的目标控件的第二目标参数设置为原始参数时时,保留属性前缀为app,将自定义的键attr_wrapper及其数字编号删除,将第二目标参数的值(处理为字符串)作为原始控件参数的键值对。
S408、从所述数据包中标记所述目标控件对应的第一字节码。
确定应用中的目标控件,并确定目标控件对应的字节码,将其作为第一字节码。
S409、将所述原始控件编译为第二字节码。
在将目标控件替换为原始控件后,对原始控件进行编译,将编译获得的自字节码作为第二字节码。
S410、使用所述第二字节码替换所述第一换字节码。
在class文件中,将第一字节码替换为第二字节码。这样既在将应用编译为class文件时省去了添加依赖库的时间,又在最终打包之前符合代码规范,减少了后续开发人员对应用进行维护的时间成本。
S411、将所述数据包进行打包,以获得应用软件安装包。
调用dx.bat将所有的class文件转化为classes.dex文件,dx会将class转换为Dalvik字节码,生成常量池,消除冗余数据等。由于dalvik是一种针对嵌入式设备而特殊设计的Java虚拟机,所以dex文件与标准的class文件在结构设计上有着本质的区别,当Java程序编译成class后,使用dx工具将所有的class文件整合到一个dex文件,目的是其中各个类能够共享数据,在一定程度上降低了冗余,同时也是文件结构更加紧凑。
本发明实施例通过确定对应用完成编译后获得的数据包;确定数据包包含目标控件,目标控件依赖程序文件;参照目标控件生成原始控件,原始控件依赖库文件;在数据包中使用原始控件替换目标控件。解决了直接使用依赖程序文件的目标控件进行编译,导致的增加了一层只有部分开发人员能解封的封装的问题。使得应用在被打包成为安装包之前,将开发人员设置为目标控件的原始控件替换回来,实现了在编译时控件与依赖库之间的依赖关系被隐藏,提高了编译的速度,节约编译时间的基础上,对非其他开发人员的控件透明的有益效果。在此基础上,通过脚本和筛选规则在应用中确定需要进行替换的目标控件,可以提高效率,节约开发人员的时间,同时避免人工筛选带来的遗漏等,在此基础上,既在将应用编译为class文件时省去了添加依赖库的时间,又在最终打包之前符合代码规范,减少了后续开发人员对应用进行维护的时间成本。
实施例五
图5为本发明实施例五提供的一种应用的处理装置的结构图,包括:原始控件确定模块、目标控件生成模块和控件替换模块。其中:
原始控件确定模块51,用于在应用中确定原始控件,所述原始控件依赖库文件;
目标控件生成模块52,用于参照所述原始控件生成目标控件,所述目标控件依赖程序文件;
控件替换模块53,用于在应用中使用所述目标控件替换所述原始控件。
本发明实施例首先在应用中确定依赖库文件原始控件,这些原始控件在被编译时是需要将其依赖的库文件一起进行编译的。在确定原始控件后,参照该原始控件生成目标控件,此时的目标控件依赖程序文件,依赖程序文件的目标控件在被编译时不用编译库文件。同时,目标控件包含了原始控件的所有信息,可以实现和原始控件一样的功能。因此,编译目标控件与编译原始控件相比,减少了编译库文件的时间。
在上述实施例的基础上,目标控件生成模块52还包括:
目标控件建立子模块,用于建立一目标控件,所述目标控件包括路径名、第一目标参数、第二目标参数,所述第一目标参数包括值,所述第二目标参数包括值;
路径名设定子模块,用于将所述目标控件的路径名指向程序文件;
第一目标参数设置子模块,用于将所述原始控件的路径名设置为所述第一目标参数的值;
第二目标参数设置子模块,用于将所述原始参数的键和值设置为所述第二目标参数的值。
在上述实施例的基础上,还包括数据包获取模块,用于:
对所述应用进行编译处理,获得数据包。
本实施例提供的一种应用的处理装置可用于执行实施例一、实施例二提供的一种应用的处理方法,具有相应的功能和有益效果。
实施例六
图6为本发明实施例六提供的一种应用的处理装置的结构图,包括:数据包确定模块、目标控件确定模块、原始控件生成模块和控件替换模块。其中:
数据包确定模块61,用于确定对应用完成编译后获得的数据包;
目标控件确定模块62,用于确定所述数据包中的目标控件,所述目标控件依赖程序文件;
原始控件生成模块63,用于参照所述目标控件生成原始控件,所述原始控件依赖库文件;
控件替换模块64,用于在所述数据包中使用所述原始控件替换所述目标控件。
本发明实施例通过确定对应用完成编译后获得的数据包;确定数据包包含目标控件,目标控件依赖程序文件;参照目标控件生成原始控件,原始控件依赖库文件;在数据包中使用原始控件替换目标控件。解决了直接使用依赖程序文件的目标控件进行编译,导致的增加了一层只有部分开发人员能解封的封装的问题。使得应用在被打包成为安装包之前,将开发人员设置为目标控件的原始控件替换回来,实现了在编译时控件与依赖库之间的依赖关系被隐藏,提高了编译的速度,节约编译时间的基础上,对非其他开发人员的控件透明的有益效果。
在上述实施例的基础上,所述目标控件确定模块62还包括:
路径名确定子模块,用于确定目标控件的路径名;
应用获取子模块,用于对所述数据包进行反编译,以获得所述应用;
目标控件确定子模块,用于从所述应用中检测路径名为所述路径名的目标控件,作为目标控件。
在上述实施例的基础上,所述原始控件生成模块63包括:
原始目标控件建立子模块,用于建立一原始目标控件,所述原始控件包括路径名、原始参数;
路径名设置子模块,用于将所述第一目标参数的值设置为所述原始控件的路径名;
原始参数设置子模块,用于将所述第二目标参数的值设置为所述原始参数的键和值。
在上述实施例的基础上,控件替换模块64包括:
第一字节码确定子模块,用于从所述数据包中标记所述目标控件对应的第一字节码;
第二字节码编译子模块,用于将所述原始控件编译为第二字节码;
字节码替换子模块,用于使用所述第二字节码替换所述第一换字节码。
在上述实施例的基础上,还包括安装包获取模块,用于:
将所述数据包进行打包,以获得应用软件安装包。
本实施例提供的一种应用的处理装置可用于执行实施例三、实施例四提供的一种应用的处理方法,具有相应的功能和有益效果。
实施例七
图7为本发明实施例七提供的一种电子设备的结构示意图。如图7所示,该电子设备包括处理器70、存储器71、通信模块72、输入装置73和输出装置74;电子设备中处理器70的数量可以是一个或多个,图7中以一个处理器70为例;电子设备中的处理器70、存储器71、通信模块72、输入装置73和输出装置74可以通过总线或其他方式连接,图7中以通过总线连接为例。
存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本实施例中的一种应用的处理方法对应的模块(例如,一种应用的处理装置中的原始控件确定模块51、目标控件生成模块52和控件替换模块53);如本实施例中的一种应用的处理方法对应的模块(例如,一种应用的处理装置中的数据包确定模块61、目标控件确定模块62、原始控件生成模块63和控件替换模块64)。处理器70通过运行存储在存储器71中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的一种应用的处理方法。
存储器71可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器71可进一步包括相对于处理器70远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信模块72,用于与显示屏建立连接,并实现与显示屏的数据交互。输入装置73可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。
本实施例提供的一种电子设备,可执行本发明任一实施例提供的应用的处理方法,具体相应的功能和有益效果。
实施例八
本发明实施例八还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种应用的处理方法,该方法包括:
在应用中确定原始控件,所述原始控件依赖库文件;
参照所述原始控件生成目标控件,所述目标控件依赖程序文件;
在应用中使用所述目标控件替换所述原始控件。
或者,
确定对应用完成编译后获得的数据包;
确定所述数据包中的目标控件,所述目标控件依赖程序文件;
参照所述目标控件生成原始控件,所述原始控件依赖库文件;
在所述数据包中使用所述原始控件替换所述目标控件。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任一实施例所提供的应用的处理方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机电子设备(可以是个人计算机,服务器,或者网络电子设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述应用的处理装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (12)

1.一种应用的处理方法,其特征在于,包括:
在应用中确定原始控件,所述原始控件依赖库文件,在编译时确定所述原始控件的依赖对象,若所述依赖对象为所述库文件时,加载所述库文件,以完成对所述原始控件的编译;
参照所述原始控件生成目标控件,所述目标控件依赖程序文件,在编译时确定所述目标控件的依赖对象,若依赖对象为所述程序文件时,完成对所述目标控件的编译;
在应用中使用所述目标控件替换所述原始控件,所述原始控件与所述目标控件在编译后实现相同功能。
2.根据权利要求1所述的方法,其特征在于,所述原始控件包括路径名和原始参数,所述原始控件的路径名指向库文件,所述原始参数包括键和值;
所述参照所述原始控件生成目标控件,包括:
建立一目标控件,所述目标控件包括路径名、第一目标参数、第二目标参数,所述第一目标参数包括值,所述第二目标参数包括值;
将所述目标控件的路径名指向程序文件;
将所述原始控件的路径名设置为所述第一目标参数的值;
将所述原始参数的键和值设置为所述第二目标参数的值。
3.根据权利要求1或2所述的方法,其特征在于,所述在应用中使用所述目标控件替换所述原始控件之后,还包括:
对所述应用进行编译处理,获得数据包。
4.一种应用的处理方法,其特征在于,包括:
确定对应用完成编译后获得的数据包;
确定所述数据包中的目标控件,所述目标控件依赖程序文件;
参照所述目标控件生成原始控件,所述原始控件依赖库文件;
在所述数据包中使用所述原始控件替换所述目标控件。
5.根据权利要求4所述的方法,其特征在于,所述确定所述数据包中的目标控件,包括:
确定目标控件的路径名;
对所述数据包进行反编译,以获得所述应用;
从所述应用中检测路径名为所述路径名的目标控件,作为目标控件。
6.根据权利要求4所述的方法,其特征在于,确定所述目标控件包括的路径名、第一目标参数、第二目标参数,所述第一目标参数包括预设的键,所述第二目标参数包括预设的键;
所述参照所述目标控件生成原始控件,包括:
建立一原始目标控件,所述原始控件包括路径名、原始参数;
将所述第一目标参数的值设置为所述原始控件的路径名;
将所述第二目标参数的值设置为所述原始参数的键和值。
7.根据权利要求4所述的方法,其特征在于,所述在所述数据包中使用所述原始控件替换所述目标控件,包括:
从所述数据包中标记所述目标控件对应的第一字节码;
将所述原始控件编译为第二字节码;
使用所述第二字节码替换所述第一换字节码。
8.根据权利要求4-7任一项所述的方法,其特征在于,在所述数据包中使用所述原始控件替换所述目标控件之后,还包括:
将所述数据包进行打包,以获得应用软件安装包。
9.一种应用的处理装置,其特征在于,包括:
原始控件确定模块,用于在应用中确定原始控件,所述原始控件依赖库文件;
目标控件生成模块,用于参照所述原始控件生成目标控件,所述目标控件依赖程序文件;
控件替换模块,用于在应用中使用所述目标控件替换所述原始控件。
10.一种应用的处理装置,其特征在于,包括:
数据包确定模块,用于确定对应用完成编译后获得的数据包;
目标控件确定模块,用于确定所述数据包中的目标控件,所述目标控件依赖程序文件;
原始控件生成模块,用于参照所述目标控件生成原始控件,所述原始控件依赖库文件;
控件替换模块,用于在所述数据包中使用所述原始控件替换所述目标控件。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8任一所述的一种应用的处理方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8任一所述的一种应用的处理方法。
CN201910615185.XA 2019-07-09 2019-07-09 一种应用的处理方法、装置、设备和介质 Active CN110333872B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910615185.XA CN110333872B (zh) 2019-07-09 2019-07-09 一种应用的处理方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910615185.XA CN110333872B (zh) 2019-07-09 2019-07-09 一种应用的处理方法、装置、设备和介质

Publications (2)

Publication Number Publication Date
CN110333872A true CN110333872A (zh) 2019-10-15
CN110333872B CN110333872B (zh) 2023-06-16

Family

ID=68144816

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910615185.XA Active CN110333872B (zh) 2019-07-09 2019-07-09 一种应用的处理方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN110333872B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990020A (zh) * 2019-11-24 2020-04-10 苏州浪潮智能科技有限公司 一种软件编译方法、装置及电子设备和存储介质
CN111736841A (zh) * 2020-05-25 2020-10-02 广东职业技术学院 一种基于移动互联网的应用集成开发方法及系统
CN112463123A (zh) * 2020-11-25 2021-03-09 北京字跳网络技术有限公司 任务编译方法、装置、网络节点、系统及存储介质
CN114138281A (zh) * 2021-12-08 2022-03-04 京东科技控股股份有限公司 软件工程的编译方法、装置、设备及介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956513A (en) * 1997-08-07 1999-09-21 Mci Communications Corporation System and method for automated software build control
US20080072211A1 (en) * 2006-09-20 2008-03-20 Rothman Michael A Method and system for firmware image size reduction
US20120304160A1 (en) * 2011-05-27 2012-11-29 Ridgeway Internet Security, Llc Systems and Methods for Run-Time Interception of Software Methods
CN104866369A (zh) * 2015-05-22 2015-08-26 广州华多网络科技有限公司 一种数据处理的方法以及装置
CN106843995A (zh) * 2017-01-25 2017-06-13 杭州迪普科技股份有限公司 一种文件编译方法及装置
CN107783765A (zh) * 2017-10-17 2018-03-09 杭州迪普科技股份有限公司 文件编译方法和装置
CN109067713A (zh) * 2018-07-17 2018-12-21 北京元心科技有限公司 软件安全防护方法、装置、电子设备及计算机存储介质
CN109799971A (zh) * 2018-12-07 2019-05-24 陕西法士特齿轮有限责任公司 一种文件生成装置和方法
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN109960510A (zh) * 2019-03-20 2019-07-02 北京智游网安科技有限公司 Android应用动态链接库的加固方法及相关设备

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956513A (en) * 1997-08-07 1999-09-21 Mci Communications Corporation System and method for automated software build control
US20080072211A1 (en) * 2006-09-20 2008-03-20 Rothman Michael A Method and system for firmware image size reduction
US20120304160A1 (en) * 2011-05-27 2012-11-29 Ridgeway Internet Security, Llc Systems and Methods for Run-Time Interception of Software Methods
CN104866369A (zh) * 2015-05-22 2015-08-26 广州华多网络科技有限公司 一种数据处理的方法以及装置
CN106843995A (zh) * 2017-01-25 2017-06-13 杭州迪普科技股份有限公司 一种文件编译方法及装置
CN107783765A (zh) * 2017-10-17 2018-03-09 杭州迪普科技股份有限公司 文件编译方法和装置
CN109067713A (zh) * 2018-07-17 2018-12-21 北京元心科技有限公司 软件安全防护方法、装置、电子设备及计算机存储介质
CN109799971A (zh) * 2018-12-07 2019-05-24 陕西法士特齿轮有限责任公司 一种文件生成装置和方法
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN109960510A (zh) * 2019-03-20 2019-07-02 北京智游网安科技有限公司 Android应用动态链接库的加固方法及相关设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
DOMINIK WABERSICH ET AL.: "Extending JAGS: A tutorial on adding custom distributions to JAGS (with a diffusion model example)", 《BEHAVIOR RESEARCH METHODS》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990020A (zh) * 2019-11-24 2020-04-10 苏州浪潮智能科技有限公司 一种软件编译方法、装置及电子设备和存储介质
CN111736841A (zh) * 2020-05-25 2020-10-02 广东职业技术学院 一种基于移动互联网的应用集成开发方法及系统
CN111736841B (zh) * 2020-05-25 2023-07-04 广东职业技术学院 一种基于移动互联网的应用集成开发方法及系统
CN112463123A (zh) * 2020-11-25 2021-03-09 北京字跳网络技术有限公司 任务编译方法、装置、网络节点、系统及存储介质
CN114138281A (zh) * 2021-12-08 2022-03-04 京东科技控股股份有限公司 软件工程的编译方法、装置、设备及介质

Also Published As

Publication number Publication date
CN110333872B (zh) 2023-06-16

Similar Documents

Publication Publication Date Title
CN110162296B (zh) 应用程序编程接口文档的生成方法、装置及终端设备
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
CN106775723B (zh) 基于Android平台的系统固件定制的方法和Android设备
CN106605212B (zh) 在动态链接的运行时环境中的模块化共同版本管理
CN110333872B (zh) 一种应用的处理方法、装置、设备和介质
CN111176717B (zh) 生成安装包的方法、装置及电子设备
CN110059456B (zh) 代码保护方法、代码保护装置、存储介质与电子设备
CN106960140A (zh) 虚拟机指令的混淆方法及装置、虚拟机保护系统
CN111985055A (zh) 一种模型封装方法、装置及电子设备
CN112612502A (zh) 补丁生成方法、装置、设备及存储介质
CN105068851A (zh) 一种移动终端rom包的安全打包方法、系统及移动终端
CN116755713A (zh) 应用程序的生成方法、装置、设备及存储介质
CN116414774A (zh) 文件迁移方法、装置、设备及存储介质
CN105447040A (zh) 二进制文件管理、更新方法、装置以及系统
CN111090425A (zh) 一种程序封装方法、装置及电子设备
CN105005497A (zh) 一种Java卡虚拟机中本地函数的调用方法及装置
CN111552480B (zh) 跨平台编译方法、装置、设备及可读存储介质
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN110941443A (zh) 修改sdk中文件名的方法、装置及电子设备
CN111399842A (zh) 一种代码编译方法及装置
CN111352631A (zh) 一种接口兼容性检测方法及装置
CN114860204A (zh) 程序处理、运行方法、装置、终端、智能卡及存储介质
CN111273940B (zh) 将程序文件上传至代码仓库的方法及装置
CN108345461B (zh) 应用更新方法和装置以及计算机可读存储介质
CN113220314A (zh) App资源加载及apk生成方法、装置、设备及介质

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