CN106874195A - 一种针对android应用的bug修复和持续交付方案 - Google Patents

一种针对android应用的bug修复和持续交付方案 Download PDF

Info

Publication number
CN106874195A
CN106874195A CN201710038262.0A CN201710038262A CN106874195A CN 106874195 A CN106874195 A CN 106874195A CN 201710038262 A CN201710038262 A CN 201710038262A CN 106874195 A CN106874195 A CN 106874195A
Authority
CN
China
Prior art keywords
dex
app
files
bug
classes
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
CN201710038262.0A
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.)
Universal Wisdom Technology Beijing Co Ltd
Original Assignee
Universal Wisdom Technology Beijing 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 Universal Wisdom Technology Beijing Co Ltd filed Critical Universal Wisdom Technology Beijing Co Ltd
Priority to CN201710038262.0A priority Critical patent/CN106874195A/zh
Publication of CN106874195A publication Critical patent/CN106874195A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates

Landscapes

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

Abstract

本发明公开了一种针对android应用的bug修复和持续交付方案,其主要步骤如下:101:真实的Application类是MyApplication,在编译期间自动修改AndroidManifest.xml文件,把MyApplication替换为MyNewApplication;102:App启动后由MyNewApplication加载相应的dex文件后,再将控制权交回给MyApplication。本发明通过把APP应用仅仅作为一个加载器。***启动App之后,加载器决定将要运行的代码和资源的位置。当有新功能或者有bug修复补丁需要推送给用户时,只需要下载对应的文件,通过替换加载器内容即可。从而可以较为简单便捷的解决业务模块中的bug,以及版本的快速迭代。

Description

一种针对android应用的bug修复和持续交付方案
技术领域
本发明涉及计算机领域,具体是一种针对android应用的bug修复和持续交付方案。
背景技术
Android***版本众多,机型众多,每次发布一个版本都是需要较长的时间。Android应用版本升级至少需要两周才能达到80%的升级率,严重阻碍了版本迭代速度。也导致市场上App版本分散,处理bug和投诉等也越来越麻烦。
近一两年采用Android热补丁框架解决上述问题非常热门。从开始360公司研发的动态下发lua脚本,到后来出现的各种方案。
早期的补丁框架偏向于以代码修复为主,主要分为两大类:nativehook方案和Multidex方案。
native hook方案如阿里巴巴的AndFix和Dexposed。Multidex方案如Qzone。切入点都是替换掉将要执行的代码。基于Qzone方案的思路,出现了nuwa这个比较完善的库,工具链比较完善。
但是上述两种方案都存在一定的缺陷,AndFix只能修改方法、不能修改字段、不能新增类等问题,其库本身难于维护(需要依赖外部开源力量进行维护),nuwa仅支持更新Java代码,不能更新资源和so文件,满足不了需求。
发明内容
本发明的目的在于提供一种针对android应用的bug修复和持续交付方案,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种针对android应用的bug修复和持续交付方案,其主要步骤如下:
101:真实的Application类是MyApplication,在编译期间自动修改AndroidManifest.xml文件,把MyApplication替换为MyNewApplication;
102:App启动后由MyNewApplication加载相应的dex文件后,再将控制权交回给MyApplication。
作为本发明进一步的方案:所述MyNewApplication加载相应的dex文件的方法如下:假设Android安装包中dex文件包含三个文件:classes.dex、classes2.dex和classes3.dex;dex文件的classes.dex充当的角色就是加载器,负责启动App,并且从App加载资源加载后面的两个dex文件,classes2.dex和classes3.dex;使App启动需要用到的所有类都集中在classes.dex中。
作为本发明再进一步的方案:所述App加载资源是依赖Context#getResources函数返回的Resources对象。
与现有技术相比,本发明的有益效果是:
本发明通过把APP应用仅仅作为一个加载器。***启动App之后,加载器决定将要运行的代码和资源的位置。当有新功能或者有bug修复补丁需要推送给用户时,只需要下载对应的文件,通过替换加载器内容即可。即将一个应用app的功能分解为多个部分,核心APP为一个加载模块,其他功能均作为加载模块的内容,当某一个模块出现了问题,或者需要增加删除某一个模块时,只需要通知加载器处理对应的模块即可。此方法可以较为简单便捷的解决业务模块中的bug,以及版本的快速迭代。
具体实施方式
下面结合具体实施方式对本发明的技术方案作进一步详细地说明。
一种针对android应用的bug修复和持续交付方案,其主要步骤如下:Android应用中Application类由于启动就被加载而不能被更新,我们通过代理Application,控制Application从新dex文件中加载。
101:真实的Application类是MyApplication,在编译期间自动修改AndroidManifest.xml文件,把MyApplication替换为MyNewApplication;所述MyNewApplication是App的入口Application;
102:App启动后由MyNewApplication加载完相应的dex文件后,再将控制权交回给MyApplication;
所述MyNewApplication加载相应的dex文件的方法如下:
dex文件分成两部分:patch库的dex文件(->classes.dex)和业务代码的dex文件(->classes[N].dex);其中patch库的dex文件中仅包含了patch库的全部代码,并不包含任何其他业务代码。
假设Android安装包中patch库的dex文件包含三个文件:classes.dex、classes2.dex和classes3.dex;patch库的dex文件的classes.dex充当的角色就是加载器,负责启动App,并且加载后面的两个dex文件,classes2.dex和classes3.dex;这样做的目的是,App启动需要用到的所有类都集中在classes.dex中,同理,业务代码的dex文件所有类都集中在classes[N].dex中;
如果某次下发patch代码把classes2.dex变更为classes2-1.dex,那么由加载器加载classes2-1.dex和classes3.dex即可实现更新包含MyApplication类在内的所有代码;
如果dex文件有更新,加载器会选择加载更新后的文件。
我们最初采用了Google官方的Multidex方案,扩展DexPathList的dexElements字段。单纯更新Java代码的patch框架,实用性会受到很大的局限。开发需要仔细验证提交内容,确保提交中不包含资源文件的变更以及native so的改动,会导致本就复杂的开发流程变得更加繁琐。所以我们在支持更新Java代码的基础之上,也支持更新资源和native so文件。
App加载资源是依赖Context#getResources函数返回的Resources对象。Resources内部包装了AssetManager,最终由AssetManager从Android安装包文件中加载资源,所以我们反射了替换***默认的Resources,让AssetManager从我们更新后的apk中加载资源;现阶段的实现支持比如string/anim/drawable/color/layout等资源文件的变更;由于Android***在安装apk时候已经把AndroidManifest.xml文件解析并写入到***中,目前还不支持修改四大组件,比如增加Activity。
在Android项目中使用native函数前需要先调用System.loadLibrary(libName)。
首先想到的是在代码中把加载so文件的代码改成System.load(libFilePath),让***加载自己指定的libFilePath文件。
查找lib文件是通过调用PathClassLoader的findLibrary,最终调用到DexPathList的findLibrary。DexPathList会在自己维护的列表目录中查找对应的lib文件是否存在。所以我们在发现patch文件中有so文件变更的时候,会在PathClassLoader的nativeLibraryDirectories(Android6.0以下)或者nativeLibraryPathElements(Android6.0及以上)的最前面***自定义的lib文件目录。这样ClassLoader在findLibrary的时候会先在自定义的lib目录中查找,优先加载变更过的so文件。
本发明的工作原理是:本发明通过把APP应用仅仅作为一个加载器。***启动App之后,加载器决定将要运行的代码和资源的位置。当有新功能或者有bug修复补丁需要推送给用户时,只需要下载对应的文件,通过替换加载器内容即可。即将一个应用app的功能分解为多个部分,核心APP为一个加载模块,其他功能均作为加载模块的内容,当某一个模块出现了问题,或者需要增加删除某一个模块时,只需要通知加载器处理对应的模块即可。此方法可以较为简单便捷的解决业务模块中的bug,以及版本的快速迭代。
上面对本发明的较佳实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。

