基于Android平台的系统固件定制的方法和Android设备
技术领域
本发明涉及通信领域,更具体地说,涉及一种基于Android平台的系统固件定制的方法。
背景技术
Android平台代码编译后,按照目录要求经一系列的编译后生成的lib、so、图片、铃声等文件,按照ext4格式打包成对应的img文件。此方式要求特定的编译环境,Android目前限定是在64位ubuntu14.04(或更新的版本)、内存8G、磁盘空间100G的机器上。
目前手机系统开发者是直接提供打包好的系统固件给用户使用,也就是又开发者编译好平台代码后提供给用户,如果用户想要做一些和硬件平台无关的定制,如更改开机动画、预装应用、系统设置等,就需要再次由手机系统开发者进行相应的更改后重新编译打包,这样就造成以下两个问题,第一:重新编译打包的系统固件发布,需要按照标准的工作流程,虽然编译过程本身不复杂,但是耗时约一个小时,开发者与用户之间的交流沟通也需要时间,总体比较费时;第二:系统固件版本维护成本高,后续维护需要具有一定经验的程序员或者团队来维护用户需求。
公告号为CN104461533A的中国发明专利申请,公开了“一种基于Marvell LTE平台的系统固件定制方法”,其通过剥离Marvell LTE平台的打包工具,形成为打包模块集成到自己编写的系统固件生成工具中,系统固件生成工具通过定制模块修改编译好的Android源目录,最后打包生成定制的系统固件。此种方法存在着以下缺陷,第一:对于非MarvellLTE平台,此打包模块不具普遍性;第二:需要庞大的源目录作为打包基础,打包过程耗时且固件包较大不便传输。第三:对于定制商业用途的系统固件,开放源目录具有可能会损害商业利益。
发明内容
本发明要解决的技术问题在于,针对现有技术的系统固件定制方法需要庞大的源目录作为打包基础、打包过程耗时且固件包较大不便传输的缺陷,提供一种基于Android平台的系统固件定制的方法。
本发明解决其技术问题所采用的技术方案是:提供一种基于Android平台的系统固件定制的方法,包括如下步骤:
步骤A、根据需要更改在定制目录模板下的文件;
步骤B、设置recovery升级配置文件;
步骤C、将定制目录模板打包成img格式文件;
步骤D、将步骤C生成的img格式文件和步骤B的升级配置文件打包并签名,生成最终的定制包。
在本发明所述的基于Android平台的系统固件定制的方法中,步骤D中采用定制包生成脚本来生成定制包,脚本的输入参数包括定制目录路径、版本号及签名信息。
在本发明所述的基于Android平台的系统固件定制的方法中,其中,所述定制包生成脚本在linux平台上运行。
在本发明所述的基于Android平台的系统固件定制的方法中,所述定制目录模板下的文件包括:开机动画定制文件、白名单定制文件、系统设置定制文件、预装应用定制文件、预装应用动态库定制文件、序列号定制文件、内核开机动画定制文件和系统显示及型号定制文件中的一种或多种。
在本发明所述的基于Android平台的系统固件定制的方法中,步骤A中所述更改包括替换、增加和/或减少文件。
在本发明所述的基于Android平台的系统固件定制的方法中,包括
步骤E、将生成的定制包存储到指定的路径下;
步骤F、将定制包通过recovery模式烧写到Android设备中,以更新所述Android设备到新的定制状态。
在本发明所述的基于Android平台的系统固件定制的方法中,包括:
所述步骤A中,将定制目录模板下原来的开关机动画文件替换为新的开关机动画文件,以更改开机动画;
和/或
在所述步骤A中,将需预装的至少一个apk拷贝到定制目录模板下存放预装apk的目录下,以增加预装apk。
在本发明所述的基于Android平台的系统固件定制的方法中,步骤C中生成的img格式文件包括:
超级块:用于保存块个数、块数据索引和当前分区数据的有效性信息;
块索引:用于保存块类型、块内容的起始位置和块内容的长度;
块内容:用于保存文件名、文件内容和文件路径;及
校验块:用于保存对整个img文件进行sha-1校验的校验和,所述校验块在定制分区结尾预留的32个字节中。
在本发明所述的基于Android平台的系统固件定制的方法中,步骤F中,所述将定制包通过recovery模式烧写到Android设备中包括:通过recovery升级模式烧写定制包到Android设备的定制分区;且,
所述方法还包括:
步骤G、所述Android设备重启后检测所述定制分区是否有改动,并当检测到定制分区有改动时提取定制信息。
本发明解决其技术问题所采用的另一技术方案是:构造一种Android设备,所述Android设备的存储装置上设置有用于存储定制信息的定制分区,且所述Android设备还设置有用于在重启时检测所述定制分区中的定制信息是否有改动,并当检测到有改动时提取定制信息的检测及提取装置。
实施本发明,具有以下有益效果:仅对要定制的部分进行打包,生成定制包更小,方便传输和存储。定制过程不需要使用源目录,更加安全高效。即,不需要重新编译Android平台代码和打包源目录,就可以完成与硬件平台无关的系统定制。而且,本发明的方法具有普遍性,基于Android平台的固件定制都适用。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明基于Android平台的系统固件定制的方法的流程图;
图2是本发明基于Android平台的系统固件定制的方法的一实施例的流程图;
图3是本发明基于Android平台的系统固件定制的方法中采用的文件系统的结构图。
具体实施方式
如图1所示,本发明基于Android平台的系统固件定制的方法包括如下步骤:
步骤A、根据需要更改在定制目录模板下的文件。
步骤B、设置recovery升级配置文件。
步骤C、将定制目录模板打包成img格式文件,该打包操作可由脚本执行。
步骤D、将步骤C生成的img格式文件和步骤B的升级配置文件打包并签名,生成最终的定制包。
Recovery升级配置文件负责对目录模板生成的定制包进行识别,只要使用配套的recovery设置,就能对定制包识别,跟某种具体Android设备无关。另外,有关步骤B、C的执行顺序,既可先执行步骤B,也可先执行步骤C。
本发明所述recovery升级配置文件包括updater-script文件,updater-script是Android设备刷入系统时的脚本文件,由其来决定Android需要刷入哪些内容、如何刷入,是Android设备刷机必不可少的文件。在本发明的各个实施例中,为了配合系统固件定制的方法,对该文件的设置做了改进,配置其作用为:将定制目录模板打包生成的img格式文件提取到Android设备中的一个定制分区,当然,如没有该定制分区则需事先创建该分区。
如图2所示,在本发明的实施例中,本发明基于Android平台的系统固件定制的方法除了包括图1所示的步骤A至步骤D外,还包括:
步骤E、将生成的定制包存储到指定的路径下;
步骤F、将定制包通过recovery模式烧写到Android设备中,以更新所述Android设备到新的定制状态;
步骤G、Android设备检测定制分区的改动,以及提取定制信息。
需要说明的是,当改变定制信息时,定制分区随之改动。例如,可通过定制包的版本号来标识定制分区的改动。在一个实例中,每个定制包都保存着一个唯一的版本号。每次开机时会将定制分区的版本号和系统属性里的版本号作比较,如果相同,则不进行定制,正常开机,如果不同,则从定制分区中提取定制信息,进行系统定制,并将定制分区的版本号覆盖写入到系统属性值里。即通过系统属性值里的版本号和定制分区里的版本号来识别是否有改动。
在本发明的一个实施例中,采用的定制目录模板的结构如下:
定制目录模板:
其左边是定制目录模板,右边是对定制目录的说明/解释。该定制目录模板下包括的文件有:开机动画定制文件、白名单定制文件、系统设置定制文件、预装应用定制文件、预装应用动态库定制文件、序列号定制文件、内核开机动画定制文件和系统显示及型号定制文件。需要说明的是,本发明不限于此,在本发明的其他实施例中,定制目录模板下的文件可包括上述定制文件中的一种或多种,即比上述实施例更多或更少的文件,也可包括其他类型的定制文件。
此外,步骤A中更改在定制目录模板下的文件包括替换、增加和/或减少(即删除一部分原来的定制文件)定制目录模板下的文件。对没有定制的文件,升级过程中不会更改,只会更新定制包中的内容。
在本发明的各个实施例中,步骤D中采用定制包生成脚本来生成定制包,脚本的输入参数包括定制目录路径、版本号及签名信息。输入定制目录的路径这个参数是为了执行步骤C将定制目录模板打包成img格式文件,输入是否签名是为了执行步骤D将生成的img格式文件和升级配置文件打包并签名。
在这里对定制包生成脚本做一下说明。
传统的定制方法主要有两种:
第一种:对Android源目录进行更改定制,如替换开机动画文件,添加或删除内置应用等,然后对更改好的源目录进行打包,生成新的系统固件。
第二种:通过增量包来实现定制,先通过make otapackage生成一个未定制ota升级包,如A.zip,然后对源目录进行更改定制,再生成一个修改后的升级包,如B.zip.然后使用源码中的ota_from_target_files脚本工具,以A.zip和B.zip作为输入生成差分增量包update.zip,这样就实现了只升级更改过的那部分内容,完成系统的定制。
上述两种定制方法存在以下缺陷:第一种要重新打包源目录,费时且生成的是全量升级包,体积较大不便传输,第二种则要打包两次后还要做差分,操作繁琐。
本发明的打包工具具有以下功能:
1、自动遍历目录模板下的所有文件,通过文件后缀名和文件存放位置匹配不同类型的文件,然后依次解析匹配到的文件的相关信息,如文件名、文件内容、文件的大小等。
2、创建一个img格式的打包文件,打包文件按照本发明设定的文件系统进行文件写入,本发明的文件系统结构如图3所示,包括:超级块:保存了块个数、块数据索引和当前分区数据的有效性信息;块索引:保存了块类型、块内容的起始位置和块内容的长度;块内容:保存了文件名、文件内容和文件路径。32B的校验块:用于对整个img文件进行sha-1校验,校验和保存到定制分区结尾预留的32个字节中,其目的是防止篡改。这样就实现了对目录模板的打包。
本发明的脚本工具的功能包括:负责调用打包工具打包目录模板,并添加recovery升级配置和签名信息,然后生成最终的定制包。即执行图1所示的步骤C和步骤D。
本发明基于Android平台的系统固件定制的方法与传统方法的不同之处在于:与上述传统方法的第一种相比,打包的内容不一样,第一种打包了很多不是定制所需的东西。与上述传统方法的第二种相比:打包的方式不一样,第二种通过比较两次打包的的差异来生成定制包,两次打包了不是定制必需的东西,且依赖源目录。
本发明的方法是将要定制的文件汇总打包,然后通过recovery升级模式烧写定制包到Android设备的定制分区,设备重启后会先检测定制分区是否有改动,如果改动了,则按照定制的文件系统结构,从分区中解析出定制信息进行定制,如将内置应用文件提取到指定位置、设置设备型号等;如果没改动,则不对定制分区进行处理,系统保持原来的定制,正常开机。
关于开机检测定制分区的实现方式:本发明的方案中,在Android的框架层(framework层)添加了对定制分区的处理程序,主要实现对定制分区的改动检测和提取定制信息,使分区中的定制信息真正起效。
在本发明的一个实施例中,Android设备的存储装置上设置有用于存储定制信息的定制分区,且该Android设备还设置有用于在设备重启时检测所述定制分区中的定制信息是否有改动,并当检测到有改动时提取定制信息的检测及提取装置。作为选择,该检测及提取装置可由上述Android的框架层(framework层)中对定制分区的处理程序来实现。
在本发明的各个实施例中,定制包生成脚本在linux平台上运行。本发明的方法中定制包的生成不需要编译Android平台代码,所以不依赖特定的编译环境。本发明基于Android平台的系统固件定制的方法所需的环境包括:安装了zip打包工具和java环境的linux平台。
以下是更改系统固件定制的举例。
首先,设计人员实施步骤A:更改在定制目录模板下的文件。
例如,当用户想更改开关机动画时,把定制目录模板下原来的开关机动画文件替换为新的开关机动画文件,然后执行定制包生成脚本,脚本的输入参数包括定制目录路径,版本号和是否签名。生成的定制包会存储到指定的路径下,完成定制。
又例如,如果用户想更改预装apk,可以将需预装apk拷贝到定制目录模板下存放预装apk的目录,支持同时更改多个apk。然后执行定制包生成脚本,所需的定制可以先全部更改完成,然后只执行一次定制包生成脚本,就可以在制定路径下生成定制包,完成定制。
再例如,当用户想更改开关机动画同时还要更改预装apk,则把定制目录模板下原来的开关机动画文件替换为新的开关机动画文件,并将需预装apk拷贝到定制目录模板下存放预装apk的目录,然后执行定制包生成脚本。
最后,将定制包通过recovery模式烧写到Android设备上,更新设备到新的定制状态。定制包是包含定制目录下的全部文件和recovery升级配置文件的一个文件包。定制包烧写到Android设备存储器后,自动执行升级程序。对没有定制的文件,升级过程中不会更改,只会更新定制包中的内容。
以上实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据此实施,并不能限制本发明的保护范围。凡跟本发明权利要求范围所做的均等变化与修饰,均应属于本发明权利要求的涵盖范围。