CN111061486A - 一种安卓应用程序增量方法 - Google Patents

一种安卓应用程序增量方法 Download PDF

Info

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
Application number
CN201911289299.6A
Other languages
English (en)
Other versions
CN111061486B (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.)
Hangzhou Youzan Technology Co ltd
Original Assignee
Hangzhou Youzan 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 Hangzhou Youzan Technology Co ltd filed Critical Hangzhou Youzan Technology Co ltd
Priority to CN201911289299.6A priority Critical patent/CN111061486B/zh
Publication of CN111061486A publication Critical patent/CN111061486A/zh
Application granted granted Critical
Publication of CN111061486B publication Critical patent/CN111061486B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-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所述的安卓应用程序增量方法,其特征在于,每次执行所述安卓应用程序增量方法时,找出程序源代码中修改的部分由修改后的程序源代码与最初版的程序源代码进行比较。
CN201911289299.6A 2019-12-10 2019-12-10 一种安卓应用程序增量方法 Active CN111061486B (zh)

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 (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782237A (zh) * 2020-05-11 2020-10-16 车智互联(北京)科技有限公司 一种适于在移动终端中运行的应用的更新方法
CN112882718A (zh) * 2021-02-26 2021-06-01 百果园技术(新加坡)有限公司 编译处理方法、装置、设备及存储介质

Citations (10)

* Cited by examiner, † Cited by third party
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代码热更新方法、装置、电子设备及存储介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
弦影: "Freeline - Android平台上的秒级编译方案", 《HTTPS://DEVELOPER.ALIYUN.COM/ARTICLE/59122》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782237A (zh) * 2020-05-11 2020-10-16 车智互联(北京)科技有限公司 一种适于在移动终端中运行的应用的更新方法
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
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
US7337434B2 (en) Off-device class/resource loading methods, systems and computer program products for debugging a Java application in a Java micro device
CN106020873B (zh) 补丁包加载方法及装置
US9645912B2 (en) In-place function modification
CN110083360B (zh) 一种应用程序代码的编译方法、装置、设备及存储介质
US20060190933A1 (en) Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework
CN112882718B (zh) 编译处理方法、装置、设备及存储介质
CN111061486B (zh) 一种安卓应用程序增量方法
CN109614107B (zh) 一种软件开发工具包的集成方法和装置
CN106775781B (zh) 减小应用安装包的方法、装置及电子设备
CN112083930A (zh) 安卓项目编译过程的优化方法
CN106708550B (zh) 一种共享对象库加载的方法及装置
US20220179930A1 (en) Source modification engine
CN113641389B (zh) 基于OpenCPU的软件升级方法、装置及设备
CN110275710B (zh) 一种Java本地接口一致性检查方法及系统、存储介质及终端
CN114490103A (zh) 一种操作系统接口调用方法、装置以及电子设备
CN112596751A (zh) 应用程序安装包的编译方法、终端、服务器及存储介质
CN111752548A (zh) 一种sdk嵌入方法及装置、计算机可读存储介质
CN113672238B (zh) 基于实时操作系统模块化管理的运行方法、装置及设备
CN116243971B (zh) 一种基于静态依赖自举的内核无关的模块构建方法
CN111708567B (zh) 一种应用程序的处理方法和装置
CN113467803B (zh) 应用程序的修复方法以及相关装置、设备
CN114327396A (zh) 脱离源码编译环境开发Andriod系统应用的方法

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