Claims (3)

1.一种针对android应用的bug修复和持续交付方案,其特征在于,其主要步骤如下:
101:真实的Application类是MyApplication,在编译期间自动修改AndroidManifest.xml文件,把MyApplication替换为MyNewApplication;
102:App启动后由MyNewApplication加载相应的dex文件后,再将控制权交回给MyApplication。
2.根据权利要求1所述的针对android应用的bug修复和持续交付方案,其特征在于,
所述MyNewApplication加载相应的dex文件的方法如下:假设Android安装包中dex文件包含三个文件:classes.dex、classes2.dex和classes3.dex;dex文件的classes.dex充当的角色就是加载器,负责启动App,并且从App加载资源加载后面的两个dex文件,classes2.dex和classes3.dex;使App启动需要用到的所有类都集中在classes.dex中。
3.根据权利要求2所述的针对android应用的bug修复和持续交付方案,其特征在于,所述App加载资源是依赖Context#getResources函数返回的Resources对象。
CN201710038262.0A 2017-01-18 2017-01-18 一种针对android应用的bug修复和持续交付方案 Pending CN106874195A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710038262.0A CN106874195A (zh) 2017-01-18 2017-01-18 一种针对android应用的bug修复和持续交付方案

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710038262.0A CN106874195A (zh) 2017-01-18 2017-01-18 一种针对android应用的bug修复和持续交付方案

Publications (1)

Publication Number Publication Date
CN106874195A true CN106874195A (zh) 2017-06-20

Family

ID=59158773

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710038262.0A Pending CN106874195A (zh) 2017-01-18 2017-01-18 一种针对android应用的bug修复和持续交付方案

Country Status (1)

