CN111367510B - 一种安卓功能模块开发的方法及装置 - Google Patents
一种安卓功能模块开发的方法及装置 Download PDFInfo
- Publication number
- CN111367510B CN111367510B CN202010113359.5A CN202010113359A CN111367510B CN 111367510 B CN111367510 B CN 111367510B CN 202010113359 A CN202010113359 A CN 202010113359A CN 111367510 B CN111367510 B CN 111367510B
- Authority
- CN
- China
- Prior art keywords
- functional module
- module
- target class
- class file
- functional
- 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
- 238000011161 development Methods 0.000 title claims abstract description 50
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000012795 verification Methods 0.000 claims description 27
- 238000009434 installation Methods 0.000 claims description 16
- 230000010354 integration Effects 0.000 claims description 9
- 230000006835 compression Effects 0.000 claims description 7
- 238000007906 compression Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 7
- 238000013508 migration Methods 0.000 claims description 4
- 230000005012 migration Effects 0.000 claims description 4
- 230000009466 transformation Effects 0.000 abstract description 5
- 230000000694 effects Effects 0.000 abstract description 4
- 230000006870 function Effects 0.000 description 35
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004806 packaging method and process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- 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
-
- 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/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种安卓功能模块开发的方法,该方法包括:确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类;将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;编译所述主工程,以得到所述目标类对应的编译后的目标类文件;将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。通过实施本申请实施例,在模块化改造中达到模块独立开发效果,提高了模块化开发效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种安卓功能模块开发的方法及装置。
背景技术
在Android开发过程中,由于功能业务的不断增长,源代码越来越多,工程日益庞大,容易导致不同功能业务之间的代码耦合严重,改动风险大,难以维护。由于各个功能业务对应的模块的代码放在同一个工程中(即主工程)维护,不同模块的程序员可以任意修改;那么负责模块A可能依赖了模块B中本不应该被依赖的部分,导致各个模块代码之间的后续维护混乱。
目前,针对代码耦合的问题,通常采用模块化改造的方案来解决,即按功能进行划分,将主工程中的不同功能模块逐个抽离出来,放置到独立的工程中进行开发。由于不同模块的代码各自放到独立的工程中进行维护,一定程度上可以减轻耦合的问题,提高工程的可维护性。但是,模块化改造是一个渐进式的过程,需要把模块逐个从原来的主工程中抽离出来。而模块之间是存在相互依赖的,且不同模块从主工程抽离的时间存在差异。这就可能导致某个模块在进行抽离的过程中,有可能需要依赖尚未从主工程抽离的模块的功能。例如,模块A依赖了模块B的功能,而模块B尚未从主工程抽离,那么只能暂停模块A的开发;当模块B从主工程抽离出来并发布为相应压缩文件后,模块A通过该压缩文件才能继续自身的开发工作。导致模块间的开发工作需要串行进行,使得某个模块的开发进度会影响到其他模块的开发工作的正常进行,从而影响整体模块化改造的开发效率。
因此,如何提高整体的模块化开发效率,是亟待解决的问题。
发明内容
本申请实施例提供了一种安卓模块开发方法及装置,旨在模块化改造中达到模块独立开发效果,提高了模块化开发效率。
第一方面,本申请实施例提供了一种安卓模块开发方法,该方法包括:
确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类;
将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;
编译所述主工程,以得到所述目标类对应的编译后的目标类文件;
将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。
本申请实施例中通过确定主工程中第一功能模块,与主工程的第二功能模块存在调用关系。编译主工程中所有的功能模块,包括了第一功能模块中的目标类;从通过对主工程进行编译得到类文件中找到目标类对应的目标类文件;在第二功能模块对应的目标工程开发或者验证功能时,调用发送至目标工程的目标类文件。通过实施本发明实施例,可以支持某模块在所依赖的模块尚未抽离完成的情况下,也能依赖到所需模块的代码而进行功能的开发,并且可以独立运行当前模块验证相关功能,让当前模块的开发工作不会被另一个模块的开发进度所影响,进而可以在模块化改造中达到模块独立开发效果,提高了模块化开发效率。
在一种可能的实现方式中,所述编译所述主工程,以得到所述目标类对应的编译后的目标类文件,包括:
对所述主工程中的所述目标类的源代码增加注解,所述注解用于标记所述目标类;编译所述主工程的所有功能模块,得到所有功能模块的类文件,其中所述类文件中部分类文件的字节码信息包括所述注解;将字节码信息包含所述注解的类文件确定为所述目标类对应的目标类文件。
在一种可能的实现方式中,所述将所述目标类文件上传至代码管理服务器,包括:从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,发送至代码管理服务器。
在一种可能的实现方式中,所述第一功能模块的模块工程创建在所述代码管理服务器或与所述代码管理服务器相连的其他设备上。
在一种可能的实现方式中,所述方法还包括:编译所述第一功能模块的模块工程得到第一功能模块的类文件;从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包;其中所述安装包以供校验设备对所述第一功能模块进行运行校验。
在一种可能的实现方式中,所述方法还包括:当所述第一功能模块的校验完成后,将第一功能模块的目标类文件压缩为压缩包;将所述压缩包发送至所述代码管理服务器;从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。
第二方面,本申请实施例提供了一种安卓模块开发装置,该装置包括:
确定单元,用于确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类;
迁移单元,用于将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;
编译单元,用于编译所述主工程,以得到所述目标类对应的编译后的目标类文件;
调用单元,用于将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。
在一种可能的实现方式中,所述编译单元,具体用于:对所述主工程中的所述目标类的源代码增加注解,所述注解用于标记所述目标类;编译所述主工程的所有功能模块,得到所有功能模块的类文件,其中所述类文件中部分类文件的字节码信息包括所述注解;将字节码信息包含所述注解的类文件确定为所述目标类对应的目标类文件。
在一种可能的实现方式中,所述调用单元,具体用于:从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,发送至代码管理服务器。
在一种可能的实现方式中,所述第一功能模块的模块工程创建在所述代码管理服务器或与所述代码管理服务器相连的其他设备上。
在一种可能的实现方式中,所述装置还包括校验单元,用于:编译所述第一功能模块的模块工程得到第一功能模块的类文件;从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包;其中所述安装包以供校验设备对所述第一功能模块进行运行校验。
在一种可能的实现方式中,所述装置还包括压缩单元,用于:当所述第一功能模块的校验完成后,将第一功能模块的目标类文件压缩为压缩包;将所述压缩包发送至所述代码管理服务器;从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。
第三方面,本申请实施例提供了一种终端设备,包括处理器、通信设备、存储器、输入装置和输出装置,所述处理器、通信设备、存储器、输入装置和输出装置相互连接,其中,所述存储器用于存储应用程序代码,所述处理器被配置用于调用所述应用程序代码,执行上述第一方面任一项所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面任一项所述的方法。
第五方面,本申请实施例提供了一种计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面任一项所述的方法。
附图说明
下面将对本申请实施例中所需要使用的附图作介绍。
图1是本申请实施例提供的一种安卓模块开发架构的示意图;
图2是本申请实施例提供的一种安卓模块开发方法的流程示意图;
图3是本申请实施例提供的另一种安卓模块开发方法的流程示意图;
图4是本申请实施例提供的一种安卓模块开发的应用场景示意图;
图5是本申请实施例提供的一种安卓模块开发装置的结构示意图;
图6是本申请实施例提供的一种终端设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本发明方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
以下分别进行详细说明。
首先,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)安卓(Android),是指基于Linux内核的开放源代码移动操作***,是目前主流的手机操作***之一;本申请实施例所指的Android开发指的是基于Android***的应用开发。
(2)模块,是指复杂***(整体)中的一个部分,可以理解为一个单独的功能模块。而模块化是一种处理复杂***分解为可管理模块的方式,在软件开发领域,将某一个业务(功能)划分为独立部分进行开发与维护。
(3)安卓存档库(Android Archive Library,AAR),是指Android中源码、资源文件等的打包形式,为一种zip格式的压缩文件。
(4)Maven,是指一个依赖管理***,负责AAR的版本管理。由于通常搭建在远程服务器中,也可称为Maven服务器。
(5)插件化,是一种基于Android***的动态化技术,是指在用户已安装应用的基础上,无需再单独安装其他应用程序包(Android application package,Android),也不需要升级当前apk,即可动态加载执行某些代码(即插件)的技术。
(6)类(class),在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类有接口和结构。接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性。而class文件(类文件)是一组以8位字节为基础单位的二进制流。
下面对本申请实施例提供的一种安卓模块开发的***架构进行描述。请参见图1,图1是本申请实施例提供的一种安卓模块开发架构的示意图,包括终端1(图1中以电脑为例)、服务器(图1中以maven服务器为例)和终端2(图1中以智能手机为例)。其中,
电脑存储主工程的所有源代码,用于对代码进行编写、修改等操作。对主工程的代码进行模块划分,标记目标类代码。例如,在模块B中寻找被模块A调用的类(即代码),对该代码进行标记等。本申请实施例中终端1以电脑为例,但对代码进行操作的终端不限于电脑。
服务器,用于存储某模块依赖的其他模块的代码。例如,在确定了目标类代码之后,将所述目标类代码发送至maven服务器。在开发或者验证该模块时,从服务器调用该目标类代码。
智能手机,用于接收主工程对应的压缩包和资源文件;并在验证模块功能时以插件化框架的方式验证模块A的函数。例如,将完成开发的模块A对应的压缩包发送至终端后,终端将该压缩包解压到应用程序的目录下,得到模块A的dex文件和模块A相关的资源文件。然后反向调用模块A的入口函数,运行以验证模块A的功能。
可以理解的是,图1所示的内容只是本申请实施例中的一种示例性的实施方式。本申请实施例中的***架构可以包括但不仅限于以上***架构。
下面结合上述***架构和本申请中提供的安卓模块开发方法的实施例,对本申请中提出的技术问题进行具体分析和解决。
请参见图2,图2是本申请实施例提供的一种安卓模块开发方法流程的示意图,可应用于上述图1中的***架构,下面将结合图2从电脑的单侧进行描述。该方法可以包括以下步骤S201-步骤S204。
步骤S201:确定主工程中具有调用关系的第一功能模块以及第二功能模块。
具体地,根据第一功能模块的特征,在主工程的模块代码中确定第一功能模块。其中,第一功能模块的特征可以包括该第一功能模块调用所述第二功能模块包含的目标类;例如,根据模块A中部分代码被模块B引用,将模块B确定为第一功能模块。其中,所述主工程包括第一功能模块和第二功能模块,且所述第一功能模块与所述第二功能模块存在调用关系。其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类。
在一种可能的实现方式中,确定所述第一功能模块和所述第二功能模块中一个或多个相同的类名;根据所述一个或多个相同的类名,确定所述第一功能模块中的所述一个或多个目标类。例如,模块A(即第一功能模块)和模块B(即第二功能模块)中拥有相同的类名,确定该类名是原本属于哪一个模块的。再根据该类名确定对应的类为目标类。
步骤S202:将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中。
具体地,在获取第一功能模块的源代码后,将第一功能模块的源代码复制一份,将复制的第一功能模块的源代码迁移至预先创建的模块工程中。
步骤S203:编译所述主工程,以得到所述目标类对应的编译后的目标类文件。
具体地,编译主工程中所有的功能模块,将功能模块中的代码(即类)编译为类文件(即class文件)。例如,主工程的代码文件格式为java文件,通过编译将java文件变成class文件。类文件是编译主工程后代码的产物。其中,目标类为前述第一功能模块调用的,属于第二功能模块的类。通过编译所述主工程,得到目标类对应的目标类文件。
在一种可能的实现方式中,所述编译所述主工程,以得到所述目标类对应的编译后的目标类文件,包括:对所述主工程中的所述目标类的源代码增加注解,所述注解用于标记所述目标类;编译所述主工程的所有功能模块,得到所有功能模块的类文件,其中所述类文件中部分类文件的字节码信息包括所述注解;将字节码信息包含所述注解的类文件确定为所述目标类对应的目标类文件。例如,目标类的源代码中的每一行代码都增加注解。然后编译主工程中所有的功能模块得到相应功能模块的类文件;每一个类文件都有对应的字节码信息;在字节码信息中可以查看代码的注解内容;将包含注解的类文件确定为目标类文件。
可选地,对所述一个或多个目标类增加注解,所述注解用于标记所述一个或多个目标类;编译所述主工程的所有功能模块,得到一个或多个类文件,所述一个或多个类文件中部分类文件的字节码信息包括所述注解;根据所述部分类文件的字节码信息,将所述部分类文件确定为所述一个或者多个目标类对应的目标类文件。例如,从多个类文件中确定包含注解的一个或者多个目标类文件,所述多个类文件为通过编译主工程得到的类文件;所述第二类文件为通过编译所述主工程中包含所述注解的目标类得到的类文件;所述第一功能模块和所述第二功能模块为所述主工程的不同功能模块。可以从类文件的字节码信息中确定注解,根据包含注解的类文件可以确定出目标类对应的目标类文件。
步骤S204:将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。
具体地,在确定了目标类文件之后,将目标类文件发送至代码管理服务器。例如,第一功能模块被抽离主工程后,成为独立的工程进行编辑和开发,其可以在其他的服务器或者终端上。第一功能模块对应的独立工程可以调用代码管理服务器中的目标类文件进行功能的开发和完善。
可选地,从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,发送至代码管理服务器。例如,目标类文件在目录A,将复制的目标类文件拷贝纸目录B,其中目录A和目录B可以在同一个服务器或者终端;或者目录A和目录B在不同的服务器或者终端。将目录B下的目标类文件进行压缩(本发明实施例对具体的压缩形式不做限定),将目录B下压缩后的目标类文件发送至代码管理服务器。通过代码管理服务器存储以及管理压缩的目标类文件,将第一功能模块需要调用该目标类文件时,可以从代码管理服务器下载相应的压缩包(包含被压缩的目标类文件),然后解压压缩包或者相应的目标类文件。
在一种可能的实现方式中,从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,发送至第一服务器;所述目标工程存储在所述第一服务器。例如,先在存储有主工程的电脑将目标类文件确定后,将确定后的目标类文件复制到第二目录,即将目标类文件从原来的目录复制一份到新的目录,如ProvideAPI目录。将该目录下的所有class文件进行压缩并打包为module-app.aar,然后上传至对应的服务器。
进一步可选地,所述第一功能模块的模块工程创建在所述代码管理服务器或与所述代码管理服务器相连的其他设备上。当第一功能模块的模块工程创建在所述代码管理服务器上时,直接从代码管理服务器获取目标类文件对应的压缩包,以实现对目标类文件的调用。当第一功能模块的模块工程创建在与所述代码管理服务器相连的其他设备(如终端或者其他服务器)时,模块工程通过代码管理服务器向其他设备发送调用指令,在其他设备接收、识别并验证了调用指令后,向代码管理服务器发送包含目标类文件的压缩包。
请参见图3,图3是本申请实施例提供的一种安卓模块开发方法流程的示意图,可应用于上述图1中的***架构,下面将结合图3从电脑的单侧进行描述。该方法可以包括以下步骤S301-步骤S307,可选的步骤包括步骤S305、步骤S306和步骤S307。
步骤S301:确定主工程中具有调用关系的第一功能模块以及第二功能模块。
具体地,请参见前述步骤S201。
步骤S302:将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中。
具体地,请参见步骤S202。
步骤S303:编译所述主工程,以得到所述目标类对应的编译后的目标类文件。
具体地,请参见前述步骤S203。
步骤S304:将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。
具体地,可以参见步骤S204;将第一目录下的一个或多个目标类文件,拷贝至第二目录(例如ProvideAPI目录)。可选地,将所述目标类文件压缩后,发送至代码管理服务器。例如,将相关目录下(例如,ProvideAPI目录)的目标类文件进行压缩和打包为aar格式,并发送至代码管理服务器(例如maven服务器)。
步骤S305:当运行所述第一功能模块对应的第一工程时,通过所述代码管理服务器向所述第一工程所在的第一服务器发送所述目标类文件。
具体地,在所述第一工程需要调用目标类文件时,代码管理服务器(以maven服务器为例)将已经压缩和打包的目标类文件的压缩包发送至第一工程所在的第一服务器。当运行第二功能模块对应的第二工程时,该第二工程通过自身的入口函数或者其他方式调用服务器中的目标类文件,继续自身功能的开发。第一功能模块对应的第一工程调用发送至所述目标类文件。
步骤S306:编译所述第一工程得到多个属于第一工程的类文件。
具体地,在完成目标工程的功能开发后,将目标工程进行编译,得到多个属于第一工程的类文件。其中,所述多个属于第一工程的类文件中包括所述目标类文件。
步骤S307:在所述第一工程和所述主工程进行功能集成时,从多个属于第一工程的类文件中移除所述目标类文件。
具体地,在对第一工程对应的第三类文件进行dex流程之前,过滤所有需要参与dex流程的class文件,移除前述来自module-app.aar的class文件(即引用的目标类文件)。
在一种可能的实现方式中,编译所述第一功能模块的模块工程得到第一功能模块的类文件;从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包。
例如,第一功能模块的模块工程通过编译得到第一功能模块对应的类文件,其中会包含调用的第二功能模块的目标类文件;在生成主工程安装包时,需要移除来自第二功能模块的目标类文件,因为在主工程中包含了第一功能模块和第二功能模块,移除第二功能模块的目标类文件可以使得代码不会冗余重复。或者,当模块A需要运行验证自身功能时,定位自身代码中公开的入口函数(入口函数被调用后可运行模块A的功能);在触发模块工程A的编译后,将工程中所有源码编译为class文件;在进行dex流程之前,过滤所有需要参与dex的class文件,移除来自于module-app.aar的class文件。其中,所述安装包以供校验设备对所述第一功能模块进行运行校验。例如将module-A.apk推送到手机SD卡目录的module目录;在主工程启动时将module-A.apk解压到应用内置目录,得到模块A的dex文件与资源文件;主工程以插件化的方式加载模块A的dex文件与资源文件;主工程反射调用模块A的入口函数,调起模块A的功能,并验证模块A的实现是否正确。
可选地,对第一功能模块对应的部分类文件进行移除后,对第一功能模块对应的剩余类文件进行校验,以检查代码的准确度。进一步可选地,当所述第一功能模块的校验完成后,将第一功能模块的目标类文件压缩为压缩包;将所述压缩包发送至所述代码管理服务器;从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。例如,主工程在集成的过程中,从每个功能模块对应的模块工程中获取所需的相应压缩包;然后对压缩包进行解压,并对其中的类文件进行整合,最后生成应用的安装包。
接下来对本申请提供的一种数据保护的应用场景进行描述。参阅图4,图4是本申请实施例提供的一种安卓模块开发的应用场景示意图。安卓模块开发的架构可以应用于如图4所示的场景中。如图4所示,其中,主工程为模块化改造前的工程;主工程内部里面包含了许多模块(如第一功能模块(即模块B)和第二功能模块(即模块A)的代码);
首先,模块A需要从主工程中抽离出来独立成为一个模块时,新建一个模块工程A,其中,包括了lib文件和app文件;把模块A的代码逻辑从主工程迁移到模块工程A,开发自身模块逻辑;当模块A需要依赖模块B的功能,而模块B尚未从主工程中抽离时,进行以下步骤:
1、在主工程中找到模块A需要调用的属于模块B的类,加上@API注解;
2、触发主工程编译,通过javac工具将所有源码编译为class文件;可选地,通过aapt生成资源文件。将主工程剩余的dex文件和资源文件,打包成module-app.apk;发送至终端(本申请)。进一步可选地,在手机运行程序时已启动插件化框架,运行后续接收的模块A的apk(即module-A.apk)。
3、遍历所有生成的class文件,分析class文件的字节码信息,若该class文件包含@API注解,则将该class文件拷贝到ProvidedAPI目录;
4、将ProvidedAPI目录下的所有class文件打包为module-app.aar,并上传到Maven服务器;
5、模块A引用module-app.aar,调用其中的类,继续进行自身功能的开发。可选地,开发模块A的功能时,也通过aapt工具获得资源文件以及通过javac获得工程对应的class文件。
接着,当模块A需要运行验证自身功能时可以进行以下步骤:1、模块A提供一个公开的入口函数,该入口函数被调用后可运行模块A的功能;2、触发模块工程A的编译;3、将工程中所有源码编译为class文件,在进行dex流程之前,过滤所有需要参与dex的class文件,移除来自于module-app.aar的class文件。
需要说明的是,在dex流程结束后,将输出的dex文件和资源文件打包成为module-A.apk;将module-A.apk推送到手机SD卡目录的module目录;重新启动主工程,主工程在启动时将module-A.apk解压到应用内置目录,得到模块A的dex文件与资源文件;主工程以插件化加载模块A的dex文件与资源文件;主工程反射调用模块A的入口函数,调起模块A的功能,开发者开始验证模块A的实现是否正确;模块A开发与验证完成后,打包发布为module-A.aar,并上传到Maven服务器;主工程引用module-A.aar,完成功能集成,打包发布最终APK。
可以理解的是,图4中的应用场景的只是本发明实施例中的一种示例性的实施方式,本发明实施例中的应用场景包括但不仅限于以上应用场景。
为了便于更好地实施本申请的上述方案,本申请实施例还对应提供了一种安卓模块开发装置,请参见图5,图5是本申请实施例提供的一种安卓模块开发装置的结构示意图;下面结合附图5来进行详细说明:
如图5所示,安卓模块开发装置50可以包括确定单元501、迁移单元502、编译单元503、调用单元504、校验单元505和压缩单元506;可选的单元包括校验单元505和压缩单元506;其中,
确定单元501,用于确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类;
迁移单元502,用于将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;
编译单元503,用于编译所述主工程,以得到所述目标类对应的编译后的目标类文件;;
调用单元504,用于将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。
在一种可能的实现方式中,所述编译单元503,具体用于:对所述主工程中的所述目标类的源代码增加注解,所述注解用于标记所述目标类;编译所述主工程的所有功能模块,得到所有功能模块的类文件,其中所述类文件中部分类文件的字节码信息包括所述注解;将字节码信息包含所述注解的类文件确定为所述目标类对应的目标类文件。
在一种可能的实现方式中,所述调用单元504,具体用于:从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,发送至代码管理服务器。
在一种可能的实现方式中,所述第一功能模块的模块工程创建在所述代码管理服务器或与所述代码管理服务器相连的其他设备上。
在一种可能的实现方式中,所述装置还包括校验单元505,用于:编译所述第一功能模块的模块工程得到第一功能模块的类文件;从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包;其中所述安装包以供校验设备对所述第一功能模块进行运行校验。
在一种可能的实现方式中,所述装置还包括压缩单元506,用于:当所述第一功能模块的校验完成后,将第一功能模块的目标类文件压缩为压缩包;将所述压缩包发送至所述代码管理服务器;从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。
需要说明的是,图5所示的安卓模块开发装置50中各个单元的具体实现及有益效果可以对应参照图2-图3所示的方法实施例中的相应描述,此处不再赘述。
请参见图6,图6是本申请实施例提供的一种终端设备的结构示意图;该终端设备60包括处理器601、存储器602、通信接口603、输入装置606和输出装置606,所述处理器601、存储器602、通信接口603、输入装置606和输出装置606通过总线604相互连接。终端设备60可以是平板电脑、个人电脑等终端设备,输入装置606可以是键盘、鼠标、语音录入、触摸板等装置,输出装置可以是显示器等装置。
存储器602包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储器602用于相关指令及数据的存储。通信接口603用于接收和发送数据。
处理器601可以是一个或多个中央处理器(central processing unit,CPU),在处理器601是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
该终端设备60中的处理器601用于读取所述存储器602中存储的程序代码,执行以下操作:
处理器601用于确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类;将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;编译所述主工程,以得到所述目标类对应的编译后的目标类文件;将所述目标类文件上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用。
在一种可能的实现方式中,处理器601用于:对所述主工程中的所述目标类的源代码增加注解,所述注解用于标记所述目标类;编译所述主工程的所有功能模块,得到所有功能模块的类文件,其中所述类文件中部分类文件的字节码信息包括所述注解;将字节码信息包含所述注解的类文件确定为所述目标类对应的目标类文件。
在一种可能的实现方式中,处理器601用于:从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,发送至代码管理服务器。可选地,所述第一功能模块的模块工程创建在所述代码管理服务器或与所述代码管理服务器相连的其他设备上。
在一种可能的实现方式中,处理器601用于:编译所述第一功能模块的模块工程得到第一功能模块的类文件;从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包;其中所述安装包以供校验设备对所述第一功能模块进行运行校验。
在一种可能的实现方式中,处理器601用于:当所述第一功能模块的校验完成后,将第一功能模块的目标类文件压缩为压缩包;将所述压缩包发送至所述代码管理服务器;从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。
本申请实施例中通过确定主工程中的目标类,目标类为第一功能模块的类,与主工程的第二功能模块存在调用关系。编译主工程中所有的功能模块,包括了第一功能模块中的目标类;从通过对主工程进行编译得到类文件中找到目标类对应的目标类文件;在第二功能模块对应的目标工程开发或者验证功能时,调用发送至目标工程的目标类文件。通过实施本发明实施例,可以支持某模块在所依赖的模块尚未抽离完成的情况下,也能依赖到所需模块的代码而进行功能的开发,并且可以独立运行当前模块验证相关功能,让当前模块的开发工作不会被另一个模块的开发进度所影响,进而可以在模块化改造中达到模块独立开发效果,提高了模块化开发效率。
需要说明的是,上述各个操作的实现及有益效果还可以对应参照图2-图4所示的方法实施例的相应描述。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,当所述程序指令被处理器执行时,图2-图4所示的方法流程得以实现。
本申请实施例还提供了一种计算机程序,所述计算机程序包括程序指令,当所述程序指令被处理器执行时,图2-图4所示的方法流程得以实现。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置、设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (6)
1.一种安卓功能模块开发的方法,其特征在于,包括:
确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类,所述第二功能模块位于所述主工程中;
将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;
编译所述主工程的所有功能模块,以得到所述目标类对应的编译后的目标类文件;
从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;
将所述第二目录下的目标类文件压缩后,上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用;
编译所述第一功能模块的模块工程得到第一功能模块的类文件;
从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;
基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包;其中所述安装包以供校验设备对所述第一功能模块进行运行校验;
当所述第一功能模块的校验完成后,将所述第一功能模块的目标类文件压缩为压缩包;
将所述压缩包发送至所述代码管理服务器;
从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。
2.根据权利要求1所述的方法,其特征在于,所述编译所述主工程的所有功能模块,以得到所述目标类对应的编译后的目标类文件,包括:
对所述主工程中的所述目标类的源代码增加注解,所述注解用于标记所述目标类;
编译所述主工程的所有功能模块,得到所有功能模块的类文件,其中所述类文件中部分类文件的字节码信息包括所述注解;
将字节码信息包含所述注解的类文件确定为所述目标类对应的目标类文件。
3.根据权利要求1所述的方法,其特征在于,所述第一功能模块的模块工程创建在所述代码管理服务器或与所述代码管理服务器相连的其他设备上。
4.一种安卓功能模块开发的装置,其特征在于,包括:
确定单元,用于确定主工程中具有调用关系的第一功能模块以及第二功能模块,其中,所述调用关系具体为所述第一功能模块调用所述第二功能模块包含的目标类,所述第二功能模块位于所述主工程中;
迁移单元,用于将所述第一功能模块的源代码从所述主工程迁移至预先创建的模块工程中;
编译单元,用于编译所述主工程的所有功能模块,以得到所述目标类对应的编译后的目标类文件;
调用单元,用于从所述目标类文件所在的第一目录,将所述目标类文件拷贝至第二目录;将所述第二目录下的目标类文件压缩后,上传至代码管理服务器,以供所述第一功能模块的模块工程进行开发调用;
校验单元,用于编译所述第一功能模块的模块工程得到第一功能模块的类文件;从所述第一功能模块的类文件中移除所述目标类文件,得到所述第一功能模块的目标类文件;基于所述第一功能模块的目标类文件,生成所述第一功能模块的安装包;其中所述安装包以供校验设备对所述第一功能模块进行运行校验;
压缩单元,用于当所述第一功能模块的校验完成后,将所述第一功能模块的目标类文件压缩为压缩包;将所述压缩包发送至所述代码管理服务器;从所述代码管理服务器调用所述压缩包,与所述主工程进行功能集成。
5.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述权利要求1-3任意一项所述的方法。
6.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序包括指令,当所述计算机程序被计算机执行时,使得所述计算机执行如权利要求1-3中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010113359.5A CN111367510B (zh) | 2020-02-24 | 2020-02-24 | 一种安卓功能模块开发的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010113359.5A CN111367510B (zh) | 2020-02-24 | 2020-02-24 | 一种安卓功能模块开发的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111367510A CN111367510A (zh) | 2020-07-03 |
CN111367510B true CN111367510B (zh) | 2024-03-19 |
Family
ID=71208173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010113359.5A Active CN111367510B (zh) | 2020-02-24 | 2020-02-24 | 一种安卓功能模块开发的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111367510B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015394B (zh) * | 2020-08-27 | 2024-02-27 | 北京百度网讯科技有限公司 | 安卓功能模块开发方法和装置、计算机***和存储介质 |
CN112083930B (zh) * | 2020-09-14 | 2024-06-14 | 华帝股份有限公司 | 安卓项目编译过程的优化方法 |
CN112527306B (zh) * | 2020-10-27 | 2024-05-28 | 百果园技术(新加坡)有限公司 | 项目开发中模块的独立化实现方法、装置、设备及介质 |
CN112346778B (zh) * | 2020-10-28 | 2022-02-08 | 常州微亿智造科技有限公司 | 一种Java程序编译时自动生成字节码的优化方法 |
CN112286533B (zh) * | 2020-11-16 | 2024-01-26 | 广州速威智能***科技有限公司 | 云端服务的热修复方法及装置 |
CN112631622A (zh) * | 2020-12-29 | 2021-04-09 | Oppo广东移动通信有限公司 | 应用安装方法、装置、服务器及计算机可读介质 |
CN112685029B (zh) * | 2020-12-30 | 2024-07-16 | 京东科技控股股份有限公司 | 一种可视化模板的生成方法、装置、设备及存储介质 |
CN113434219B (zh) * | 2021-07-08 | 2024-03-26 | 展讯通信(天津)有限公司 | 工程项目的信息配置方法和设备 |
CN115981614B (zh) * | 2023-02-24 | 2023-07-07 | 美云智数科技有限公司 | 项目工程的模块化处理方法、电子设备及计算机存储介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107357593A (zh) * | 2017-08-24 | 2017-11-17 | 武汉斗鱼网络科技有限公司 | 源代码文件组建方法、装置、电子终端及可读存储介质 |
CN107885527A (zh) * | 2016-09-27 | 2018-04-06 | 北京嘀嘀无限科技发展有限公司 | 一种测试***的代码修改方法及装置 |
CN107908403A (zh) * | 2017-11-10 | 2018-04-13 | 北京搜狐新动力信息技术有限公司 | 一种移动端业务模块组件化的配置方法及*** |
CN109032815A (zh) * | 2018-07-18 | 2018-12-18 | 武汉斗鱼网络科技有限公司 | 功能模块间的信息交互方法、装置、设备及存储介质 |
CN109144525A (zh) * | 2017-06-26 | 2019-01-04 | 研祥智能科技股份有限公司 | 一种网络自适应的软件安装方法与*** |
CN109445807A (zh) * | 2017-08-28 | 2019-03-08 | 腾讯科技(深圳)有限公司 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
CN109542445A (zh) * | 2017-08-01 | 2019-03-29 | 北京京东尚科信息技术有限公司 | 一种Android插件化开发的方法和装置 |
US10324712B1 (en) * | 2014-12-24 | 2019-06-18 | Thomas A. Nolan | Method and system of migrating legacy code for upgraded systems |
CN110058850A (zh) * | 2019-04-10 | 2019-07-26 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种应用的开发方法、装置以及存储介质 |
CN110231945A (zh) * | 2019-05-20 | 2019-09-13 | 深圳壹账通智能科技有限公司 | 代码下载的方法、装置、电子设备及计算机存储介质 |
CN110333868A (zh) * | 2019-06-12 | 2019-10-15 | 阿里巴巴集团控股有限公司 | 用于生成子应用的安装包的方法和*** |
US10521613B1 (en) * | 2018-08-08 | 2019-12-31 | Carlos Manuel Gonzalez | Adaptive standalone secure software |
CN110737437A (zh) * | 2018-07-20 | 2020-01-31 | 北京君正集成电路股份有限公司 | 一种基于代码集成的编译方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009238040A (ja) * | 2008-03-27 | 2009-10-15 | Hitachi Ltd | モジュール間連携支援方法、モジュール間連携支援プログラム、モジュール間連携支援システム |
-
2020
- 2020-02-24 CN CN202010113359.5A patent/CN111367510B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10324712B1 (en) * | 2014-12-24 | 2019-06-18 | Thomas A. Nolan | Method and system of migrating legacy code for upgraded systems |
CN107885527A (zh) * | 2016-09-27 | 2018-04-06 | 北京嘀嘀无限科技发展有限公司 | 一种测试***的代码修改方法及装置 |
CN109144525A (zh) * | 2017-06-26 | 2019-01-04 | 研祥智能科技股份有限公司 | 一种网络自适应的软件安装方法与*** |
CN109542445A (zh) * | 2017-08-01 | 2019-03-29 | 北京京东尚科信息技术有限公司 | 一种Android插件化开发的方法和装置 |
CN107357593A (zh) * | 2017-08-24 | 2017-11-17 | 武汉斗鱼网络科技有限公司 | 源代码文件组建方法、装置、电子终端及可读存储介质 |
CN109445807A (zh) * | 2017-08-28 | 2019-03-08 | 腾讯科技(深圳)有限公司 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
CN107908403A (zh) * | 2017-11-10 | 2018-04-13 | 北京搜狐新动力信息技术有限公司 | 一种移动端业务模块组件化的配置方法及*** |
CN109032815A (zh) * | 2018-07-18 | 2018-12-18 | 武汉斗鱼网络科技有限公司 | 功能模块间的信息交互方法、装置、设备及存储介质 |
CN110737437A (zh) * | 2018-07-20 | 2020-01-31 | 北京君正集成电路股份有限公司 | 一种基于代码集成的编译方法和装置 |
US10521613B1 (en) * | 2018-08-08 | 2019-12-31 | Carlos Manuel Gonzalez | Adaptive standalone secure software |
CN110058850A (zh) * | 2019-04-10 | 2019-07-26 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种应用的开发方法、装置以及存储介质 |
CN110231945A (zh) * | 2019-05-20 | 2019-09-13 | 深圳壹账通智能科技有限公司 | 代码下载的方法、装置、电子设备及计算机存储介质 |
CN110333868A (zh) * | 2019-06-12 | 2019-10-15 | 阿里巴巴集团控股有限公司 | 用于生成子应用的安装包的方法和*** |
Also Published As
Publication number | Publication date |
---|---|
CN111367510A (zh) | 2020-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111367510B (zh) | 一种安卓功能模块开发的方法及装置 | |
US6083279A (en) | Platform independent technique for transferring software programs over a network | |
US20210232388A1 (en) | Software pipeline configuration | |
US8756616B2 (en) | System and method for reducing the static footprint of mixed-language JAVA classes | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
WO2022148390A1 (zh) | 一种在区块链中部署、更新、调用智能合约的方法 | |
CN112433747B (zh) | 一种适用于软件开发工具包sdk的差分升级方法及*** | |
CN111026439B (zh) | 应用程序的兼容方法、装置、设备及计算机存储介质 | |
CN112000334A (zh) | 页面开发方法、装置、服务器及存储介质 | |
CN113741954A (zh) | ***软件生成方法、装置、电子设备及存储介质 | |
CN117093286B (zh) | 插件生成方法、装置、设备及计算机可读存储介质 | |
EP3797356A1 (en) | Code base sharing between standalone and web-based versions of an application via an emulated network communication channel | |
CN111367512B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN117707543A (zh) | 一种应用安装包制作和安装方法、计算设备及存储介质 | |
CN114546581A (zh) | 一种无服务容器启动方法及相关设备 | |
CN110806891B (zh) | 嵌入式设备软件版本的生成方法及装置 | |
CN116974555A (zh) | 软件开发工具包的组装方法、装置、设备以及存储介质 | |
CN111352631A (zh) | 一种接口兼容性检测方法及装置 | |
CN111562942A (zh) | 基于Gitlab的移动APP持续集成装置和方法 | |
CN114721709A (zh) | 程序包生成方法、装置、存储介质及计算机设备 | |
CN111752548A (zh) | 一种sdk嵌入方法及装置、计算机可读存储介质 | |
CN108345461B (zh) | 应用更新方法和装置以及计算机可读存储介质 | |
CN115543486B (zh) | 面向无服务器计算的冷启动延迟优化方法、装置和设备 | |
CN113467803B (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 |