CN111061501A - 安卓应用的热更新方法及计算机可读存储介质 - Google Patents
安卓应用的热更新方法及计算机可读存储介质 Download PDFInfo
- Publication number
- CN111061501A CN111061501A CN201811202894.7A CN201811202894A CN111061501A CN 111061501 A CN111061501 A CN 111061501A CN 201811202894 A CN201811202894 A CN 201811202894A CN 111061501 A CN111061501 A CN 111061501A
- Authority
- CN
- China
- Prior art keywords
- android application
- directory
- preset
- code
- code packet
- 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 28
- 238000004806 packaging method and process Methods 0.000 claims abstract description 51
- 238000013507 mapping Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 4
- 238000012856 packing Methods 0.000 description 4
- 230000001010 compromised effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008439 repair process Effects 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/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种安卓应用的热更新方法及计算机可读存储介质,方法包括:根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;安卓应用启动时,判断assets目录下是否存在标识文件;若存在,则从SD卡的预设目录读取更新的代码包。本发明在提高页面启动速度的同时不影响系统性能,且支持热更新。
Description
技术领域
本发明涉及软件更新技术领域,尤其涉及一种安卓应用的热更新方法及计算机可读存储介质。
背景技术
React Native(跨平台的移动开发框架)开发中,js的打包方式有以下两种:
1、使用bundle命令打包。所有的js代码都会打包到同一个js代码包中。加载的时候,需要一次性读取并处理代码包,因此页面启动速度偏慢,可能会出现白屏的情况。
2、使用unbundle命令打包。每个js文件都被打包成一个单独的代码包,然后把这些文件放在同一个目录下。加载的时候,应用会采用按需加载的方式。页面启动速度相对快,但由于每个js文件都被打包成一个单独的代码包,每次需加载大量的代码包,可能会影响系统性能。
也就是说,React-Native打包的方式是两个极端,要么所有的js代码合并成一个代码包,要么每个js文件作为一个独立的代码包。
另外,React Native框架加载使用unbundle命令打包的代码包时,只会去加载Android APK(安卓APP的安装包)内的代码包,默认加载不了SD卡上的代码包,但是热更新(不需要重新安装应用的前提下,在线更新代码的一种技术)从网络上下载下来的代码包不可能存放在APK内,一般是放在SD卡上,所以这种打包方式无法支持热更新。
发明内容
本发明所要解决的技术问题是:提供一种安卓应用的热更新方法及计算机可读存储介质,提高页面启动速度的同时不影响系统性能,且支持热更新。
为了解决上述技术问题,本发明采用的技术方案为:一种安卓应用的热更新方法,包括:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下步骤:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
本发明的有益效果在于:相比现有技术中两种极端的打包方式,本发明通过采用折中的打包方式,将属于同一业务的js文件打包到同一个代码包中,后续可按业务需求加载不同的业务包,提高页面启动速度的同时不影响系统性能;同时,在打包时额外生成一个标识文件,当启动应用时,若存在该标识文件,则优先从SD卡中获取更新的代码包,从而实现了热更新。
附图说明
图1为本发明的一种安卓应用的热更新方法的流程图;
图2为本发明实施例一的方法流程图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
本发明最关键的构思在于:将相同业务的js文件打包到同一个代码包中,并生成一个标识文件,加载时若存在该标识文件则优先从SD卡中加载代码包。
请参阅图1,一种安卓应用的热更新方法,包括:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
从上述描述可知,本发明的有益效果在于:提高页面启动速度的同时不影响系统性能,且支持热更新。
进一步地,所述根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件具体为:
将安卓应用中对应相同业务的js文件打包到同一代码包中,得到N个业务包和一个基础包,所述N为所述安卓应用的业务类型数;
生成一个标识文件。
由上述描述可知,通过按照业务类型对js文件进行打包,相比使用bundle命令打包的方式,提高了页面启动速度,相比使用unbundle命令打包的方式,既保证了页面的启动速度,也不会影响系统性能。同时,通过生成标识文件,后续可根据该标识文件采取不同的代码包的加载方式。
进一步地,所述从SD卡的预设目录下的读取更新的代码包具体为:
通过文件映射的方式从SD卡的预设目录下的读取更新的代码包。
由上述描述可知,使得React Native框架可从SD卡上加载代码包。
进一步地,所述从SD卡的预设目录下的读取更新的代码包之后,进一步包括:
若所述预设目录下不存在更新的代码包,则从所述安卓应用的assets目录读取对应的代码包。
由上述描述可知,加载代码包时,在线下载并存储在SD卡上的代码包的优先级大于随APK发布的代码包,从而实现了热更新。
进一步地,所述判断assets目录下是否存在标识文件之后,进一步包括:
若不存在标识文件,则从所述assets目录读取代码包。
由上述描述可知,若不存在标识文件,则采用React Native框架默认的方式加载代码包。
本发明还提出一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下步骤:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
进一步地,所述根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件具体为:
将安卓应用中对应相同业务的js文件打包到同一代码包中,得到N个业务包和一个基础包,所述N为所述安卓应用的业务类型数;
生成一个标识文件。
进一步地,所述从SD卡的预设目录下的读取更新的代码包具体为:
通过文件映射的方式从SD卡的预设目录下的读取更新的代码包。
进一步地,所述从SD卡的预设目录下的读取更新的代码包之后,进一步包括:
若所述预设目录下不存在更新的代码包,则从所述安卓应用的assets目录读取对应的代码包。
进一步地,所述判断assets目录下是否存在标识文件之后,进一步包括:
若不存在标识文件,则从所述assets目录读取代码包。
实施例一
请参照图2,本发明的实施例一为:一种安卓应用的热更新方法,可应用在ReactNative开发的移动产品中,包括如下步骤:
S1:根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N+1个代码包由N个业务包和1个基础包组成,所述N为所述安卓应用的业务类型数。具体地,自定义打包工具,在React Native的打包工具unbundle的基础上,将相同业务的js文件打包到同一代码包中,则会得到一个基础包和N个业务包,所述基础包中的js文件存储的是启用应用所必需的数据,N个业务包分别对应安卓应用的N个业务类型,同时,打包时,还会额外生成一个标识文件ApfBundle。
S2:将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;即生成Android APK(安卓手机软件的安装包),APK中包含所述N+1个代码包和标识文件ApfBundle,并存储在APK的assets目录下。APP运行时,默认加载assets目录下的代码包,这些代码包是无法修改的,除非升级APP。
S3:将更新的代码包下载至SD卡的预设目录下。一般情况下,一些小修复、小优化是不会要求用户重新安装App的。APP会有个更新机制,后台会从网络上检测是否有更新的代码包,如果有更新的代码包,则会将其下载在SD卡指定的位置。本实施例中,若一个业务包中有一个js文件进行了更新,则会将整个更新后的业务包下载至SD卡的预设目录下。
S4:安卓应用启动时,判断assets目录下是否存在标识文件,若是,则执行步骤S5,若否,则采用React Native框架默认的加载代码包的方式,即直接加载APK内所需的代码包,也即执行步骤S7。
S5:判断SD卡的预设目录下是否存在所需的代码包,若是,则执行步骤S6,若否,则执行步骤S7。
S6:从SD卡的预设目录读取所需的更新后的代码包。
S7:从assets目录读取所需的代码包。
也就是说,当assets目录下存在标识文件ApfBundle时,在线下载并存储在SD卡上的代码包的优先级大于随APK发布的代码包,从而实现了热更新。
本实施例中的打包方式是基于unbundle命令的打包方式修改的,同时,修改了React Native框架c++层的内部的实现,增加加载unbundle打包的代码包的处理分支,允许React Native框架通过文件映射的方式加载SD卡上使用unbundle打包的代码包。因此,修改后的React Native框架加载代码包时是支持加载SD卡上的代码包的。
相比现有技术中两种极端的打包方式,本实施例通过采用折中的打包方式,将属于同一业务的js文件打包到同一个代码包中,后续可按业务需求加载不同的业务包,提高页面启动速度的同时不影响系统性能;同时,在打包时额外生成一个标识文件,当启动应用时,若存在该标识文件,则优先从SD卡中获取更新的代码包,从而实现了热更新。
实施例二
本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下步骤:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
进一步地,所述根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件具体为:
将安卓应用中对应相同业务的js文件打包到同一代码包中,得到N个业务包和一个基础包,所述N为所述安卓应用的业务类型数;
生成一个标识文件。
进一步地,所述从SD卡的预设目录下的读取更新的代码包具体为:
通过文件映射的方式从SD卡的预设目录下的读取更新的代码包。
进一步地,所述从SD卡的预设目录下的读取更新的代码包之后,进一步包括:
若所述预设目录下不存在更新的代码包,则从所述安卓应用的assets目录读取对应的代码包。
进一步地,所述判断assets目录下是否存在标识文件之后,进一步包括:
若不存在标识文件,则从所述assets目录读取代码包。
综上所述,本发明提供的一种安卓应用的热更新方法及计算机可读存储介质,相比现有技术中两种极端的打包方式,通过采用折中的打包方式,将属于同一业务的js文件打包到同一个代码包中,后续可按业务需求加载不同的业务包,提高页面启动速度的同时不影响系统性能;同时,在打包时额外生成一个标识文件,当启动应用时,若存在该标识文件,则优先从SD卡中获取更新的代码包,从而实现了热更新。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种安卓应用的热更新方法,其特征在于,包括:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
2.根据权利要求1所述的安卓应用的热更新方法,其特征在于,所述根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件具体为:
将安卓应用中对应相同业务的js文件打包到同一代码包中,得到N个业务包和一个基础包,所述N为所述安卓应用的业务类型数;
生成一个标识文件。
3.根据权利要求1所述的安卓应用的热更新方法,其特征在于,所述从SD卡的预设目录下的读取更新的代码包具体为:
通过文件映射的方式从SD卡的预设目录下的读取更新的代码包。
4.根据权利要求1所述的安卓应用的热更新方法,其特征在于,所述从SD卡的预设目录下的读取更新的代码包之后,进一步包括:
若所述预设目录下不存在更新的代码包,则从所述安卓应用的assets目录读取对应的代码包。
5.根据权利要求1所述的安卓应用的热更新方法,其特征在于,所述判断assets目录下是否存在标识文件之后,进一步包括:
若不存在标识文件,则从所述assets目录读取代码包。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如下步骤:
根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件,所述N为所述安卓应用的业务类型数;
将所述N+1个代码包和标识文件存储至安卓应用的assets目录下;
当检测到有更新的代码包,则将所述更新的代码包下载至SD卡的预设目录下;
安卓应用启动时,判断assets目录下是否存在标识文件;
若存在,则从SD卡的预设目录读取更新的代码包。
7.根据权利要求6所述的计算机可读存储介质,其特征在于,所述根据预设的打包方式对安卓应用的js文件进行打包,得到N+1个代码包和一个标识文件具体为:
将安卓应用中对应相同业务的js文件打包到同一代码包中,得到N个业务包和一个基础包,所述N为所述安卓应用的业务类型数;
生成一个标识文件。
8.根据权利要求6所述的计算机可读存储介质,其特征在于,所述从SD卡的预设目录下的读取更新的代码包具体为:
通过文件映射的方式从SD卡的预设目录下的读取更新的代码包。
9.根据权利要求6所述的计算机可读存储介质,其特征在于,所述从SD卡的预设目录下的读取更新的代码包之后,进一步包括:
若所述预设目录下不存在更新的代码包,则从所述安卓应用的assets目录读取对应的代码包。
10.根据权利要求6所述的计算机可读存储介质,其特征在于,所述判断assets目录下是否存在标识文件之后,进一步包括:
若不存在标识文件,则从所述assets目录读取代码包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811202894.7A CN111061501B (zh) | 2018-10-16 | 2018-10-16 | 安卓应用的热更新方法及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811202894.7A CN111061501B (zh) | 2018-10-16 | 2018-10-16 | 安卓应用的热更新方法及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061501A true CN111061501A (zh) | 2020-04-24 |
CN111061501B CN111061501B (zh) | 2023-12-29 |
Family
ID=70296665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811202894.7A Active CN111061501B (zh) | 2018-10-16 | 2018-10-16 | 安卓应用的热更新方法及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061501B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112882746A (zh) * | 2021-02-03 | 2021-06-01 | 网易(杭州)网络有限公司 | 应用程序的更新方法、装置、存储介质及计算机设备 |
CN113434154A (zh) * | 2021-06-11 | 2021-09-24 | 青岛海尔科技有限公司 | 安卓应用程序打包方法、装置、存储介质及电子装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102707977A (zh) * | 2012-05-17 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 一种基于Android应用软件的增量升级方法 |
US20170102929A1 (en) * | 2015-10-12 | 2017-04-13 | Samsung Electronics Co., Ltd. | System and Method to Reduce Storage Area Usage of Android Application |
CN106569844A (zh) * | 2016-09-23 | 2017-04-19 | 北京五八信息技术有限公司 | 程序代码更新的处理方法、装置和设备 |
CN108228717A (zh) * | 2017-12-06 | 2018-06-29 | 五八有限公司 | 页面的加载方法及装置 |
-
2018
- 2018-10-16 CN CN201811202894.7A patent/CN111061501B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102707977A (zh) * | 2012-05-17 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 一种基于Android应用软件的增量升级方法 |
US20170102929A1 (en) * | 2015-10-12 | 2017-04-13 | Samsung Electronics Co., Ltd. | System and Method to Reduce Storage Area Usage of Android Application |
CN106569844A (zh) * | 2016-09-23 | 2017-04-19 | 北京五八信息技术有限公司 | 程序代码更新的处理方法、装置和设备 |
CN108228717A (zh) * | 2017-12-06 | 2018-06-29 | 五八有限公司 | 页面的加载方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112882746A (zh) * | 2021-02-03 | 2021-06-01 | 网易(杭州)网络有限公司 | 应用程序的更新方法、装置、存储介质及计算机设备 |
CN112882746B (zh) * | 2021-02-03 | 2023-07-07 | 网易(杭州)网络有限公司 | 应用程序的更新方法、装置、存储介质及计算机设备 |
CN113434154A (zh) * | 2021-06-11 | 2021-09-24 | 青岛海尔科技有限公司 | 安卓应用程序打包方法、装置、存储介质及电子装置 |
CN113434154B (zh) * | 2021-06-11 | 2023-07-21 | 青岛海尔科技有限公司 | 安卓应用程序打包方法、装置、存储介质及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111061501B (zh) | 2023-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108027741B (zh) | 基于补丁升级的文件处理方法、装置、终端以及存储介质 | |
CN104182255B (zh) | 一种系统应用的库文件升级方法及终端 | |
CN107870787B (zh) | 应用程序插件化加载方法及系统 | |
US10761867B2 (en) | Nested emulation and dynamic linking environment | |
EP3128421A1 (en) | Method, device, and system for achieving java application installation by cloud compilation | |
CN105786538B (zh) | 基于安卓系统的软件升级方法和装置 | |
EP3528149A1 (en) | Software repackaging prevention method and device | |
CN104866293B (zh) | 一种对Android应用程序扩展功能的方法及装置 | |
CN107885540A (zh) | 一种加载应用程序静态资源的方法、装置及终端 | |
CN108647032B (zh) | 应用加载方法及装置、计算机装置和计算机可读存储介质 | |
CN108845841B (zh) | 改变终端应用行为的方法、装置及终端 | |
CN109933350B (zh) | 在应用中嵌入代码的方法、装置及电子设备 | |
CN111309303B (zh) | 代码生成方法、装置、计算机设备和存储介质 | |
CN107305495A (zh) | 实现软件安装包功能修改的方法及终端 | |
CN111061501A (zh) | 安卓应用的热更新方法及计算机可读存储介质 | |
CN111651169B (zh) | 基于web容器的区块链智能合约运行方法及系统 | |
CN109960511B (zh) | 基于虚拟化技术的动态库下发方法、存储介质及智能终端 | |
US9098355B2 (en) | Method and apparatus for substituting compiler built-in helper functions with machine instructions | |
CN110837383B (zh) | 应用免安装升级方法及装置 | |
CN109710287B (zh) | 一种热更新方法、装置及计算机存储介质 | |
CN117075960B (zh) | 程序重构方法、应用跨平台迁移方法、装置与计算设备 | |
CN112732349A (zh) | 加载so库的方法、装置、电子设备和计算机可读存储介质 | |
CN113312073B (zh) | 一种安装包文件处理方法和相关装置 | |
WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 |
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 |