一种应用程序配置文件的更新方法及装置转让专利

申请号 : CN201611208520.7

文献号 : CN106843842B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 焦阳郭伟杜乐

申请人 : 光锐恒宇(北京)科技有限公司

摘要 :

本发明公开了一种应用程序配置文件的更新方法及装置,涉及计算机技术领域,能够快速更新应用程序的配置文件,节省系统运行时间。所述方法包括:当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据,根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值,对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。本发明主要用于应用程序配置文件的更新。

权利要求 :

1.一种应用程序配置文件的更新方法,其特征在于,包括:当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据;

根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值;

对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。

2.根据权利要求1所述的方法,其特征在于,所述解析所述应用程序配置文件,得到预设数据结构的中间数据包括:加载所述应用程序配置文件中的二进制数据;

将所述二进制数据转换为预设数据结构的中间数据。

3.根据权利要求2所述的方法,其特征在于,所述加载所述应用程序配置文件中的二进制数据包括:根据所述应用程序配置文件的魔术数字读取应用程序配置文件的文件类型;

根据所述配置文件的文件类型加载所述应用程序配置文件中的二进制数据。

4.根据权利要求1-3中任一项所述的方法,其特征在于,所述预设数据结构的中间数据包括文本数组、资源数组以及标签树。

5.根据权利要求4所述的方法,其特征在于,所述根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值包括:遍历所述标签树,查找所述标签索引在所述标签树中对应的属性类型;

根据所述属性类型,更新所述标签索引对应所述中间数据的属性值。

6.根据权利要求5所述的方法,其特征在于,若所述属性类型为文本类型时,所述更新所述标签索引对应所述中间数据的属性值包括:根据所述标签索引查找所述标签树中对应的文本索引;

根据所述文本索引更新所述文本数组的属性值;

根据所述文本数组的属性值更新所述标签树的文本索引。

7.根据权利要求5所述的方法,其特征在于,若所述属性类型为数值类型时,所述更新所述标签索引对应所述中间数据的属性值包括:更新所述标签索引对应所述标签树的属性值。

8.根据权利要求4所述的方法,其特征在于,所述对更新后的中间数据进行序列化,得到更新后的应用程序配置文件包括:分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据;

将所述序列化后的二进制数据写入至目标文件,得到更新后的应用程序配置文件。

9.根据权利要求8所述的方法,其特征在于,所述对所述文本数组进行序列化包括:根据所述文本数组中文本所占字符串的数量进行内存分配,得到文本占用内存;

根据所述文本占用内存将所述文本数组中的文本写入内存;

计算所述文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐。

10.根据权利要求9所述的方法,其特征在于,所述计算文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐包括:根据文本数组中上一个文本偏移量和上一个文本长度,计算文本数组中每个文本偏移量;

根据所述文本数组中的文本偏移量和所述文本占用内存,对写入内存中的文本进行补齐。

11.根据权利要求8所述的方法,其特征在于,所述对所述标签树进行序列化包括:根据标签树中标签的类型计算标签占用内存;

根据所述标签占用内存将所述标签树中的标签写入内存。

12.根据权利要求11所述的方法,其特征在于,在所述根据所述标签占用内存将所述标签树中的标签写入内存之后,还包括:判断所述标签是否存在子标签;

若存在,则根据所述子标签的类型计算子标签占用内存;

根据所述子标签占用内存将所述子标签写入内存。

13.一种应用程序配置文件的更新装置,其特征在于,包括:解析单元,用于当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据;

更新单元,用于根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值;

序列化处理单元,用于对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。

14.根据权利要求13所述的装置,其特征在于,所述解析单元包括:加载模块,用于加载所述应用程序配置文件中的二进制数据;

转换模块,用于将所述二进制数据转换为预设数据结构的中间数据。

15.根据权利要求14所述的装置,其特征在于,所述加载模块,还用于根据所述应用程序配置文件的魔术数字读取应用程序配置文件的文件类型;

所述加载模块,还用于根据所述配置文件的文件类型加载所述应用程序配置文件中的二进制数据。

16.根据权利要求13-15中任一项所述的装置,其特征在于,所述预设数据结构的中间数据包括文本数组、资源数组以及标签树。

17.根据权利要求16所述的装置,其特征在于,所述更新单元包括:查找模块,用于遍历所述标签树,查找所述标签索引在所述标签树中对应的属性类型;

