CN111061486A - 一种安卓应用程序增量方法 - Google Patents
一种安卓应用程序增量方法 Download PDFInfo
- Publication number
- CN111061486A CN111061486A CN201911289299.6A CN201911289299A CN111061486A CN 111061486 A CN111061486 A CN 111061486A CN 201911289299 A CN201911289299 A CN 201911289299A CN 111061486 A CN111061486 A CN 111061486A
- Authority
- CN
- China
- Prior art keywords
- source code
- program
- program source
- android
- modified
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 230000000051 modifying effect Effects 0.000 claims abstract description 10
- 101100321938 Arabidopsis thaliana AAPT2 gene Proteins 0.000 claims description 4
- 230000004048 modification Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
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
- G06F8/44—Encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种安卓应用程序增量方法,涉及安卓应用程序开发技术领域,包括如下步骤:对程序源代码进行修改,对修改后的程序源代码进行分类,对修改后的程序源代码进行增量编译产出增量应用程序,重新启动程序应用程序并加载增量应用程序。本发明只增量编译修改过的部分,应用程序以插件化的形式加载增量包,增加了增量编译的适配性,适配各种代码风格。
Description
【技术领域】
本发明涉及安卓应用程序开发技术领域,具体涉及一种安卓应用程序增量方法。
【背景技术】
现有技术中,安卓应用程序编译加速只有Google官方的Instant Run作为面向全部Android studio应用的通用型工具。Instant Run只对修改的部分进行编译,而不对整个程序代码都进行编译,因此当开发者在Android Studio中修改了程序的代码,Instant Run可以很快的让开发者看到修改效果。InstantRun本身对于Android全系统提供了很好的支持,修改底层编译模式确保了其在所有设备上都可以正常运行。但是,由于InstantRun的通用适配性,如果项目经过一些改造,使用了一些InstantRun无法兼容的插件,或其他的InstantRun预料之外的代码风格,这些不稳定因素将造成InstantRun在大型项目中几乎不能被使用。
【发明内容】
为解决前述问题,本发明提供了一种安卓应用程序增量方法,增量编译修改过的部分,应用程序以插件化的形式加载增量包,增加了增量编译的适配性,适配各种代码风格。
为了达到上述目的,本发明采用如下技术方案:
一种安卓应用程序增量方法,包括如下步骤:
对程序源代码进行修改;
对修改后的程序源代码进行分类;
找出程序源代码中修改的部分,依据分类对修改后的程序源代码进行增量编译;
产出增量应用程序;
重新启动程序应用程序并加载增量应用程序。
可选的,对修改后的程序源代码进行分类,分类包括:Java类型、Kotlin类型以及安卓资源类型。
可选的,依据分类对修改后的程序源代码进行增量编译时,Java类型使用JavaC命令编译生成class文件,Kotlin类型使用KotlinC命令编译生成class文件,安卓资源类型使用AAPT2工具编译成flat文件。
可选的,找出程序源代码中修改的部分由Git diff命令执行。
可选的,对程序源代码进行修改后,运行壳程序,由壳程序完成安卓应用程序增量方法中的其他步骤。
可选的,所述壳程序为Savitart插件。
可选的,运行壳程序,所述壳程序检测是否有新的程序源代码脚本,如果有,获取新的程序源代码脚本,基于新的程序源代码脚本由壳程序完成安卓应用程序增量方法中的其他步骤。
可选的,程序源代码中包括安卓资源文件,对未修改的程序源代码进行全量编译时,使用参数emit-ids记录全量编译时所有安卓资源文件中的资源ID,并记录到本地文件中。
可选的,依据分类对修改后的程序源代码进行增量编译时,使用stable-ids读取本地文件中的所有资源ID。
可选的,每次执行所述安卓应用程序增量方法时,找出程序源代码中修改的部分由修改后的程序源代码与最初版的程序源代码进行比较。
本发明具有如下有益效果:
1、本发明所提供的应用程序增量方法,只对修改过的代码进行编译,同样保证了编译的速度,使开发者可以尽快看到修改的效果,同时,通过插件化加载应用程序,对不同类型的代码采用不同类型的命令进行增量编译,相较于Google官方的Instant Run显著提升了对于代码的适配性,可以在大型项目中广泛使用。
2、本发明所提供的应用程序增量方法,由于壳程序的设置,因此无需更新Savitar,只需更新插件脚本,即可完成增量编译及程序的修改、升级,开发者无需感知相关操作,减少了接入成本。
本发明的这些特点和优点将会在下面的具体实施方式以及附图中进行详细的揭露。本发明最佳的实施方式或手段将结合附图来详尽表现,但并非是对本发明技术方案的限制。另外,在每个下文和附图中出现的这些特征、要素和组件是具有多个,并且为了表示方便而标记了不同的符号或数字,但均表示相同或相似构造或功能的部件。
【附图说明】
下面结合附图对本发明作进一步说明:
图1为本发明实施例的流程图;
图2为本发明实施例中增量编译的示意图;
图3为本发明实施例中应用程序动态加载增量应用程序的示意图。
【具体实施方式】
下面结合本发明实施例的附图对本发明实施例的技术方案进行解释和说明,但下述实施例仅为本发明的优选实施例,并非全部。基于实施方式中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得其他实施例,都属于本发明的保护范围。
在本说明书中引用的“一个实施例”或“实例”或“例子”意指结合实施例本身描述的特定特征、结构或特性可被包括在本专利公开的至少一个实施例中。短语“在一个实施例中”在说明书中的各位置的出现不必都是指同一个实施例。
实施例:
如图1至图3所示,本实施例提供了一种安卓应用程序增量方法,包括如下步骤:
对程序源代码进行修改,修改可以是对原应用程序功能的修改,也可以是增加新的功能。并且在修改时会侵入插件化的代码,用于检测应用程序增量的部分是否存在以及加载增量应用程序。
以修改后的程序源代码的文件后缀分类记录修改过的程序源代码,并对其进行分类,分类包括:Java类型、Kotlin类型以及安卓资源类型。
对程序源代码进行修改后,运行壳程序,本实施例中,壳程序为Savitart插件,壳程序Savitart插件检测是否有新的程序源代码脚本,新的程序源代码脚本动态下发,如果有,壳程序Savitart插件则请求网络链接,通过该网络链接获取新的程序源代码脚本,基于新的程序源代码脚本,由壳程序Savitart插件完成以下的步骤。由于壳程序Savitart插件的设置,因此无需更新Savitar,只需更新插件脚本,即可完成增量编译及程序的修改、升级,开发者无需感知相关操作,减少了接入成本。
通过Git diff命令找出程序源代码中修改的部分,程序源代码中修改的部分就是需要进行增量编译的部分。依据分类对修改后的程序源代码进行增量编译,其中,Java类型使用JavaC命令编译生成class文件,Kotlin类型使用KotlinC命令编译生成class文件。安卓应用程序的程序源代码中均包括有安卓资源文件,因此对于安卓资源类型使用AAPT2工具编译成flat文件。flat文件是中间文件,最后使用AAPT2工具将所有中间文件.flat链接产生插件APK,同时,执行class文件生成dex文件,去掉class文件中的冗余,最后产生增量应用程序。在这一步骤中,将新的dex文件安插在原来的dex文件之前,加载时,寻找到新的dex文件进行加载,则不会再继续寻找dex文件。通过构造DexClassLoader和修改dexElements的方式,实现了代码插件化,通过构造AssertManager的方式实现了资源插件化。
由于安卓的限制,资源ID不能重复,一旦重复则会报错,因此,对未修改的程序源代码进行全量编译时,使用参数emit-ids记录全量编译时所有安卓资源文件中的资源ID,并记录到本地文件中,可防止资源ID重复。后续依据分类对修改后的程序源代码使用APPT2进行增量编译时,使用stable-ids读取本地文件中的所有资源ID,以避免资源ID重复导致出错。
通过ADB命令重新启动应用程序,应用程序在启动时检测是否有增量应用程序,如果有,则以插件化的方式加载增量应用程序,然后共同执行应用程序及增量应用程序,如果没有则直接执行应用程序。
本实施例所提供的安卓应用程序增量方法可循环重复执行,每次执行安卓应用程序增量方法时,找出程序源代码中修改的部分,依然通过Git diff命令执行,由修改后的程序源代码与最初版的程序源代码进行比较,也就是说,无论后续进行多少次增量编译,每一次进行增量编译时,均与最初的程序源代码,即未修改的原版程序源代码进行比较,找出修改的部分进行增量编译。
本实施例所提供的应用程序增量方法,只对修改过的代码进行编译,同样保证了编译的速度,使开发者可以尽快看到修改的效果,同时,通过插件化加载应用程序,对不同类型的代码采用不同类型的命令进行增量编译,相较于Google官方的Instant Run显著提升了对于代码的适配性,可以在大型项目中广泛使用。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,熟悉该本领域的技术人员应该明白本发明包括但不限于附图和上面具体实施方式中描述的内容。任何不偏离本发明的功能和结构原理的修改都将包括在权利要求书的范围中。
Claims (10)
1.一种安卓应用程序增量方法,其特征在于,所述安卓应用程序增量方法包括如下步骤:
对程序源代码进行修改;
对修改后的程序源代码进行分类;
找出程序源代码中修改的部分,依据分类对修改后的程序源代码进行增量编译;
产出增量应用程序;
重新启动程序应用程序并加载增量应用程序。
2.根据权利要求1所述的安卓应用程序增量方法,其特征在于,对修改后的程序源代码进行分类,分类包括:Java类型、Kotlin类型以及安卓资源类型。
3.根据权利要求2所述的安卓应用程序增量方法,其特征在于,依据分类对修改后的程序源代码进行增量编译时,Java类型使用JavaC命令编译生成class文件,Kotlin类型使用KotlinC命令编译生成class文件,安卓资源类型使用AAPT2工具编译成flat文件。
4.根据权利要求1所述的安卓应用程序增量方法,其特征在于,找出程序源代码中修改的部分由Git diff命令执行。
5.根据权利要求1所述的安卓应用程序增量方法,其特征在于,对程序源代码进行修改后,运行壳程序,由壳程序完成安卓应用程序增量方法中的其他步骤。
6.根据权利要求5所述的安卓应用程序增量方法,其特征在于,所述壳程序为Savitart插件。
7.根据权利要求5所述的安卓应用程序增量方法,其特征在于,运行壳程序,所述壳程序检测是否有新的程序源代码脚本,如果有,获取新的程序源代码脚本,基于新的程序源代码脚本由壳程序完成安卓应用程序增量方法中的其他步骤。
8.根据权利要求1所述的安卓应用程序增量方法,其特征在于,程序源代码中包括安卓资源文件,对未修改的程序源代码进行全量编译时,使用参数emit-ids记录全量编译时所有安卓资源文件中的资源ID,并记录到本地文件中。
9.根据权利要求8所述的安卓应用程序增量方法,其特征在于,依据分类对修改后的程序源代码进行增量编译时,使用stable-ids读取本地文件中的所有资源ID。
10.根据权利要求1所述的安卓应用程序增量方法,其特征在于,每次执行所述安卓应用程序增量方法时,找出程序源代码中修改的部分由修改后的程序源代码与最初版的程序源代码进行比较。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911289299.6A CN111061486B (zh) | 2019-12-10 | 2019-12-10 | 一种安卓应用程序增量方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911289299.6A CN111061486B (zh) | 2019-12-10 | 2019-12-10 | 一种安卓应用程序增量方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061486A true CN111061486A (zh) | 2020-04-24 |
CN111061486B CN111061486B (zh) | 2022-06-24 |
Family
ID=70301777
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911289299.6A Active CN111061486B (zh) | 2019-12-10 | 2019-12-10 | 一种安卓应用程序增量方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061486B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782237A (zh) * | 2020-05-11 | 2020-10-16 | 车智互联(北京)科技有限公司 | 一种适于在移动终端中运行的应用的更新方法 |
CN112882718A (zh) * | 2021-02-26 | 2021-06-01 | 百果园技术(新加坡)有限公司 | 编译处理方法、装置、设备及存储介质 |
CN113760323A (zh) * | 2021-02-10 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种开发应用的方法、装置和系统 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102707977A (zh) * | 2012-05-17 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 一种基于Android应用软件的增量升级方法 |
CN103701930A (zh) * | 2014-01-07 | 2014-04-02 | 浙江大学 | 一种移动应用程序的实时更新方法及系统 |
US20160232017A1 (en) * | 2015-02-10 | 2016-08-11 | ZeroTurnaround AS | System and Method for Reloading Constructors |
CN108196851A (zh) * | 2017-12-28 | 2018-06-22 | 腾讯科技(深圳)有限公司 | 应用发布方法及装置 |
CN108491223A (zh) * | 2018-04-04 | 2018-09-04 | 轻客智能科技(江苏)有限公司 | 一种在线更新方法及系统 |
CN108647142A (zh) * | 2018-05-07 | 2018-10-12 | 杭州有赞科技有限公司 | 一种Gatling压测脚本本地预编译调试方法及系统 |
CN109491695A (zh) * | 2018-10-19 | 2019-03-19 | 华南理工大学 | 一种集成安卓应用的增量更新方法 |
CN109542445A (zh) * | 2017-08-01 | 2019-03-29 | 北京京东尚科信息技术有限公司 | 一种Android插件化开发的方法和装置 |
KR20190083463A (ko) * | 2018-01-04 | 2019-07-12 | 이양원 | Kotlin을 이용한 플랫폼 독립 크로스앱의 실행 플랫폼 및 실행방법 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
-
2019
- 2019-12-10 CN CN201911289299.6A patent/CN111061486B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102707977A (zh) * | 2012-05-17 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 一种基于Android应用软件的增量升级方法 |
CN103701930A (zh) * | 2014-01-07 | 2014-04-02 | 浙江大学 | 一种移动应用程序的实时更新方法及系统 |
US20160232017A1 (en) * | 2015-02-10 | 2016-08-11 | ZeroTurnaround AS | System and Method for Reloading Constructors |
CN109542445A (zh) * | 2017-08-01 | 2019-03-29 | 北京京东尚科信息技术有限公司 | 一种Android插件化开发的方法和装置 |
CN108196851A (zh) * | 2017-12-28 | 2018-06-22 | 腾讯科技(深圳)有限公司 | 应用发布方法及装置 |
KR20190083463A (ko) * | 2018-01-04 | 2019-07-12 | 이양원 | Kotlin을 이용한 플랫폼 독립 크로스앱의 실행 플랫폼 및 실행방법 |
CN108491223A (zh) * | 2018-04-04 | 2018-09-04 | 轻客智能科技(江苏)有限公司 | 一种在线更新方法及系统 |
CN108647142A (zh) * | 2018-05-07 | 2018-10-12 | 杭州有赞科技有限公司 | 一种Gatling压测脚本本地预编译调试方法及系统 |
CN109491695A (zh) * | 2018-10-19 | 2019-03-19 | 华南理工大学 | 一种集成安卓应用的增量更新方法 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
弦影: "Freeline - Android平台上的秒级编译方案", 《HTTPS://DEVELOPER.ALIYUN.COM/ARTICLE/59122》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782237A (zh) * | 2020-05-11 | 2020-10-16 | 车智互联(北京)科技有限公司 | 一种适于在移动终端中运行的应用的更新方法 |
CN113760323A (zh) * | 2021-02-10 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种开发应用的方法、装置和系统 |
CN112882718A (zh) * | 2021-02-26 | 2021-06-01 | 百果园技术(新加坡)有限公司 | 编译处理方法、装置、设备及存储介质 |
CN112882718B (zh) * | 2021-02-26 | 2024-03-01 | 百果园技术(新加坡)有限公司 | 编译处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111061486B (zh) | 2022-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7337434B2 (en) | Off-device class/resource loading methods, systems and computer program products for debugging a Java application in a Java micro device | |
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
US9785456B2 (en) | Metadata-driven dynamic specialization | |
US10296323B2 (en) | System and method for fast initial and incremental deployment of apps | |
CN106406960B (zh) | 一种linux环境中快速部署软件的方法 | |
CN111061486B (zh) | 一种安卓应用程序增量方法 | |
CN112882718B (zh) | 编译处理方法、装置、设备及存储介质 | |
CN106020873B (zh) | 补丁包加载方法及装置 | |
CN110659031B (zh) | 应用程序的编译方法、装置、电子设备及存储介质 | |
CN110083360B (zh) | 一种应用程序代码的编译方法、装置、设备及存储介质 | |
US20100138817A1 (en) | In-place function modification | |
CN109614107B (zh) | 一种软件开发工具包的集成方法和装置 | |
CN112083930A (zh) | 安卓项目编译过程的优化方法 | |
CN108415737B (zh) | 一种在虚拟机中加载插件的方法及电子终端 | |
US20060190933A1 (en) | Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework | |
CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
KR20220047928A (ko) | 소스 수정 엔진 | |
CN113641389B (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN100361075C (zh) | 应用自动编译框架来快速开发嵌入式系统的方法及装置 | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及系统、存储介质及终端 | |
CN114327783A (zh) | 一种基于python脚本语言的UEFI应用开发方法 | |
CN114816475A (zh) | 一种嵌入式操作系统的更新方法、装置、设备和介质 | |
CN113672238B (zh) | 基于实时操作系统模块化管理的运行方法、装置及设备 | |
CN112631640B (zh) | 补丁生成方法、装置、设备及存储介质 | |
CN116243971B (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 |