CN108121563B - 应用功能定制方法、装置、计算设备以及存储介质 - Google Patents
应用功能定制方法、装置、计算设备以及存储介质 Download PDFInfo
- Publication number
- CN108121563B CN108121563B CN201711107772.5A CN201711107772A CN108121563B CN 108121563 B CN108121563 B CN 108121563B CN 201711107772 A CN201711107772 A CN 201711107772A CN 108121563 B CN108121563 B CN 108121563B
- Authority
- CN
- China
- Prior art keywords
- function
- customized
- component
- target application
- application
- 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/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种应用功能定制方法、装置、计算设备以及存储介质。根据期望为目标应用配置的定制功能,从功能实现组件库中选取与定制功能对应的功能实现组件。在使用预设的构建工具构建目标应用的软件安装包的过程中,注入功能实现组件,以使得构建后的软件安装包具备定制功能。由此,可以在构建目标应用的软件安装包的过程中,动态地注入期望为目标应用配置的定制功能,从而可以在不改变现有的打包逻辑的基础上,满足个性化的功能定制需求。
Description
技术领域
本发明涉及应用开发领域,特别是涉及一种应用功能定制方法、装置、计算设备以及存储介质。
背景技术
随着移动互联网的迅速发展,应用功能定制化是一个越来越重要的需求。例如,应用发行渠道多种多样,同一个应用需要针对不同的渠道有不同的定制功能,比如是否开启广告等。再例如,应用在开发测试阶段往往需要集成一些第三方的工具包来辅助开发和调试,而这些第三方的工具包是不属于产品本身的功能、不能也不应该集成到最终的发布包,因此有在发布包中清除调试功能代码的需求。
针对这种应用功能定制化的需求,业界一般有如下两种方案。
1.通过自带的构建工具例如gradle实现对APK包的功能定制化。简单来说它们具有针对开发生命周期的不同阶段进行配置、为不同的产品渠道定义使用不同的代码和资源,同时对所有应用版本共有的部分加以共享和重复利用的能力。使用gradle构建工具可以在一定程度上实现功能定制化需求。但是这需要预定义配置各种功能组合,并将配置信息写在源码中,不能动态地为应用定制个性化的功能。
2.另一种方案是mock API。这种方案主要针对开发阶段的辅助工具包。由于辅助功能不能发布到正式包中,所以实现方案是打正式包和测试包分别引用不同的jar,测试包引用的jar具有真正的逻辑代码,正式包引用的jar具有相同的接口,但接口函数是空的,没有任何实现(Leakcanary工具提供这种方式的集成)。通过这种方式在不需要修改源码前提下,可以把辅助功能从正式包中移除。但是这种方案一方面只适用于有限的场景、不够灵活,另一方面需要明确在源码中调用辅助功能jar中的类和方法,如果打包出错,很容易把不该发布的功能泄露到线上,并且造成源代码的污染。
由此,需要一种新的应用功能定制方案,以更好地满足应用的功能定制化需求。
发明内容
本发明的目的在于提供一种能够更好地满足应用的功能定制化需求的应用功能定制方案。
根据本发明的一个方面,提供了一种应用功能定制方法,包括:根据期望为目标应用配置的定制功能,从功能实现组件库中选取与定制功能对应的功能实现组件;在使用预设的构建工具构建目标应用的软件安装包的过程中,注入功能实现组件,以使得构建后的软件安装包具备定制功能。
由此,可以在构建目标应用的软件安装包的过程中,动态地注入期望为目标应用配置的定制功能,从而可以在不改变现有的打包逻辑的基础上,满足个性化的功能定制需求。
优选地,从功能实现组件库中选取与定制功能对应的功能实现组件的步骤包括:根据期望为目标应用配置的定制功能,使用预定的语言对实现定制功能所依赖的功能实现组件进行声明,以实现功能实现组件的选取。
由此,可以实现对定制功能所对应的功能实现组件的动态引用。
优选地,该应用功能定制方法还可以包括:从功能配置文件中读取功能配置信息,以确定需要为目标应用配置的定制功能。
由此,可以通过修改功能配置文件中的功能配置信息,为目标应用配置不同的功能。
优选地,注入功能实现组件的步骤可以包括:根据功能实现组件实现时的依赖逻辑,确定功能实现组件的功能注入点;将功能实现组件的初始化代码插入功能注入点,以使得功能实现组件能够被正常调用。
由此,可以实现功能实现组件的动态注入,从而满足应用的定制化需求。
优选地,预设的构建工具为Gradle,将初始化代码插入功能注入点的步骤可以包括:在使用Gradle对目标应用的源文件进行编译以得到类文件后,利用预设的字节码处理工具将功能实现组件的初始化代码插入其所属的类文件中。
由此,可以借助javassist等字节码处理工具的字节码处理功能,使得在不改变现有的打包流程的基础上,实现功能实现组件的动态注入。
根据本发明的另一个方面,还提供了一种应用功能定制装置,包括:组件选取模块,用于根据期望为目标应用配置的定制功能,从功能实现组件库中选取与定制功能对应的功能实现组件;组件注入模块,用于在使用预设的构建工具构建目标应用的软件安装包的过程中,注入功能实现组件,以使得构建后的软件安装包具备定制功能。
优选地,组件选取模块根据期望为目标应用配置的定制功能,使用预定的语言对实现定制功能所依赖的功能实现组件进行声明,以实现功能实现组件的选取。
优选地,该应用功能定制装置还可以包括:读取模块,用于从功能配置文件中读取功能配置信息,以确定需要为目标应用配置的定制功能。
优选地,组件注入模块根据功能实现组件实现时的依赖逻辑,确定功能实现组件的功能注入点,并将功能实现组件的初始化代码插入功能注入点,以使得功能实现组件能够被正常调用。
优选地,预设的构建工具为Gradle,组件注入模块在使用Gradle对目标应用的源文件进行编译以得到类文件后,利用预设的字节码处理工具将功能实现组件的初始化代码插入其所属的类文件中。
根据本发明的另一个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行上文述及的方法。
根据本发明的另一个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行上文述及的方法。
综上,本发明的应用功能定制方法、装置、计算设备以及存储介质,可以在构建目标应用的软件安装包的过程中,动态地注入期望为目标应用配置的定制功能,从而可以在不改变现有的打包逻辑的基础上,满足个性化的功能定制需求。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1是示出了根据本发明一实施例的计算设备的结构的示意性方框图。
图2是示出了根据本发明一实施例的应用功能定制方法的示意性流程图。
图3是示出了利用本发明的打包构建流程示意图。
图4是示出了根据本发明一实施例的应用功能定制装置的结构的示意性方框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
为了更好地满足应用的功能定制化需求,本发明提出了一种应用功能定制方案。本发明的应用功能定制方案可以在应用的打包构建过程中,动态地注入用于实现特定功能的功能实现组件,从而可以在不影响应用的正常打包流程基础上,实现应用功能的个性化定制需求。
本发明实施例所提供的应用功能定制方案可应用于如图1所示的计算设备。图1是示出了根据本发明一个实施例的计算设备100的结构的示意性方框图。其中,计算设备100可以是可以实施为各种类型的计算机装置,例如台式机、便携式计算机、平板电脑、智能手机、个人数据助理(PDA),或者其他类型的计算机装置,但是不限于任何特定形式。
如图1所示,本发明的计算设备100可以包括处理器110以及存储器120。处理器110可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器110可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器110可以使用定制的电路实现,例如特定用途集成电路(application specific integrated circuit,ASIC)或者现场可编程逻辑门阵列(field programmable gate arrays,FPGA)。
存储器120可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器110或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器120可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器120可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
在本发明实施例中,存储器120上存储有可执行代码,处理器110可以执行存储在存储器120上的可执行代码。当可执行代码被处理器110执行时,可以使处理器110执行本发明的应用功能定制方案,以为目标应用配置预定的定制功能。
图2是示出了根据本发明一实施例的应用功能定制方法的示意性流程图。其中,图2所示的方法可以由图1中的处理器110执行。
参见图2,在步骤S210,根据期望为目标应用配置的定制功能,从功能实现组件库中选取与定制功能对应的功能实现组件。
期望为目标应用配置的定制功能可以预先写入功能配置文件中,如此可以从功能配置文件中读取功能配置信息,以确定需要为目标应用配置的定制功能。其中,功能配置文件中可以仅存储针对目标应用配置的定制功能,也可以存储多个可选择的定制功能。在功能配置文件中存储多个可选择的定制功能的情况下,可以使用键值对(key-value)的形式存储多个定制功能的开关信息。其中,key可以表示定制功能,value可以表示定制功能的开关信息。Value的值可以是0、1、2等正整数类型。例如,可以是0表示定制功能开启,需要为目标应用配置该定制功能,1表示定制功能关闭,不需要为目标应用配置该定制功能。如此,可以通过修改功能配置文件中定制功能的开关状态,动态地为目标应用配置相应的定制功能。
功能实现组件库中可以存储有多个用于实现不同预定功能的功能实现组件。其中,功能实现组件库中的功能实现组件可以是预先设计好的,也可以是根据期望为目标应用配置的定制功能实时设计的。本发明述及的功能实现组件可以是用于实现相应功能的jar包,其中,jar包的设计原则应是与应用解耦、易于集成。
为了使得在构建目标应用的软件安装包的过程中,方便地实现对功能实现组件的选取,可以根据期望为目标应用配置的定制功能,使用预定的语言(如Groovy提供的语言)对实现定制功能所依赖的功能实现组件进行声明。此处述及的声明操作主要是声明实现定制功能所依赖的功能实现组件及其引用路径。例如,可以声明某一定制功能所依赖的功能实现组件所在的组件库、功能实现组件的名称、版本号等信息。其中,针对一个定制功能,可以声明用于实现该定制功能的一个或多个功能实现组件。如此根据声明的内容就可以方便地选取相应的功能实现组件。
作为本发明的一个示例,从功能配置文件中读取功能配置信息的过程可以利用groovy语言实现,即可以利用groovy语言对功能配置文件做开关判断,以确定那些定制功能被打开,并通过对实现定制功能所依赖的功能实现组件的声明,实现功能实现组件的选取。由此,可以根据功能配置文件,实现功能实现组件的动态选取。因此,可以通过修改功能配置文件中的功能开关信息,实现应用的个性化定制需求。
为了不影响现有的构建流程,在选取功能实现组件后,可以执行步骤S220,在使用预设的构建工具构建目标应用的软件安装包的过程中,注入功能实现组件,以使得构建后的软件安装包具备定制功能。
此处述及的注入功能实现组件的操作,目的是使得在构建目标应用的软件安装包的过程中,可以实现对所注入的功能实现组件的调用,从而使得构建后的软件安装包具备预期的定制功能。
为了实现功能实现组件的注入,可以根据功能实现组件实现时的依赖逻辑,确定功能实现组件的功能注入点,然后将功能实现组件的初始化代码插入功能注入点,以使得功能实现组件能够被正常调用。其中,功能实现组件实现时的依赖逻辑是指功能组件实现时所依赖的其它组件或实现条件。在功能实现组件的实现没有外部依赖关系时,其功能注入点的设置比较灵活,例如可以将活动的开始点设置为功能注入点。在功能实现组件的实现具有外部依赖关系时,可以根据具体的依赖逻辑,设置一个或多个功能注入点。其中,功能实现组件的初始化代码用于对功能实现组件进行初始化,以使得功能实现组件能够被正常调用。初始化代码的具体实现逻辑可以根据功能实现组件实现时的依赖逻辑预先设定。
至此结合图1详细说明了本发明的应用定制方法的实现流程。本发明的应用定制方法可以使得在构建目标应用的软件安装包的过程中,不改变现有的打包流程,动态地为目标应用配置特定的定制功能。
下面以使用Gradle构建工具对Android应用进行打包时,本发明的应用定制方法的具体实现流程做进一步说明。图3是示出了将本发明应用于打包过程中的示意性流程图。
如图3所示,在利用Gradle构建工具构建Android应用的软件安装包(APK文件)的过程中,为了在不影响现有的打包流程的基础上,可以为目标应用配置个性化的定制功能。主要包括功能配置文件、功能实现组件、功能注入点等部分,下面分别进行描述。
1、功能配置文件
如上文所述,功能配置文件中可以记录有需要配置的定制功能,也可以记录有所有的定制功能的开关信息,根据记录的开关信息可以确定需要打开的定制功能,即需要为目标应用配置的定制功能。
在本实施例中,功能配置文件可以是标准的以key-value方式存储的Javaproperty文件。可以使用gradle默认提供的gradle.properties文件,也可以将所有功能开关提取到一个独立的配置文件,在build.gradle中导入,功能开关的取值value可以为0,1,2等正整数类型。
优选地,功能配置文件中可以记录所有可供配置的定制功能,如此可以通过更改定制功能的功能开关取值value,动态地修改需要为目标应用配置的定制功能。
2、功能实现组件
实现相应功能的Jar包,功能jar包设计的基本原则就是与主APP解耦、易于集成(简化注册和初始化),这是与Android组件化开发的思想是一致的。如果集成的是第三方工具包,可以考虑实现对应的适配类以简化功能组件的注册与初始化。
3、功能注入点
功能注入点即功能组件的初始化点,通过字节码操作功能注入注册初始化代码的地方。对于简单功能组件的注册初始化,无需编写注入接口,可以直接在Application或Activity生命周期的onCreate方法的末尾插入。而对于注册初始化逻辑复杂或者需要在多处注册初始化的功能实现组件,可以编写空的注入接口函数,函数的实现逻辑可以在Gradle构建时动态注入。
动态注入功能实现组件的过程如下。
首先可以执行步骤S310,从功能配置文件中读取配置信息,确定哪些功能被打开。由此,在使用Gradle工具进行打包构建的过程中,Gradle构建脚本可以根据功能配置文件中的开关配置信息动态引用功能实现组件(步骤S320)。动态引用的实现可以借助于groovy语言。具体可以在dependencies(依赖)块用groovy语言做开关判断,确定哪些功能被打开,并打开实现相应功能所依赖的功能实现组件的引用。例如,可以用groovy语言对功能配置文件做开关判断,以确定哪些功能被打开。并且,在每个判断语句下可以对实现该功能所依赖的功能实现组件进行声明,以确定功能实现组件的名称、引用路径、版本号等属性信息,如此在判断某功能被打开时,可以直接根据所声明的内容引用相应的功能实现组件。
在实现功能实现组件的引用后,可以借助字节码操作工具如javassist的Java字节码操作能力实现功能实现组件的动态注入。具体地,在Gradle编译完Java源文件生成class文件之后,进行下一步操作之前,可以往功能实现组件的功能注入点所属的class中注入功能实现组件的初始化代码(步骤S330),如此可以使得功能实现组件能够被正常调用,即可以实现为目标应用配置相应的定制功能。其中,功能实现组件的初始化应该力求简单、通过几行代码完成注册和初始化。此处并未制定具体的规范,以求更大的灵活性,如果功能实现组件的注册初始化过于复杂,可以编写适配类。
至此,就动态注入功能实现组件的过程做了详细说明。根据上文可知,本发明借助groovy语言可以实现功能实现组件的动态选取,借助javassist的字节码操作能力,可以在不破坏现有的打包流程的基础上,实现功能实现组件的无痕注入。综上,本发明的应用功能定制方法至少具有如下优点:
1.架构简单、无缝集成。
不需要对现有Android打包流程做破坏性改变,可以在构建时动态的决定注入如些功能。集成和接入成本较低。
2.方便开发调试。
开发在源码开发阶段,往往需要集成一些第三方工具来辅助调试(如比Leakcanary工具,用于监控内存泄露问题)。典型的做法是在源码中加入一些开启这些功能的调试代码,最终发布时再把调试代码注释掉。这种方式不仅污染了源代码,而且很容易出现人为错误(比较提交时忘了注释调试代码),从而泄露到正式包中。通过本专利提案的方法可以用效避免这些问题,通过一键开关切换,方便开发集成第三方面辅助调试工具。
3.避免动态正式包的代码污染。
在Android源码开发阶段,往往需要集成一些第三方的工具来辅助开发或者测试,而这些工具(插件)是不属于产品的功能、不能也不应该出现在正式包中。没有开关式的动态功能注入方案,极容易把开发调试阶段的辅助代码泄露到正式包中,不仅污染了代码,也更多的占用了apk包的体积。我们都知道android应用有方法数65K的限制,应该极力避免引用与实际功能不相关的第三方库和方法。通过本专利提案中所述的方法,可以较好的解决正式包代码污染问题。
4.打包发布高度可定制化。
Android移动应用的发布渠道多种多样,定制化打包是基本的需求(比如有的渠道是有广告渠道、有的渠道是无广告)。通过本专利提案所述的开关式动态功能注入方案,可以把产品的功能分解为若干的子功能,以开关方式动态控制哪些子功能集成进发布包中,这样可以实现高度的定制化与灵活性。
图4是示出了根据本发明一实施例的应用功能定制装置的结构的示意性方框图。其中,应用功能定制装置400的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图4所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
下面仅就应用功能定制装置400可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。
参见图4,应用功能定制装置400包括组件选取模块410和组件注入模块420。
组件选取模块410用于根据期望为目标应用配置的定制功能,从功能实现组件库中选取与定制功能对应的功能实现组件。其中,组件选取模块410可以根据期望为目标应用配置的定制功能,使用预定的语言对实现定制功能所依赖的功能实现组件进行声明,以实现功能实现组件的选取。
组件注入模块420用于在使用预设的构建工具构建目标应用的软件安装包的过程中,注入功能实现组件,以使得构建后的软件安装包具备定制功能。
组件注入模块420可以根据功能实现组件实现时的依赖逻辑,确定功能实现组件的功能注入点,并将功能实现组件的初始化代码插入功能注入点,以使得功能实现组件能够被正常调用。例如,预设的构建工具可以为Gradle,组件注入模块420可以在使用Gradle对目标应用的源文件进行编译以得到类文件后,利用预设的字节码处理工具将功能实现组件的初始化代码插入其所属的类文件中。
如图4所示,应用功能定制装置400还可以可选地包括图中虚线框所示的读取模块430。读取模块430用于从功能配置文件中读取功能配置信息,以确定需要为目标应用配置的定制功能。
上文中已经参考附图详细描述了根据本发明的应用功能定制方法、装置以及计算设备。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (8)
1.一种应用功能定制方法,包括:
从功能配置文件中读取功能配置信息,以确定需要为目标应用配置的定制功能,所述功能配置文件中记录多个可供配置的定制功能,所述功能配置文件中使用键值对形式存储所述定制功能的开关信息,其中,键值对中的键表示定制功能,键值对中的值表示定制功能的开启或关闭;
根据期望为所述目标应用配置的定制功能,从功能实现组件库中选取与所述定制功能对应的功能实现组件,所述功能实现组件库中存储有多个用于实现不同预定功能的功能实现组件;
根据所述功能实现组件实现时的依赖逻辑,确定所述功能实现组件的功能注入点;
在使用预设的构建工具构建目标应用的软件安装包的过程中,将所述功能实现组件的初始化代码插入所述功能注入点,以使得构建后的软件安装包具备所述定制功能。
2.根据权利要求1所述的应用功能定制方法,其中,从功能实现组件库中选取与所述定制功能对应的功能实现组件的步骤包括:
根据期望为目标应用配置的定制功能,使用预定的语言对实现所述定制功能所依赖的功能实现组件进行声明,以实现所述功能实现组件的选取。
3.根据权利要求1所述的应用功能定制方法,其中,所述预设的构建工具为Gradle,所述将初始化代码插入所述功能注入点的步骤包括:
在使用Gradle对所述目标应用的源文件进行编译以得到类文件后,利用预设的字节码处理工具将所述功能实现组件的初始化代码插入其所属的类文件中。
4.一种应用功能定制装置,包括:
读取模块,用于从功能配置文件中读取功能配置信息,以确定需要为目标应用配置的定制功能,所述功能配置文件中记录多个可供配置的定制功能,所述功能配置文件中使用键值对形式存储所述定制功能的开关信息,其中,键值对中的键表示定制功能,键值对中的值表示定制功能的开启或关闭;
组件选取模块,用于根据期望为所述目标应用配置的定制功能,从功能实现组件库中选取与所述定制功能对应的功能实现组件,所述功能实现组件库中存储有多个用于实现不同预定功能的功能实现组件;
组件注入模块,用于根据所述功能实现组件的实现逻辑,确定所述功能实现组件的功能注入点,并在使用预设的构建工具构建目标应用的软件安装包的过程中,将所述功能实现组件的初始化代码插入所述功能注入点,以使得构建后的软件安装包具备所述定制功能。
5.根据权利要求4所述的应用功能定制装置,其中,所述组件选取模块根据期望为目标应用配置的定制功能,使用预定的语言对实现所述定制功能所依赖的功能实现组件进行声明,以实现所述功能实现组件的选取。
6.根据权利要求4所述的应用功能定制装置,其中,所述预设的构建工具为Gradle,所述组件注入模块在使用Gradle对所述目标应用的源文件进行编译以得到类文件后,利用预设的字节码处理工具将所述功能实现组件的初始化代码插入其所属的类文件中。
7.一种计算设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1-3中任何一项所述的方法。
8.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至3中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711107772.5A CN108121563B (zh) | 2017-11-10 | 2017-11-10 | 应用功能定制方法、装置、计算设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711107772.5A CN108121563B (zh) | 2017-11-10 | 2017-11-10 | 应用功能定制方法、装置、计算设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108121563A CN108121563A (zh) | 2018-06-05 |
CN108121563B true CN108121563B (zh) | 2021-02-05 |
Family
ID=62228362
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711107772.5A Active CN108121563B (zh) | 2017-11-10 | 2017-11-10 | 应用功能定制方法、装置、计算设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108121563B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108829406B (zh) * | 2018-06-13 | 2022-10-14 | 珠海豹趣科技有限公司 | 安装包打包方法、装置、电子设备及存储介质 |
CN109101240A (zh) * | 2018-06-25 | 2018-12-28 | 北京小米移动软件有限公司 | 打包方法、装置和存储介质 |
CN109376072B (zh) * | 2018-09-10 | 2022-05-17 | 百度在线网络技术(北京)有限公司 | 基于第三方组件库的应用程序开发方法和装置 |
CN109614161A (zh) * | 2018-10-15 | 2019-04-12 | 平安科技(深圳)有限公司 | 功能开关状态切换方法、装置、介质和计算机设备 |
US11301223B2 (en) * | 2019-08-19 | 2022-04-12 | International Business Machines Corporation | Artificial intelligence enabled function logic infusion |
CN111026376B (zh) * | 2019-11-11 | 2023-09-29 | 贝壳技术有限公司 | 函数配置方法、装置、存储介质及电子设备 |
CN110928548B (zh) * | 2019-11-14 | 2023-08-22 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种数据处理方法以及设备 |
CN111338686A (zh) * | 2020-02-12 | 2020-06-26 | 中国平安人寿保险股份有限公司 | 一种软件构建方法、设备、服务器及可读存储介质 |
CN113703800A (zh) * | 2020-05-21 | 2021-11-26 | 中兴通讯股份有限公司 | 功能远程定制方法、装置、设备和存储介质 |
CN112068877A (zh) * | 2020-08-14 | 2020-12-11 | 深圳市卓智荟教育科技有限公司 | 教育数字化应用的配置方法、装置和可读存储介质 |
CN113032037B (zh) * | 2021-02-19 | 2023-03-10 | 视若飞信息科技(上海)有限公司 | 一种动态配置chromium功能模块的方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502715A (zh) * | 2016-09-19 | 2017-03-15 | 乐视控股(北京)有限公司 | 一种应用程序多渠道配置方法及装置 |
CN106951224A (zh) * | 2017-02-13 | 2017-07-14 | 深信服科技股份有限公司 | 应用程序封装方法及装置 |
CN107305495A (zh) * | 2016-04-19 | 2017-10-31 | 华为技术有限公司 | 实现软件安装包功能修改的方法及终端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630824A (zh) * | 2014-11-04 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 网络资源生成方法及装置 |
-
2017
- 2017-11-10 CN CN201711107772.5A patent/CN108121563B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107305495A (zh) * | 2016-04-19 | 2017-10-31 | 华为技术有限公司 | 实现软件安装包功能修改的方法及终端 |
CN106502715A (zh) * | 2016-09-19 | 2017-03-15 | 乐视控股(北京)有限公司 | 一种应用程序多渠道配置方法及装置 |
CN106951224A (zh) * | 2017-02-13 | 2017-07-14 | 深信服科技股份有限公司 | 应用程序封装方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108121563A (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108121563B (zh) | 应用功能定制方法、装置、计算设备以及存储介质 | |
US10908925B2 (en) | Dynamic loading method, and target file creation method and apparatus | |
CN107710150B (zh) | 从包含层次子例程信息的中间代码产生目标代码 | |
US10353717B2 (en) | Build-time memory management for multi-core embedded system | |
US20060064576A1 (en) | Boot systems and methods | |
US8615735B2 (en) | System and method for blurring instructions and data via binary obfuscation | |
US20060190933A1 (en) | Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework | |
CN105094878A (zh) | 一种集成系统库文件的方法和装置 | |
GB2552974A (en) | String logging in an embedded system | |
GB2580830A (en) | Data verification device, data verification method, and data verification program | |
JP6133409B2 (ja) | プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置 | |
CN111124373A (zh) | 一种测试软件开发方法、装置及测试设备 | |
JP2012208923A (ja) | アプリケーション実行方法及び実行装置 | |
CN117009252B (zh) | 一种基于函数替换的故障注入测试方法及装置 | |
CN110765008B (zh) | 一种数据处理方法及装置 | |
TWI501152B (zh) | 用於簡化具有動態程式庫的介面之方法 | |
WO2022184112A1 (zh) | 安卓系统的应用调试方法、装置、程序、介质及电子设备 | |
US9117023B2 (en) | Dynamic generation of test segments | |
US9182990B1 (en) | Method and apparatus for detecting execution of unsupported instructions while testing multiversioned code | |
US8024715B2 (en) | Method and apparatus for detecting transient faults via dynamic binary translation | |
KR100478463B1 (ko) | 응용 프로그램의 동적링크 방법 | |
US8930683B1 (en) | Memory order tester for multi-threaded programs | |
CN107391223B (zh) | 一种文件处理方法及装置 | |
CN104133846A (zh) | 文件复制方法和装置 | |
CN112328213B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200710 Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Alibaba (China) Co.,Ltd. Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping radio square B tower 13 floor 03 unit self Applicant before: GUANGZHOU ALIBABA LITERATURE INFORMATION TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |