CN117555547A - 应用软件编译方法、装置及计算机可读存储介质 - Google Patents

应用软件编译方法、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN117555547A
CN117555547A CN202311446266.4A CN202311446266A CN117555547A CN 117555547 A CN117555547 A CN 117555547A CN 202311446266 A CN202311446266 A CN 202311446266A CN 117555547 A CN117555547 A CN 117555547A
Authority
CN
China
Prior art keywords
file
application software
compiling
resource
code
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.)
Pending
Application number
CN202311446266.4A
Other languages
English (en)
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 CN202311446266.4A priority Critical patent/CN117555547A/zh
Publication of CN117555547A publication Critical patent/CN117555547A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种应用软件编译方法、装置及计算机可读存储介质,涉及计算机编译技术领域。在上述应用软件编译方法中,基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,从而减少参与编译的代码数量,进而缩短编译的等待时间。此外,基于补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,缩短编译时长的同时还能减少正常编译安装的时间,从而提高开发和/或维护效率。

Description

应用软件编译方法、装置及计算机可读存储介质
技术领域
本申请涉及计算机编译技术领域,具体而言,涉及一种应用软件编译方法、装置及计算机可读存储介质。
背景技术
在Android应用的开发工作中,工程编译是至关重要的一环。然而随着程序代码的不断累积,编译耗时也越来越长,当少量代码出现错误时,如果对应用软件的apk进行升级,可能会由于程序代码量庞大、模块数量过多等原因导致编译速度缓慢,效率不高。
发明内容
为了至少克服现有技术中的上述不足,本申请的目的在于提供一种应用软件编译方法。
第一方面,本申请实施例提供一种应用软件编译方法,所述方法包括:
在检测到应用软件存在错误需要修复时,接收对所述应用软件的修复操作,其中,所述应用软件为运行在安卓操作系统下的应用软件;
获取所述修复操作对应的增量文件,并基于所述增量文件构建补丁文件;
基于构建的补丁文件对所述应用软件进行热修复。
在一种可能的实现方式中,所述获取所述修复操作对应的增量文件,并基于所述增量文件构建补丁文件的步骤,包括:
对所述应用软件的源代码进行缓存校验,判断所述应用软件是否存在编译缓存文件;
当判断所述应用软件存在所述编译缓存文件时,基于所述增量文件构建所述补丁文件;
采用构建好的补丁文件对所述应用软件进行热修复。
在一种可能的实现方式中,所述对所述应用软件的源代码进行缓存校验,判断所述应用软件是否存在编译缓存文件的步骤之后,还包括:
当判断所述应用软件不存在所述编译缓存文件时,对所述应用软件的源代码进行编译,收集各种缓存信息,其中,所述各种缓存信息包括各模块之间的依赖信息文件、资源文件合并与编译后的文件、以及源代码路径与编译后的类文件之间的映射关系;
在所述应用软件压缩包中埋入提交规范插件,并获取所述应用软件当前的更新信息。
在一种可能的实现方式中,所述当判断所述应用软件存在所述编译缓存文件时,基于所述增量文件构建所述补丁文件的步骤,还包括:
基于所述更新信息判断所述增量文件在当前补丁构建环境下的可用文件,得到用于构建所述补丁文件的处理文件;
基于所述处理文件对所述应用软件进行资源编译和代码编译,根据资源编译结果和代码编译结果得到补丁文件。
在一种可能的实现方式中,所述基于所述处理文件对所述应用软件进行资源编译和代码编译,根据资源编译结果和代码编译结果得到补丁文件的步骤,还包括:
基于所述编译缓存文件将所述处理文件中的资源文件与所述应用软件的原有资源文件进行合并和编译,得到增量资源文件和增量资源标识;
将所述增量资源标识与代码编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述应用软件中原有的代码文件进行代码编译,得到与所述增量资源文件存在依赖关系的dex数据文件;
将所述增量资源文件与所述dex数据文件进行打包,得到所述补丁文件。
在一种可能的实现方式中,所述处理文件包括Kotlin代码文件与Java代码文件,所述代码编译器插件包括Java编译器插件和Kotlin编译器插件,所述将所述增量资源标识与代码编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述应用软件中原有的代码文件进行代码编译,得到与所述增量资源文件存在依赖关系的dex数据文件的步骤,包括:
将所述增量资源标识与Kotlin编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述Kotlin代码文件进行编译,结合所述增量资源文件,构建出第一类文件;
将所述增量资源标识与Java编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述Java代码文件进行编译,结合所述增量资源文件,构建出第二类文件;
对所述第一类文件与所述第二类文件进行压缩打包,得到所述dex数据文件。
在一种可能的实现方式中,所述基于构建的补丁文件对所述应用软件进行热修复的步骤,包括:
获取所述补丁文件,基于所述更新信息对所述补丁文件进行校验;
当所述补丁文件校验通过时,基于所述补丁文件执行代码加载与资源加载,对所述应用软件进行热修复。
在一种可能的实现方式中,所述当所述补丁文件校验通过时,基于所述补丁文件执行代码加载与资源加载的步骤,包括:
修改所述dex数据文件的路径数组,将所述dex数据文件置于路径数组首位,加载所述dex数据文件,以完成所述代码加载;
将所述增量资源文件与所述应用软件的原有的资源文件进行合并,得到全量资源文件;
通过反射注入的方式将资源类加载器的路径指向所述全量资源文件;
创建一个新的包含所述全量资源文件的资源管理器对象,并基于所述增量资源文件和所述资源索引文件替换相关对象,以完成所述资源加载。
第二方面,本申请实施例还提供一种应用软件编译的装置,所述装置包括:
检测模块,用于在检测到应用软件存在错误需要修复时,接收对所述应用软件的修复操作,其中,所述应用软件为运行在安卓操作系统下的应用软件;
构建模块,用于获取所述修复操作对应的增量文件,并基于所述增量文件构建补丁文件;
热修复模块,用于基于构建的补丁文件对所述应用软件进行热修复。
第三方面,本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本申请提供的应用软件编译方法。
基于上述任意一个方面,本申请实施例提供的应用软件编译方法、装置及计算机可读存储介质,基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,从而减少参与编译的代码数量,从而缩短编译的等待时间。此外,基于补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,缩短编译时长的同时还能减少正常编译安装的时间,从而提高开发和/或维护效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要调用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。
图1为本申请实施例提供的应用软件编译方法的一种流程示意图;
图2为图1中的步骤S12的一种流程示意图;
图3为图2中的步骤S122的一种流程示意图;
图4为图1中的步骤S13的一种流程示意图;
图5为图4中的步骤S132的一种流程示意图
图6为本申请实施例提供的应用软件编译装置的一种功能模块示意图;
图7为本申请实施例提供的计算机设备的硬件结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。本申请中使用的流程图示出了根据本申请实施例的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其它操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其它实施例,都属于本申请保护的范围。
需要说明的是,在不冲突的情况下,本申请的实施例中的不同特征之间可以相互结合。
为了解决现有技术中存在的上述技术问题,本申请实施例提供一种应用软件编译方法,请参照图1,图1示例了本实施例提供的应用软件编译方法的流程示意图,下面结合图1对本实施例提供的应用软件编译方法的详细步骤进行介绍。
步骤S11:在检测到应用软件存在错误需要修复时,接收对应用软件的修复操作。
在本步骤中,在检测到应用软件存在错误需要修复时,可以接收对应用软件的资源或代码的修改。此外,应用软件为运行在安卓操作系统下的应用软件,示例性地,应用软件可以为提供视频直播功能的直播软件。
步骤S12:获取修复操作对应的增量文件,并基于增量文件构建补丁文件。
在本步骤中,增量文件包括发生增改的资源和/或代码以及对增改内容存在依赖关系的代码等,可以通过对比当前的源代码情况与补丁构建环境的代码差异得到。示例性地,可以通过git版本管理工具的提交记录确定某个时间点的源代码环境,通过git status收集增量文件。基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,减少参与编译的代码数量,从而缩短编译的等待时间。
步骤S13:基于构建的补丁文件对应用软件进行热修复。
在本步骤中,采用基于增量文件构建的补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下对错误进行动态修复,缩短编译时长的同时还能减少正常编译安装的时间。
在本实施例中,基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,减少参与编译的代码数量,从而缩短编译的等待时间,提高编译效率。此外,基于补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,缩短编译时长的同时还能减少正常编译安装的时间。
需要说明的是,本申请实施例的方法不仅可以在开发阶段加快对应用软件的编译效率,从而提高整体开发效率,还可以在运营维护阶段通过加快编译速率缩短构建补丁文件的时间,节约应用软件重新安装的时间。此外,在运营维护阶段,可以通过服务器构建补丁文件,客户端通过Android调试桥(adb)等方式获取对应的补丁文件,并基于补丁文件对应用软件进行热修复。
请参阅图2,作为本申请实施例的一种可能实现方式,步骤S12可以通过以下方法实现。
步骤S121:对应用软件的源代码进行缓存校验,判断应用软件是否存在编译缓存文件。
在本步骤中,可以根据应用软件在apk编译时提交的更新信息,判断补丁生成框架中的缓存目录是否存在编译缓存文件。
当缓存目录下不存在编译缓存文件时,可以对应用软件的源代码进行全量编译,收集各种缓存信息,其中,各种缓存信息包括各模块之间的依赖信息文件、资源文件合并和编译后的文件、以及源代码路径与编译后的类文件之间的映射关系等,其中,资源文件合并和编译后的文件包括存储编译后的资源标识的资源索引文件(R.class),根据资源标识可以调用对应的资源文件。根据上述缓存信息,可以明确各模块之间的调用关系,解决类引用的问题。
此外,还可以在应用软件压缩包中埋入提交记录插件,提交记录插件可以用记录应用软件的更新信息,这些更新信息可以作为环境的特征值使用,根据特征值可以判断应用软件与构建补丁环境是否一致。
步骤S122:当判断应用软件存在编译缓存文件时,基于增量文件构建补丁文件。
在本步骤中,当应用软件存在编译缓存文件时,可以在编译缓存文件的基础上对增量文件进行编译与缓存,此时可以采用补丁生成框架代替常规框架对增改部分的代码进行编译,减少构建补丁过程中的编译耗时,提高编译效率。
步骤S123:采用构建好的补丁文件对应用软件进行热修复。
在本实施例中,基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,从而减少参与编译的代码数量,从而缩短编译的等待时间。此外,基于补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,节约编译安装的时间,从而开发和/或维护的效率。
进一步的,请参阅图3,步骤S122可以通过以下方法实现。
步骤S1221:基于更新信息判断增量文件在当前补丁构建环境下的可用文件,得到用于构建补丁文件的处理文件。
在本步骤中,当从应用软件获取的更新信息与本地缓存的更新信息一致时,表示当前构建基准环境一致。在当前的构建基准环境下判断增量文件中是否存在无法通过补丁文件应用生效的文件,最小化地确认需要参与补丁文件构建的处理文件。经过一轮筛选后的处理文件,参与编译的文件数量更少,因此补丁构建的编译速度远远快于正常热编译的速度。
步骤S1222:基于处理文件对应用软件进行资源编译和代码编译,根据资源编译结果和代码编译结果得到补丁文件。
在本步骤中,由于各模块的资源文件和代码文件之间存在依赖关系,故而资源编译和代码编译并非完全并发执行。
更进一步的,步骤S1222可以通过以下方法实现。
首先,可以基于编译缓存文件将处理文件中的资源文件与应用软件的原有资源文件进行合并和编译,得到增量资源文件和增量资源标识。
其次,将增量资源标识与代码编译器插件内联,基于代码编译器插件和增量资源文件对应用软件中原有的代码文件进行代码编译,得到与增量资源文件存在依赖关系的dex数据文件。
需要说明的是,在对增量文件进行资源编译过程中,可能会生成资源索引文件(R.class),但由于统计和整合资源标识的过程耗时较久,故而本实施例方法选择跳过生成资源索引文件(R.class)的步骤,以提高编译效率。在对增量文件进行资源编译后,发生变更的资源标识(即,增量资源标识)可以用--stable-ids进行区分,没有变更的资源标识(--emit-ids)与资源索引文件中的一致。进一步的,由于在基于增量文件构建补丁文件的过程中跳过了生成资源索引文件的步骤,因此资源索引文件不存在增量资源标识(--stable-ids)。为了可以正确引用发生变更的资源,可以将增量资源标识(--stable-ids)与代码编译器插件进行内联,保证代码编译过程中的引用逻辑正确。在自定义代码编译器插件的过程中,还可以去掉缓存编译时的内部类关键字,防止跨模块编译。其中,代码编译器插件包括Java编译器插件和Kotlin编译器插件。
具体的代码编译过程可以参考以下方法,对于Kotlin代码文件,可以将增量资源标识与Kotlin编译器插件内联,基于代码编译器插件和增量资源文件对Kotlin代码文件进行编译,结合增量资源文件,构建出第一类文件。对于Java代码文件,将增量资源标识与Java编译器插件内联,基于代码编译器插件和增量资源文件对Java代码文件进行编译,构建出第二类文件。对第一类文件与第二类文件进行压缩打包,可以得到dex数据文件。
最后,将增量资源文件与dex数据文件进行打包,得到补丁文件。
需要说明的是,在运营维护阶段,客户端可以通过Android调试桥(adb)等方式获取对应的补丁文件,并基于补丁文件对应用软件进行热修复。
请参阅图4,作为本实施例的一种可能实现方式,步骤S13可以通过以下方法实现。
步骤S131:获取补丁文件,基于更新信息对补丁文件进行校验。
在本步骤中,获取该补丁文件后,可以将当前应用软件的更新信息作为特征值,当补丁文件中的dex数据文件名与特征值一致时,可以认为补丁文件的校验通过。
步骤S132:当补丁文件校验通过时,基于补丁文件执行代码加载与资源加载,对应用软件进行热修复。
在本步骤中,利用补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,缩短编译时长的同时还能减少正常编译安装的时间。
进一步的,请参阅图5,步骤S132可以通过以下方法实现。
步骤S1321:修改dex数据文件的路径数组,将dex数据文件至于路径数组首位,加载dex数据文件,以完成代码加载。
在本步骤中,由于系统机制会从前往后进行遍历,因此可以通过Java反射等hook方式修改运行时的类加载器及dex数据文件的路径数组,将dex数据文件置于路径数组首位,可以优先加载补丁代码,从而覆盖apk文件中存在增改的代码文件。
步骤S1322:将增量资源文件与应用软件的原有的资源文件进行合并,得到全量资源文件。
步骤S1323:通过反射注入的方式将资源类加载器的路径指向全量资源文件。
步骤S1324:创建一个新的包含全量资源文件的资源管理器对象,并基于增量资源文件和资源索引文件替换相关对象,以完成所述资源加载。
在本步骤中,相关对象可以包括改动的资源及其子依赖集,可以通过反射替换掉缓存于本地内存中的改动资源及其子依赖集,从而起到覆盖apk中的资源环境的效果。
在本实施例中,基于补丁文件对运行于安卓环境下的应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,缩短编译时长的同时还能减少正常编译安装的时间,从而提高开发和/或维护的效率。
基于相同的发明构思,本申请实施还提供一种应用软件编译装置,请参照图6,图为本申请实施例提供的应用软件编译装置的一种功能模块示意图。本申请实施例可以根据计算机设备执行的方法实施例对应用软件编译装置300进行功能模块的划分,也即该应用软件编译装置所对应的以下各个功能模块可以用于执行上述各个方法实施例。其中,该应用软件编译装置300可以包括检测模块310、构建模块320以及热修复模块330,下面分别对该应用软件编译装置的各个功能模块的功能进行详细阐述。
检测模块310,用于在检测到应用软件存在错误需要修复时,接收对应用软件的修复操作。
在检测到应用软件存在错误需要修复时,可以接收对应用软件的资源或代码的修改。应用软件为运行在安卓操作系统下的应用软件,示例性地,应用软件可以为提供视频直播功能的直播软件。
本实施例中,检测模块310可以用于执行上述的步骤S11,关于获取模块310的详细实现方式可以参照上述针对步骤S11的详细描述。
构建模块320,用于获取修复操作对应的增量文件,并基于增量文件构建补丁文件。
增量文件包括资源和/或代码发生增改以及对增改内容存在依赖关系的代码等,可以通过对比当前的源代码情况与补丁构建环境的代码差异得到。其中,可以通过git版本管理工具的提交记录确定某个时间点的源代码环境,通过git status收集增量文件。基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,减少参与编译的代码数量,从而缩短编译的等待时间。
本实施例中,构建模块320可以用于执行上述的步骤S12,关于检测模块320的详细实现方式可以参照上述针对步骤S12的详细描述。
热修复模块330,用于基于构建的补丁文件对应用软件进行热修复。
采用基于增量文件构建的补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下对错误进行动态修复,缩短编译时长的同时还能减少正常编译安装的时间。
本实施例中,热修复模块330可以用于执行上述的步骤S13,关于热修复模块330的详细实现方式可以参照上述针对步骤S13的详细描述。
需要说明的是,应理解以上装置或系统中的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以在物理上分开。且这些模块可以全部以软件(比如,开源软件)可以通过处理器调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理器调用软件的形式实现,部分模块通过硬件的形式实现。作为一种示例,热修复模块330可以由单独处理器运行实现,可以以程序代码的形式存储于上述装置或系统的存储器中,由上述装置或系统的某一个处理器调用并执行以上热修复模块330的功能,其它模块的实现与之类似,在此就不再赘述。此外这些模块可以全部或部分集成在一起,也可以独立实现。这里所描述的处理器可以是一种具有信号的处理能力的集成电路,在实现过程中,上述技术方案中的各步骤或各个模块可以通过处理器中的集成逻辑电路或者执行软件程序的形式完成。
请参照图7,图7示出了本公开实施例提供的用于实现上述的应用软件编译方法的计算机设备的硬件结构示意图。如图7所示,计算机设备100可包括处理器110、计算机可读存储介质120、总线130及通信单元140。
在具体实现过程中,处理器110执行计算机可读存储介质120存储的计算机执行程序(例如图6中所示的应用软件编译装置300中的各个模块),使得处理器110可以执行如上方法实施例的视频编码参数组合确定方法,其中,处理器110、计算机可读存储介质120以及通信单元140可以通过总线130连接。
处理器110的具体实现过程可参见上述服务器执行的各个方法实施例,其实现原理和技术效果类似,本申请实施例此处不再赘述。
计算机可读存储介质120可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器111用于存储程序或者数据。
总线130可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
此外,本申请实施例还提供一种可读存储介质,可读存储介质中存储有计算机程序,当处理器执行计算机程序时,实现如上的应用软件编译方法。
综上所述,本申请实施例提供一种应用软件编译方法、装置及计算机可读存储介质,在上述应用软件编译方法中,基于增量文件构建补丁文件,可以跳过未改动的代码,只对增改的代码进行编译,从而减少参与编译的代码数量,从而缩短编译的等待时间。此外,基于补丁文件对应用软件进行热修复,可以使得应用软件在无需重新安装的情况下实现动态修复,缩短编译时长的同时还能减少正常编译安装的时间,从而提高开发和/或维护的效率。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种应用软件编译方法,其特征在于,所述方法包括:
在检测到应用软件存在错误需要修复时,接收对所述应用软件的修复操作,其中,所述应用软件为运行在安卓操作系统下的应用软件;
获取所述修复操作对应的增量文件,并基于所述增量文件构建补丁文件;
基于构建的补丁文件对所述应用软件进行热修复。
2.根据权利要求1所述的应用软件编译方法,其特征在于,所述获取所述修复操作对应的增量文件,并基于所述增量文件构建补丁文件的步骤,包括:
对所述应用软件的源代码进行缓存校验,判断所述应用软件是否存在编译缓存文件;
当判断所述应用软件存在所述编译缓存文件时,基于所述增量文件构建所述补丁文件;
采用构建好的补丁文件对所述应用软件进行热修复。
3.根据权利要求2所述的应用软件编译方法,其特征在于,所述对所述应用软件的源代码进行缓存校验,判断所述应用软件是否存在编译缓存文件的步骤之后,还包括:
当判断所述应用软件不存在所述编译缓存文件时,对所述应用软件的源代码进行编译,收集各种缓存信息,其中,所述各种缓存信息包括各模块之间的依赖信息文件、资源文件合并与编译后的文件、以及源代码路径与编译后的类文件之间的映射关系;
在所述应用软件压缩包中埋入提交规范插件,并获取所述应用软件当前的更新信息。
4.根据权利要求3所述的应用软件编译方法,其特征在于,所述当判断所述应用软件存在所述编译缓存文件时,基于所述增量文件构建所述补丁文件的步骤,还包括:
基于所述更新信息判断所述增量文件在当前补丁构建环境下的可用文件,得到用于构建所述补丁文件的处理文件;
基于所述处理文件对所述应用软件进行资源编译和代码编译,根据资源编译结果和代码编译结果得到补丁文件。
5.根据权利要求4所述的应用软件编译方法,其特征在于,所述基于所述处理文件对所述应用软件进行资源编译和代码编译,根据资源编译结果和代码编译结果得到补丁文件的步骤,还包括:
基于所述编译缓存文件将所述处理文件中的资源文件与所述应用软件的原有资源文件进行合并和编译,得到增量资源文件和增量资源标识;
将所述增量资源标识与代码编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述应用软件中原有的代码文件进行代码编译,得到与所述增量资源文件存在依赖关系的dex数据文件;
将所述增量资源文件与所述dex数据文件进行打包,得到所述补丁文件。
6.根据权利要求5所述的应用软件编译方法,其特征在于,所述处理文件包括Kotlin代码文件与Java代码文件,所述代码编译器插件包括Java编译器插件和Kotlin编译器插件,所述将所述增量资源标识与代码编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述应用软件中原有的代码文件进行代码编译,得到与所述增量资源文件存在依赖关系的dex数据文件的步骤,包括:
将所述增量资源标识与Kotlin编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述Kotlin代码文件进行编译,结合所述增量资源文件,构建出第一类文件;
将所述增量资源标识与Java编译器插件内联,基于所述代码编译器插件和所述增量资源文件对所述Java代码文件进行编译,结合所述增量资源文件,构建出第二类文件;
对所述第一类文件与所述第二类文件进行压缩打包,得到所述dex数据文件。
7.根据权利要求6所述的应用软件编译方法,其特征在于,所述基于构建的补丁文件对所述应用软件进行热修复的步骤,包括:
获取所述补丁文件,基于所述更新信息对所述补丁文件进行校验;
当所述补丁文件校验通过时,基于所述补丁文件执行代码加载与资源加载,对所述应用软件进行热修复。
8.根据权利要求7所述的应用软件编译方法,其特征在于,所述当所述补丁文件校验通过时,基于所述补丁文件执行代码加载与资源加载的步骤,包括:
修改所述dex数据文件的路径数组,将所述dex数据文件置于路径数组首位,加载所述dex数据文件,以完成所述代码加载;
将所述增量资源文件与所述应用软件的原有的资源文件进行合并,得到全量资源文件;
通过反射注入的方式将资源类加载器的路径指向所述全量资源文件;
创建一个新的包含所述全量资源文件的资源管理器对象,并基于所述增量资源文件替换相关对象,以完成所述资源加载。
9.一种应用软件编译的装置,其特征在于,所述装置包括:
检测模块,用于在检测到应用软件存在错误需要修复时,接收对所述应用软件的修复操作,其中,所述应用软件为运行在安卓操作系统下的应用软件;
构建模块,用于获取所述修复操作对应的增量文件,并基于所述增量文件构建补丁文件;
热修复模块,用于基于构建的补丁文件对所述应用软件进行热修复。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一所述方法。
CN202311446266.4A 2023-11-01 2023-11-01 应用软件编译方法、装置及计算机可读存储介质 Pending CN117555547A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311446266.4A CN117555547A (zh) 2023-11-01 2023-11-01 应用软件编译方法、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311446266.4A CN117555547A (zh) 2023-11-01 2023-11-01 应用软件编译方法、装置及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN117555547A true CN117555547A (zh) 2024-02-13