Country Link
CN (1) CN106874195A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107506647A (zh) * 2017-07-28 2017-12-22 努比亚技术有限公司 漏洞自动修复方法及移动终端
CN109254797A (zh) * 2018-08-15 2019-01-22 Oppo广东移动通信有限公司 移动终端及其开机控制方法、存储介质
CN109445807A (zh) * 2017-08-28 2019-03-08 腾讯科技(深圳)有限公司 实现应用程序更新的方法、装置和计算机可读存储介质
CN110286936A (zh) * 2019-06-27 2019-09-27 百度在线网络技术(北京)有限公司 热修复方法、装置、电子设备以及存储介质
CN110874226A (zh) * 2018-08-29 2020-03-10 山东华软金盾软件股份有限公司 一种android***功能升级的方法
CN111198713A (zh) * 2020-01-02 2020-05-26 晶晨半导体(深圳)有限公司 基于Android的同份源代码兼容各客户需求的方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140068588A1 (en) * 2012-09-06 2014-03-06 Box, Inc. Force upgrade of a mobile application via a server side configuration file
CN105824623A (zh) * 2016-03-14 2016-08-03 广州趣丸网络科技有限公司 一种Android应用热修复的方法和装置
CN105867988A (zh) * 2016-06-24 2016-08-17 深圳云之家网络有限公司 一种基于Hook技术的Android App热更新的方法及***
CN106095502A (zh) * 2016-06-13 2016-11-09 北京奇虎科技有限公司 一种安卓应用的热修复方法、装置、服务器和***

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140068588A1 (en) * 2012-09-06 2014-03-06 Box, Inc. Force upgrade of a mobile application via a server side configuration file
CN105824623A (zh) * 2016-03-14 2016-08-03 广州趣丸网络科技有限公司 一种Android应用热修复的方法和装置
CN106095502A (zh) * 2016-06-13 2016-11-09 北京奇虎科技有限公司 一种安卓应用的热修复方法、装置、服务器和***
CN105867988A (zh) * 2016-06-24 2016-08-17 深圳云之家网络有限公司 一种基于Hook技术的Android App热更新的方法及***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HB707934728: "android热更新机制", 《CSDN:HTTPS://BLOG.CSDN.NET/HB707934728/ARTICLE/DETAILS/52152739》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107506647A (zh) * 2017-07-28 2017-12-22 努比亚技术有限公司 漏洞自动修复方法及移动终端
CN109445807A (zh) * 2017-08-28 2019-03-08 腾讯科技(深圳)有限公司 实现应用程序更新的方法、装置和计算机可读存储介质
CN109254797A (zh) * 2018-08-15 2019-01-22 Oppo广东移动通信有限公司 移动终端及其开机控制方法、存储介质
CN109254797B (zh) * 2018-08-15 2022-01-14 Oppo广东移动通信有限公司 移动终端及其开机控制方法、存储介质
CN110874226A (zh) * 2018-08-29 2020-03-10 山东华软金盾软件股份有限公司 一种android***功能升级的方法
CN110874226B (zh) * 2018-08-29 2023-05-02 山东华软金盾软件股份有限公司 一种android***功能升级的方法
CN110286936A (zh) * 2019-06-27 2019-09-27 百度在线网络技术(北京)有限公司 热修复方法、装置、电子设备以及存储介质
CN111198713A (zh) * 2020-01-02 2020-05-26 晶晨半导体(深圳)有限公司 基于Android的同份源代码兼容各客户需求的方法和装置
CN111198713B (zh) * 2020-01-02 2023-11-28 晶晨半导体(深圳)有限公司 基于Android的同份源代码兼容各客户需求的方法和装置

Similar Documents

Publication Publication Date Title
CN106874195A (zh) 一种针对android应用的bug修复和持续交付方案
CN103955363B (zh) 一种程序升级安装包的制作方法
CN106775723B (zh) 基于Android平台的***固件定制的方法和Android设备
CN103744709B (zh) 补丁加载方法及装置
US9519466B2 (en) Executable code for constrained computing environments
US20090259999A1 (en) Method and system for applying a patch during application execution
CN109491695A (zh) 一种集成安卓应用的增量更新方法
CN105446712B (zh) 一种应用程序缺陷修补方法及装置
US9086899B2 (en) Loading and debugging method and debugging system thereof
US9063819B2 (en) Extensible patch management
CN102955702A (zh) 一种软件安装及升级方法和装置
US20110321025A1 (en) Enhanced Upgrade Path
CN105786538A (zh) 基于安卓***的软件升级方法和装置
CN105159738A (zh) 一种热补丁实现方法及***
US9141385B2 (en) Managing operating system components
EP2805233B1 (en) Installation engine and package format for parallelizable, reliable installations
US8769521B2 (en) Calendar aware adaptive patching of a computer program
US20150242205A1 (en) Non-Transitory Computer-Readable Recording Medium Storing Application Development Support Program and Application Development Support System That Automatically Support Platform Version
CN107463405A (zh) 一种应用程序的更新方法及装置
CN114942933A (zh) 一种自动更新数据库的方法及相关装置
CN107544813B (zh) 一种静态库配置的切换方法和***
CN102446102A (zh) Acpi表远程更新***及方法
CN109828786B (zh) 一种基于代码级支持sw_64架构的自动化工具
CN104516752A (zh) 一种信息处理方法及电子设备
CN103942051A (zh) 基于paas平台的应用部署方法和装置

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170620