CN106874195A - 一种针对android应用的bug修复和持续交付方案 - Google Patents
一种针对android应用的bug修复和持续交付方案 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- 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
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***版本众多,机型众多,每次发布一个版本都是需要较长的时间。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对象。
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)
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)
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 | 北京奇虎科技有限公司 | 一种安卓应用的热修复方法、装置、服务器和*** |
-
2017
- 2017-01-18 CN CN201710038262.0A patent/CN106874195A/zh active Pending
Patent Citations (4)
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)
Title |
---|
HB707934728: "android热更新机制", 《CSDN:HTTPS://BLOG.CSDN.NET/HB707934728/ARTICLE/DETAILS/52152739》 * |
Cited By (9)
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 |