Family

ID=89810155

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311446266.4A Pending CN117555547A (zh) 2023-11-01 2023-11-01 应用软件编译方法、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN117555547A (zh)

Similar Documents

Publication Publication Date Title
US8607208B1 (en) System and methods for object code hot updates
JP4878715B2 (ja) オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体
US7124408B1 (en) Binding by hash
CN112685410B (zh) 业务规则校验方法、装置、计算机设备及存储介质
CN112882718B (zh) 编译处理方法、装置、设备及存储介质
CN112395202B (zh) 接口自动化测试方法、装置、计算机设备和存储介质
CN115185550A (zh) 服务部署方法、装置、计算机设备及存储介质
EP1376342A2 (en) Single pass intermediate language verification algorithm
CN114661423A (zh) 集群配置检测方法、装置、计算机设备及存储介质
CN111897711A (zh) 代码中bug的定位方法、装置、电子设备及可读存储介质
CN111142922B (zh) 应用程序更新方法、装置、终端及服务器
CN112416360B (zh) 热补丁的生成方法、装置和服务器
US11194702B2 (en) History based build cache for program builds
US9396239B2 (en) Compiling method, storage medium and compiling apparatus
CN117555547A (zh) 应用软件编译方法、装置及计算机可读存储介质
CN116049000A (zh) 环境参数配置方法、装置、设备、存储介质及产品
CN115757172A (zh) 测试执行方法、装置、存储介质及计算机设备
CN115456628A (zh) 基于区块链的智能合约查看方法、装置、存储介质及设备
CN114860296A (zh) 软件持续集成方法、装置和存储介质
US6782523B2 (en) Parallel configurable IP design methodology
CN111752735A (zh) 一种sdk异常排查方法及装置、计算机可读存储介质
CN111143229A (zh) 软件测试方法及装置、计算机设备及计算机可读存储介质
US20240036887A1 (en) Intercepting calls to a dynamic library
CN115729564A (zh) 原生应用对Linux Arm64的兼容性判断方法
US20090172646A1 (en) Method for dynamic discovery of code segments in instrumented binary modules

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