更新模块,用于根据所述属性类型,更新所述标签索引对应所述中间数据的属性值。

18.根据权利要求17所述的装置,其特征在于,若所述属性类型为文本类型时,所述更新单元,具体用于根据所述标签索引查找所述标签树中对应的文本索引;

所述更新单元,具体还用于根据所述文本索引更新所述文本数组的属性值;

所述更新单元,具体还用于根据所述文本数组的属性值更新所述标签树的文本索引。

19.根据权利要求17所述的装置,其特征在于,若所述属性类型为数值类型时,所述更新单元,具体还用于更新所述标签索引对应所述标签树的属性值。

20.根据权利要求16所述的装置,其特征在于,所述序列化处理单元包括:序列化处理模块,用于分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据;

写入模块,用于将所述序列化后的二进制数据写入至目标文件,得到更新后的应用程序配置文件。

21.根据权利要求20所述的装置,其特征在于,所述序列化处理模块,具体用于根据所述文本数组中文本所占字符串的数量进行内存分配,得到文本占用内存;

所述序列化处理模块,具体还用于根据所述文本占用内存将所述文本数组中的文本写入内存;

所述序列化处理模块,具体还用于计算所述文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐。

22.根据权利要求21所述的装置,其特征在于,所述序列化处理模块,具体还用于根据文本数组中上一个文本偏移量和上一个文本长度,计算文本数组中每个文本偏移量;

所述序列化处理模块,具体还用于根据所述文本数组中的文本偏移量和所述文本占用内存,对写入内存中的文本进行补齐。

23.根据权利要求20所述的装置,其特征在于,所述序列化处理模块,具体还用于根据标签树中标签的类型计算标签占用内存;

所述序列化处理模块,具体还用于根据所述标签占用内存将所述标签树中的标签写入内存。

24.根据权利要求23所述的装置,其特征在于,所述序列化模块,具体还用于判断所述标签是否存在子标签;

所述序列化模块,具体还用于若所述标签存在子标签,则根据所述子标签的类型计算子标签占用内存;

所述序列化模块,具体还用于根据所述子标签占用内存将所述子标签写入内存。

说明书 :

一种应用程序配置文件的更新方法及装置

技术领域

[0001] 本发明涉及计算机技术领域,特别是涉及一种应用程序配置文件的更新方法及装置。

背景技术

[0002] AndroidManifest.xml是Android程序的全局配置文件,是每个Android程序中必须的文件。它位于开发应用程序的根目录下,描述了程序安装包中的全局数据,包括安装包中的组件、以及各种能够被处理和启动位置等重要信息。
[0003] AndroidManifest.xml中含有大量的Android程序的配置信息,通过更新配置信息可以实现更新应用行为的结果,如系统权限设置、音量调节等。由于Android应用程序中AndroidManifest.xml配置文件通常采用二进制的方式进行存储,如果直接从程序安装包中解压出配置文件会出现乱码情况,使得系统开发人员无法直接对配置文件进行更新。
[0004] 现有技术中通常采用编译工具对AndroidManifest.xml配置文件反编译成可读文本形式的配置文件,然后再将更新后的可读文本形式的配置文件编译成二进制文件,从而实现对配置文件的更新。然而,在进行配置文件更新的过程中,每次都需要对编译工具反编译后的配置文件进行重新编码、压缩以及签名等操作,占用系统运行时间。

发明内容

[0005] 有鉴于此,本发明实施例提供一种应用程序配置文件的更新方法及装置,能够快速更新应用程序的配置文件,节省系统运行时间。
[0006] 为达到上述目的,本发明主要提供如下技术方案:
[0007] 一方面,本发明实施例提供了一种应用程序配置文件的更新方法,该方法包括:
[0008] 当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据;
[0009] 根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值;
[0010] 对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。
[0011] 另一方面,本发明实施例还提供了一种应用程序配置文件的更新装置,该装置包括:
[0012] 解析单元,用于当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据;
[0013] 更新单元,用于根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值;
[0014] 序列化处理单元,用于对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。
[0015] 本发明实施例提供的一种应用程序配置文件的更新方法及装置,与现有的采用编译工具对应用程序配置文件进行更新的方式相比,本发明实施例当接收到对应用程序配置文件的更新指令时,通过解析应用程序配置文件,得到预设数据结构的中间数据,从而根据更新指令中携带的标签索引,更新标签索引对应中间数据的属性值,无需对翻译工具反编译后的配置文件进行重新编码、压缩以及签名等操作,进而实现对应用程序配置文件的更新,通过对更新后的中间数据进行序列化,能够快速将应用程序配置文件还原成二进制形式,节省了系统运行时间。
[0016] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

[0017] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0018] 图1示出了本发明实施例提供的一种应用程序配置文件的更新方法流程图;
[0019] 图2示出了本发明实施例提供的另一种应用程序配置文件的更新方法流程图;
[0020] 图3示出了本发明实施例提供的一种应用程序配置文件的更新装置结构示意图;
[0021] 图4示出了本发明实施例提供的另一种应用程序配置文件的更新装置结构示意图。

具体实施方式

[0022] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0023] 本发明实施例提供一种应用程序配置文件的更新方法,如图1所示,所述方法包括:
[0024] 101、当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据。
[0025] 由于应用程序配置文件中存储有大量安卓应用的配置信息,通常情况,在应用程序需要发布或者升级的情况下,当接收到对应用程序的更新指令时,研发人员通过更新配置文件能够实现新的应用行为,从而实现应用发布或者应用升级。
[0026] 这里预设数据结构的中间数据可以包括文本数组、资源数组以及标签树三部分数据组成,其中,文本数组为专有数据结构的数据,用于存放配置文件中标签的每一个文本,每个标签用文本数组的索引指向文本,资源数组用于存放应用程序配置文件的所有资源,通常为空,标签树为与应用程序配置文件文本中结构相一致的树形结构,以标签为树形结构的节点。
[0027] 通常情况下,应用程序配置文件是以二进制的形式进行存储的,无法直接用文本的方式进行更新,对于本发明实施例通过解析应用程序配置文件,得到预设数据结构的中间数据,使得应用程序配置文件能够转换为可以更新的预设数据结构的中间数据。
[0028] 102、根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值。
[0029] 其中,由于应用程序配置文件中包含有大量的配置信息,标签索引用于表明更新配置文件对应的位置,应用程序配置文件的更新指令中携带有需要更新配置文件的标签索引,通过标签索引能够寻找到待更新配置文件的位置。
[0030] 对于本发明实施例,更新标签索引对应中间数据的属性信息可以包括但不局限于下述实现方式,首先通过标签索引查找到该标签索引对应中间数据的位置,这里中间数据的位置通常为文本数组或标签树中对应的位置,对于不同标签类型对应中间数据的位置有所不同,例如,当标签类型为数字时,可以直接在标签树中对标签的属性值进行修改,从而更新对应位置中间数据的属性值,当标签类型为文本时,可以通过查找标签树中对应文本数组的文本索引,从而更新文本索引对应文本数组的属性值,同时对应更新标签树的文本索引。
[0031] 需要说明的是,这里可以通过在对应位置中间数据的属性信息处添加数据、修改数据或者删除数据的方式来实现更新操作,本发明实施例对更新应用程序程序配置文件的具体内容不进行限定。
[0032] 103、对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。
[0033] 这里对更新后的中间数据进行序列化的过程主要包括对文本数组进行序列化、对资源数组进行序列化以及对标签树进行序列化,由于资源数组在转换为预设数据结构的中间数据过程中并未发生改动,因此对更新后的中间数据进行序列化的过程主要包括对文本数组进行序列化以及对标签树进行序列化。
[0034] 这里对更新后的中间数据进行序列化的目的为将更新后的中间数据还原为二进制形式的应用程序配置文件,进一步将序列化的文本数组、未处理的资源数组以及序列化的标签树一起写入到目标文件中,可以得到更新后的应用程序配置文件。
[0035] 这里需要说明的是,在写入目标文件的过程中,为了进一步区分不同的文件类型,还需要写入目标文件的魔术数字以及更新后的应用程序配置文件的整体大小。
[0036] 本发明实施例提供的一种应用程序配置文件的更新方法,与现有的采用编译工具对应用程序配置文件进行更新的方式相比,本发明实施例当接收到对应用程序配置文件的更新指令时,通过解析应用程序配置文件,得到预设数据结构的中间数据,从而根据更新指令中携带的标签索引,更新标签索引对应中间数据的属性值,无需对翻译工具反编译后的配置文件进行重新编码、压缩以及签名等操作,进而实现对应用程序配置文件的更新,通过对更新后的中间数据进行序列化,能够快速将应用程序配置文件还原成二进制形式,节省了系统运行时间。
[0037] 进一步地,本发明实施例提供另一种应用程序配置文件的更新方法,如图2所示,所述方法包括:
[0038] 201、加载所述应用程序配置文件中的二进制数据。
[0039] 在安卓系统中,应用程序配置文件通常是标准的XML文件,每个XML标签都有不同的含义,大部分的配置参数都放在标签的属性中。XML文件标记和属性时区分大小写的,它是可以按需要更改的,研发人员可以使用配置文件来更改设置,而不必要重编译应用程序。
[0040] 对于本发明实施例,加载应用程序配置文件中的二进制数据可以采用采用下述实现方式,首先根据应用程序配置文件的魔术数字读取应用程序配置文件的文件类型,这里的魔术数字用于标识不同文件类型,为指定文件的最开头的几个唯一区别于其他文件类型的字节,有了这些魔术数字,可以很方便的区分不同文件类型,从而进一步加载应用程序配置文件中的二进制数据,例如,一个JPEG类型的文件,它开头的一些字节可能是类似这样的“ffd8 ffe0 0010 4a46 4946 0001 0101 0047....JFIF...G”,这里的“ffd8”就表示了这个文件是一个JPEG类型的文件,“ffe0”表示的是JFIF类型结构。这里需要说明的时,如果配置文件的类型对应的不是二进制数据,则不进行加载。
[0041] 示例性的,对于本发明实施例中安卓应用程序配置文件的二进制格式如表1所示,表1主要对应有三部分数据组成,二进制数据格式的文本数据、资源数据以及标签数据。
[0042] 表1 Android二进制格式
[0043]
[0044]
[0045] 其中,文本字典类型、文本字典大小、文本个数、模式个数、分节符、文本字典起始位置、模式起始位置、每个文本的起始位置、文本区、对齐位部分对应二进制文本数据,文本区中每个文本格式如表2所示,资源区类型、资源区大小、资源区部分对应二进制资源数据,内容区部分对应二进制标签数据,内容区中标签结构如表3所示。
[0046] 表2文本区中每个文本格式
[0047] 名称 大小 描述长度 2B 文本长度n
文本内容 n*2B 每2个字节表示一个字符
结束符 2B 内容为0x0000
[0048] 其中,文本中每个文本格式可以包括长度、文本内容以及结束符。
[0049] 表3内容区中标签结构
[0050]
[0051] 其中,内容区中标签结构可以包括标签类型、标签内容大小、源代码所在行、补位、前缀、名称、属性区标记、属性个数、属性源代码行数以及属性列表,标签类型如表4所示,属性列表如表6所示。
[0052] 表4标签类型
[0053] 标记 描述0x00100100 命名空间开始
0x00100101 命名空间结束
0x00100102 标签开始
0x00100103 标签结束
0x00100104 文本
[0054] 其中,标签类型通常包括两种,一种是命名空间,另一种是标签,在XML文件中,为了避免XML的标签同名,XML也拥有命名空间,标签可以放在命名空间之中,不同的命名空间中的相同名称标签是不同的标签。
[0055] 表5属性列表
[0056]
[0057] 其中,属性列表可以包括属性命名空间、属性名称、属性文本值、属性类型以及属性值。
[0058] 202、将所述二进制数据转换为预设数据结构的中间数据。
[0059] 由于二进制数据无法直接通过文本形式实现更新,本发明实施例将二进制数据转化为预设数据结构的中间数据,从而实现应用程序配置文件的更新,其中,预设数据结构的中间数据包括文本数组、资源数组以及标签树。
[0060] 示例性,预设数据结构的中间数据中文本数组的数据结构如表6所示,预设数据结构的中间数据中资源数组的数据结构如表7所示,预设数据结构的中间数据中标签树的数据结构如表8所示,其中,标签树属性数据结构如表9所示。
[0061] 表6文本数组的数据结构
[0062]
[0063] 表7资源数组的数据结构
[0064] 名称 类型 描述类型 数值  
大小 数值  
内容数组 数值数组  
[0065] 表8标签树的数据结构
[0066]
[0067]
[0068] 表9标签树属性数据结构
[0069] 名称 类型 描述命名空间 数值  
名称 数值 文本索引
属性文本值 数值 文本索引
属性类型 数值 文本或数值
属性值 数值  
[0070] 203、遍历所述标签树,查找所述标签索引在所述标签树中对应的属性类型。
[0071] 由于标签树为与应用程序配置文件文本中结构相一致的树形结构,以标签为树形结构的节点,为了实现对应用程序配置文件的更新,需要根据更新指令中携带的标签索引从标签树中找到对应更新的位置,这里的标签索引具体可以包括标签名、属性名、源文本数据以及待更新属性名分别对应的的索引值,然后通过遍历标签树,查找标签索引在标签树中对应的属性类型,这里的属性类型可以包括数值类型和文本类型。
[0072] 204、根据所述属性类型,更新所述标签索引对应所述中间数据的属性值。
[0073] 需要说明的是,本发明实施例对于不同属性类型的标签索引所采用的更新方式不同,本发明实施例通过首先通过查找标签树属性列表中的属性类型获取标签索引的属性类型,这里的属性类型主要包括文本和数值两种类型,进一步对不同属性类型的标签索引对应的属性值进行更新。
[0074] 对于本发明实施例,若属性类型为文本类型时,更新标签索引对应所述中间数据的属性值可以包括但不局限于下述实现方式,由于每个文本索引指向相应标签,首先根据标签索引查找标签树中对应的文本索引,然后通过文本索引更新文本数组的属性值,这里通常为在文本数组中增加一条数据,从而对文本数组的属性值进行更新,在对文本数组的属性值更新的同时,由于文本数组的属性值发生了改变,因此根据文本数组的属性值更新标签树的文本索引。
[0075] 对于本发明实施例,若属性类型为数值类型时,更新标签索引对应所述中间数据的属性值可以包括但不局限于下述实现方式,由于标签树为与文本结构一致的树形结构,标签为标签树的节点,可以直接通过更新标签属性列表中的属性值,从而更新标签索引对应标签树的属性值。
[0076] 205、分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据。
[0077] 对于本发明实施例,对文本数组进行序列化可以包括但不局限于下述实现方式,首先根据文本数组中文本所占字符串的数量进行内存分配,得到文本占用内存,例如内存的大小可以为(文本所占字符串个数+7)*4,然后分别按照文本数组的大小、文本个数、模式个数、分隔符的顺序将文本数组中的文本写入内存,每写入一个文本,先计算写入长度,再写入具体内容,最后写入0X0000,作为结束符。为了保证写入内存中数据的整齐,计算文本数组中的文本偏移量,根据文本偏移量对写入内存中的文本进行补齐,这里可以根据文本数组中上一个文本偏移量和上一个文本长度,计算文本数组中每个文本偏移量,如每个文本偏移量为上一个文本的偏移量+上一个文本的长度*2+4,默认第一个文本的偏移量为0,将最后一个文本的偏移量加上最后一个文本占用内存之和对4取对数,将余数个值为0的字节写入内存,作为对齐,如果余数恰好为0,则直接写4个字节的0进入内存。
[0078] 需要说明的是,由于资源数组在转换为预设数据结构的中间数据过程中几乎不会改动,因此对于资源数组的序列化仅需要将资源数组中的数据原样写入到内存中即可。
[0079] 对于本发明实施例,对标签树进行序列化可以包括但不局限于下述实现方式,首先根据标签树中标签的类型计算标签占用内存,这里如果是标签类型,则占用内存大小为4*(9+属性个数*5),如果是命名空间类型,则占用内存大小为4*6,根据标签占用内存将标签树中的标签写入内存,如果是标签类型,将标签类型、大小、源代码行号、分隔符、前缀以及名称一次性写入内存,如果是命名空间类型,将每个属性的命名空间、名称、属性文本值、属性类型以及属性值一次性写入内存。
[0080] 对于本发明实施例,在对标签树进行序列化之后的过程中,由于标签树中可能存在多个子标签,还需要判断所述标签是否存在子标签;若存在,则根据子标签的类型计算子标签占用内存,进一步根据子标签占用内存将子标签写入内存。本步骤通过分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据,该序列化后的二进制数据同样包括文本数据、资源数据以及标签数据三部分组成。
[0081] 206、将所述序列化后的二进制数据写入至目标文件,得到更新后的应用程序配置文件。
[0082] 对于将序列化后的二进制数据还原为应用程序配置文件,还需要将序列化后的文本数据、资源数据以及标签数据一并写入至目标文件后,可以得到更新后的应用程序配置文件,在写入的过程中还需要将魔术数字以及文件整体大小一并写入。
[0083] 本发明实施例的另一种应用程序配置文件的更新方法,无需通过安卓软件开发工具的编译过程,直接将应用程序配置文件进行解析、更新以及序列化,能够对二进制形式的应用程序配置文件实现快速更新与还原,提高了系统的运行速度。
[0084] 为了实现上述方法实施例,本实施例提供一种与上述方法实施例对应的装置实施例,如图3所示,其示出了一种应用程序配置文件的更新装置,该装置可以包括:
[0085] 解析单元31,可以用于当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据,该解析单元31为一种应用程序配置文件的更新装置中中用于解析应用程序配置文件的主要功能模块,从而使得应用程序配置文件转换为能够被更新数据结构的中间数据;
[0086] 其中,预设数据结构的中间数据可以包括文本数组、资源数组以及标签树三部分数据组成。
[0087] 更新单元32,可以用于根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值,该更新单元32为一种应用程序配置文件的更新装置中用于更新标签索引对应中间数据的属性值的主要功能模块,具体可以通过标签索引查找到该标签索引对应中间数据的位置,更新对应位置中间数据的属性;
[0088] 序列化处理单元33,可以用于对更新后的中间数据进行序列化,得到更新后的应用程序配置文件,该序列化处理单元33为一种应用程序配置文件的更新装置中用于对更新后中间数据进行序列化的主要功能模块,从而将更新后的中间数据还原为二进制形式的应用程序配置文件。
[0089] 本发明实施例提供的一种应用程序配置文件的更新装置,与现有的采用编译工具对应用程序配置文件进行更新的方式相比,本发明实施例当接收到对应用程序配置文件的更新指令时,通过解析应用程序配置文件,得到预设数据结构的中间数据,从而根据更新指令中携带的标签索引,更新标签索引对应中间数据的属性值,无需对翻译工具反编译后的配置文件进行重新编码、压缩以及签名等操作,进而实现对应用程序配置文件的更新,通过对更新后的中间数据进行序列化,能够快速将应用程序配置文件还原成二进制形式,节省了系统运行时间。
[0090] 进一步地,如图4所示,本发明实施例提供了另一种应用程序配置文件的更新装置,
[0091] 由于二进制数据无法直接通过文本形式实现更新,本发明实施例为进一步了将二进制数据转化为能够被更新的预设数据结构的中间数据,所述解析单元31包括:
[0092] 加载模块311,可以用于加载所述应用程序配置文件中的二进制数据,具体根据应用程序配置文件的魔术数字读取应用程序配置文件的文件类型,如果配置文件的类型对应的不是二进制数据,则不进行加载;
[0093] 转换模块312,可以用于将所述二进制数据转换为预设数据结构的中间数据,从而实现应用程序配置文件的更新,其中,预设数据结构的中间数据包括文本数组、资源数组以及标签树。
[0094] 所述加载模块311,还可以用于根据所述应用程序配置文件的魔术数字读取应用程序配置文件的文件类型;
[0095] 所述加载模块311,还可以用于根据所述配置文件的文件类型加载所述应用程序配置文件中的二进制数据。
[0096] 对于本发明实施例,由于更新指令中的标签索引对应的属性类型有所不同,进一步对不同属性类型的标签索引对应的属性值进行更新,所述更新单元32包括:
[0097] 查找模块321,可以用于遍历所述标签树,查找所述标签索引在所述标签树中对应的属性类型,这里的属性类型可以包括数值类型和文本类型;
[0098] 更新模块322,可以用于根据所述属性类型,更新所述标签索引对应所述中间数据的属性值。
[0099] 若所述属性类型为文本类型时,所述更新单元32,具体可以用于根据所述标签索引查找所述标签树中对应的文本索引,根据所述文本索引更新所述文本数组的属性值,根据所述文本数组的属性值更新所述标签树的文本索引。
[0100] 若所述属性类型为数值类型时,所述更新单元32,具体还可以用于更新所述标签索引对应所述标签树的属性值。
[0101] 对于本发明实施例,由于预设数据结构的中间数据包括文本数组、资源数组以及标签树三部分数据组成,所述序列化处理单元33包括:
[0102] 序列化处理模块331,可以用于分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据;
[0103] 写入模块332,可以用于将所述序列化后的二进制数据写入至目标文件,得到更新后的应用程序配置文件。
[0104] 对于文本数组的序列化,所述序列化处理模块331,具体可以用于根据所述文本数组中文本所占字符串的数量进行内存分配,得到文本占用内存;
[0105] 所述序列化处理模块331,具体还可以用于根据所述文本占用内存将所述文本数组中的文本写入内存;
[0106] 所述序列化处理模块331,具体还可以用于计算所述文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐。
[0107] 所述序列化处理模块331,具体还可以用于根据文本数组中上一个文本偏移量和上一个文本长度,计算文本数组中每个文本偏移量;
[0108] 所述序列化处理模块331,具体还可以用于根据所述文本数组中的文本偏移量和所述文本占用内存,对写入内存中的文本进行补齐。
[0109] 对于标签树的序列化,所述序列化处理模块331,具体还可以用于根据标签树中标签的类型计算标签占用内存;
[0110] 所述序列化处理模块331,具体还可以用于根据所述标签占用内存将所述标签树中的标签写入内存。
[0111] 所述序列化模块331,具体还可以用于判断所述标签是否存在子标签;
[0112] 所述序列化模块331,具体还可以用于若所述标签存在子标签,则根据所述子标签的类型计算子标签占用内存;
[0113] 所述序列化模块331,具体还可以用于根据所述子标签占用内存将所述子标签写入内存。
[0114] 本发明实施例的另一种应用程序配置文件的更新装置,无需通过安卓软件开发工具的编译过程,直接将应用程序配置文件进行解析、更新以及序列化,能够对二进制形式的应用程序配置文件实现快速更新与还原,提高了系统的运行速度。
[0115] 本发明公开了A1、一种应用程序配置文件的更新方法,包括:
[0116] 当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据;
[0117] 根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值;
[0118] 对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。
[0119] A2、如A1所述的方法,所述解析所述应用程序配置文件,得到预设数据结构的中间数据包括:
[0120] 加载所述应用程序配置文件中的二进制数据;
[0121] 将所述二进制数据转换为预设数据结构的中间数据。
[0122] A3、如A2所述的方法,所述加载所述应用程序配置文件中的二进制数据包括:
[0123] 根据所述应用程序配置文件的魔术数字读取应用程序配置文件的文件类型;
[0124] 根据所述配置文件的文件类型加载所述应用程序配置文件中的二进制数据。
[0125] A4、如A1-A3中任一项所述的方法,所述预设数据结构的中间数据包括文本数组、资源数组以及标签树。
[0126] A5、如A4所述的方法,所述根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值包括:
[0127] 遍历所述标签树,查找所述标签索引在所述标签树中对应的属性类型;
[0128] 根据所述属性类型,更新所述标签索引对应所述中间数据的属性值。
[0129] A6、如A5所述的方法,若所述属性类型为文本类型时,所述更新所述标签索引对应所述中间数据的属性值包括:
[0130] 根据所述标签索引查找所述标签树中对应的文本索引;
[0131] 根据所述文本索引更新所述文本数组的属性值;
[0132] 根据所述文本数组的属性值更新所述标签树的文本索引。
[0133] A7、如A5所述的方法,若所述属性类型为数值类型时,所述更新所述标签索引对应所述中间数据的属性值包括:
[0134] 更新所述标签索引对应所述标签树的属性值。
[0135] A8、如A4所述的方法,所述对更新后的中间数据进行序列化,得到更新后的应用程序配置文件包括:
[0136] 分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据;
[0137] 将所述序列化后的二进制数据写入至目标文件,得到更新后的应用程序配置文件。
[0138] A9、如A8所述的方法,所述对所述文本数组进行序列化包括:
[0139] 根据所述文本数组中文本所占字符串的数量进行内存分配,得到文本占用内存;
[0140] 根据所述文本占用内存将所述文本数组中的文本写入内存;
[0141] 计算所述文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐。
[0142] A10、如A9所述的方法,所述计算文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐包括:
[0143] 根据文本数组中上一个文本偏移量和上一个文本长度,计算文本数组中每个文本偏移量;
[0144] 根据所述文本数组中的文本偏移量和所述文本占用内存,对写入内存中的文本进行补齐。
[0145] A11、如A8所述的方法,所述对所述标签树进行序列化包括:
[0146] 根据标签树中标签的类型计算标签占用内存;
[0147] 根据所述标签占用内存将所述标签树中的标签写入内存。
[0148] A12、如11所述的方法,在所述根据所述标签占用内存将所述标签树中的标签写入内存之后,还包括:
[0149] 判断所述标签是否存在子标签;
[0150] 若存在,则根据所述子标签的类型计算子标签占用内存;
[0151] 根据所述子标签占用内存将所述子标签写入内存。
[0152] B13、一种应用程序配置文件的更新装置,包括:
[0153] 解析单元,用于当接收到对应用程序配置文件的更新指令时,解析所述应用程序配置文件,得到预设数据结构的中间数据;
[0154] 更新单元,用于根据所述更新指令中携带的标签索引,更新所述标签索引对应所述中间数据的属性值;
[0155] 序列化处理单元,用于对更新后的中间数据进行序列化,得到更新后的应用程序配置文件。
[0156] B14、如B13所述的装置,所述解析单元包括:
[0157] 加载模块,用于加载所述应用程序配置文件中的二进制数据;
[0158] 转换模块,用于将所述二进制数据转换为预设数据结构的中间数据。
[0159] B15、如B14所述的装置,其特征在于,
[0160] 所述加载模块,还用于根据所述应用程序配置文件的魔术数字读取应用程序配置文件的文件类型;
[0161] 所述加载模块,还用于根据所述配置文件的文件类型加载所述应用程序配置文件中的二进制数据。
[0162] B16、如B13-B15中任一项所述的装置,所述预设数据结构的中间数据包括文本数组、资源数组以及标签树。
[0163] B17、如B16所述的装置,所述更新单元包括:
[0164] 查找模块,用于遍历所述标签树,查找所述标签索引在所述标签树中对应的属性类型;
[0165] 更新模块,用于根据所述属性类型,更新所述标签索引对应所述中间数据的属性值。
[0166] B18、如B17所述的装置,若所述属性类型为文本类型时,
[0167] 所述更新单元,具体用于根据所述标签索引查找所述标签树中对应的文本索引;
[0168] 所述更新单元,具体还用于根据所述文本索引更新所述文本数组的属性值;
[0169] 所述更新单元,具体还用于根据所述文本数组的属性值更新所述标签树的文本索引。
[0170] B19、如B17所述的装置,若所述属性类型为数值类型时,
[0171] 所述更新单元,具体还用于更新所述标签索引对应所述标签树的属性值。
[0172] B20、如B16所述的装置,所述序列化处理单元包括:
[0173] 序列化处理模块,用于分别对所述文本数组、所述资源数组以及所述标签树进行序列化,得到序列化后的二进制数据;
[0174] 写入模块,用于将所述序列化后的二进制数据写入至目标文件,得到更新后的应用程序配置文件。
[0175] B21、如B20所述的装置,
[0176] 所述序列化处理模块,具体用于根据所述文本数组中文本所占字符串的数量进行内存分配,得到文本占用内存;
[0177] 所述序列化处理模块,具体还用于根据所述文本占用内存将所述文本数组中的文本写入内存;
[0178] 所述序列化处理模块,具体还用于计算所述文本数组中的文本偏移量,根据所述文本偏移量对写入内存中的文本进行补齐。
[0179] B22、如B21所述的装置,
[0180] 所述序列化处理模块,具体还用于根据文本数组中上一个文本偏移量和上一个文本长度,计算文本数组中每个文本偏移量;
[0181] 所述序列化处理模块,具体还用于根据所述文本数组中的文本偏移量和所述文本占用内存,对写入内存中的文本进行补齐。
[0182] B23、如B20所述的装置,其特征在于,
[0183] 所述序列化处理模块,具体还用于根据标签树中标签的类型计算标签占用内存;
[0184] 所述序列化处理模块,具体还用于根据所述标签占用内存将所述标签树中的标签写入内存。
[0185] B24、如B23所述的装置,其特征在于,
[0186] 所述序列化模块,具体还用于判断所述标签是否存在子标签;
[0187] 所述序列化模块,具体还用于若所述标签存在子标签,则根据所述子标签的类型计算子标签占用内存;
[0188] 所述序列化模块,具体还用于根据所述子标签占用内存将所述子标签写入内存。
[0189] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0190] 可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
[0191] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0192] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0193] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0194] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0195] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0196] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0197] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一种数据存储的方法及装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0198] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。