CN108563444B - 一种安卓系统固件源代码还原方法及存储介质 - Google Patents

一种安卓系统固件源代码还原方法及存储介质 Download PDF

Info

Publication number
CN108563444B
CN108563444B CN201810238074.7A CN201810238074A CN108563444B CN 108563444 B CN108563444 B CN 108563444B CN 201810238074 A CN201810238074 A CN 201810238074A CN 108563444 B CN108563444 B CN 108563444B
Authority
CN
China
Prior art keywords
code
warehouses
warehouse
information
sub
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.)
Active
Application number
CN201810238074.7A
Other languages
English (en)
Other versions
CN108563444A (zh
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.)
Rockchip Electronics Co Ltd
Original Assignee
Rockchip Electronics 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 Rockchip Electronics Co Ltd filed Critical Rockchip Electronics Co Ltd
Priority to CN201810238074.7A priority Critical patent/CN108563444B/zh
Publication of CN108563444A publication Critical patent/CN108563444A/zh
Application granted granted Critical
Publication of CN108563444B publication Critical patent/CN108563444B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Abstract

一种安卓系统固件源代码还原方法及存储介质,其中方法包括步骤,保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;以满足在系统固件的设计过程中需要提取编译状态进行还原修改的问题。

Description

一种安卓系统固件源代码还原方法及存储介质
技术领域
本发明涉及安卓系统设计领域,尤其涉及一种安卓系统固件源代码还原方法。
背景技术
目前编译出来的Android固件并不包含是从哪份源代码编译出来的信息。客户将这样的固件烧录进设备后,一旦出现问题,无从考证代码状态。基于这个现状,本发明提出一种能够从Android固件中还原此固件的源代码的方法,用来帮助问题的处理。处理该问题的研发人员,能够从固件文件或者烧录到设备上的固件中提取它所对应的源码状态信息,进而还原出相同的测试环境复现问题,有益于问题的处理。
为实现从Android固件中还原此固件的源代码的方法,需要从固件生成方式上入手,在编译时收集必要的当前代码状态信息,并保存到固件中。当需要确认该固件所对应的源代码时,可以从固件文件或者已经烧录了该固件的设备上提取当时编译的代码状态信息,进而将当时的代码状态完整还原出来。
发明内容
为此,需要提供一种安卓系统固件代码的还原方法,以满足在系统固件的设计过程中需要提取编译状态进行还原修改的问题;
为实现上述目的,发明人提供了一种安卓系统固件源代码还原方法,包括步骤,保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息,所述差异代码信息包括子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将上述代码状态信息保存至代码状态信息集文件夹,再将文件夹压缩后集成到安卓编译系统,生成第一代码状态信息集保存进固件;
在需要还原固件源代码时,从固件中分离所述第一代码状态信息集,根据第一代码状态信息集,下载.repo/manifests文件夹所对应的远端仓库的最新内容,替换默认指向的manifest.xml为本地仓库提交信息文件,将本地仓库提交信息文件中的本地提交号改为差异代码信息中的合并基准点提交号,进而通过reposync还原出未打上差异代码补丁的源代码;遍历第一代码状态信息集当中的差异代码文件夹,将差异代码合并入源代码,即可完整还原出固件对应的源代码。
进一步地,还包括步骤,
遍历固件源代码工程中所有由manifest管理的git代码仓库,收集子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将所述第一代码状态信息集压缩为代码状态信息集压缩包,集成进安卓固件中。
具体地,保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息具体包括步骤,
判断当前仓库是否为未修改的AOSP仓库,若否,即修改过AOSP代码或者引进的新仓库,还进行下述步骤:
找出本地已提交但未上传或合并进远端代码仓库的提交集,然后记录该仓库的远端仓库地址和指向的分支名,找出本地提交与远端代码仓库的合并基准点并将其记录;
遍历所有修改过的代码仓库,找出本地未提交的差异代码,将本地未提交的差异代码保存到带有子仓库目录名信息的文件夹。
优选地,所述步骤,将所述代码状态信息集文件夹压缩,集成进安卓编译系统的新生成固件中具体包括步骤,
向安卓编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,所述脚本用于代码状态信息集压缩包集成到系统格式的固件镜像文件中;执行编译命令make,根据上述添加的脚本,执行保存当前代码状态的脚本程序;待编译系统完成编译,生成当前代码状态的信息集,并保存进安卓固件中。
进一步地,还包括步骤,从设备固件中分离代码状态信息集,根据manifest远程仓库地址信息,分支下载地址信息,manifest文件名信息,使用repo init命令获取当前最新的manifest.xml内容;
修改默认指向的manifest.xml,使其能够通过reposync下载到未打上差异代码补丁的源代码,步骤包括:
替换默认指向的manifest.xml为本地仓库提交信息文件,遍历所有差异代码信息文件夹,获取保存了合并基准点提交号信息的文件夹,通过该文件夹名中带的仓库目录名信息,找到manifest.xml文件中相同仓库目录名的行,替换该行中的提交号为合并基准点提交号;进而通过reposync还原出未打上差异代码补丁的源代码;
遍历所有差异代码信息文件夹,通过文件夹名中带的仓库目录名信息,将差异代码补丁文件分别拷贝到对应代码仓库目录下;所述补丁文件包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁,将补丁文件更新到源代码上,即可完成固件所对应的源代码的完整还原。
一种安卓系统固件源代码还原存储介质,存储有计算机程序,所述计算机程序在被运行时执行下述步骤,
保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息,所述差异代码信息包括子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将上述代码状态信息保存至代码状态信息集文件夹,再将文件夹压缩后集成到安卓编译系统,生成第一代码状态信息集保存进固件;
在需要还原固件源代码时,从固件中分离所述第一代码状态信息集,根据第一代码状态信息集,下载.repo/manifests文件夹所对应的远端仓库的最新内容,替换默认指向的manifest.xml为本地仓库提交信息文件,将本地仓库提交信息文件中的本地提交号改为差异代码信息中的合并基准点提交号,进而通过reposync还原出未打上差异代码补丁的源代码;遍历第一代码状态信息集当中的差异代码文件夹,将差异代码合并入源代码,即可完整还原出固件对应的源代码。
进一步地,所述计算机程序在被运行时还执行步骤,
遍历固件源代码工程中所有由manifest管理的git代码仓库,收集子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将所述第一代码状态信息集压缩为代码状态信息集压缩包,集成进安卓固件中。
具体地,所述计算机程序进行保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息具体包括步骤,
判断当前仓库是否为未修改的AOSP仓库,若否,即修改过AOSP代码或者引进的新仓库,还进行下述步骤:
找出本地已提交但未上传或合并进远端代码仓库的提交集,然后记录该仓库的远端仓库地址和指向的分支名,找出本地提交与远端代码仓库的合并基准点并将其记录;
遍历所有修改过的代码仓库,找出本地未提交的差异代码,将本地未提交的差异代码保存到带有子仓库目录名信息的文件夹。
优选地,所述计算机程序进行,将所述代码状态信息集文件夹压缩,集成进安卓编译系统的新生成固件中具体包括步骤,
向安卓编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,所述脚本用于代码状态信息集压缩包集成到系统格式的固件镜像文件中;执行编译命令make,根据上述添加的脚本,执行保存当前代码状态的脚本程序;待编译系统完成编译,生成当前代码状态的信息集,并保存进安卓固件中。
具体地,所述计算机程序在被运行时还执行步骤,从设备固件中分离代码状态信息集,根据manifest远程仓库地址信息,分支下载地址信息,manifest文件名信息,使用repo init命令获取当前最新的manifest.xml内容;
修改默认指向的manifest.xml,使其能够通过reposync下载到未打上差异代码补丁的源代码,步骤包括:
替换默认指向的manifest.xml为本地仓库提交信息文件,遍历所有差异代码信息文件夹,获取保存了合并基准点提交号信息的文件夹,通过该文件夹名中带的仓库目录名信息,找到manifest.xml文件中相同仓库目录名的行,替换该行中的提交号为合并基准点提交号;进而通过reposync还原出未打上差异代码补丁的源代码;
遍历所有差异代码信息文件夹,通过文件夹名中带的仓库目录名信息,将差异代码补丁文件分别拷贝到对应代码仓库目录下;所述补丁文件包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁,将补丁文件更新到源代码上,即可完成固件所对应的源代码的完整还原。
通过上述方法,本发明通过将代码仓库中每个版本的源代码信息进行记录保留,一同合并编译保留到固件中,当有需要校对等操作时通过提取固件进行还原,进而通过回退到合并基准号来实现固件的有效还原。
附图说明
图1为本发明具体实施方式所述的安卓系统固件源代码还原方法流程图。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图1,介绍了一种安卓系统固件源代码还原方法,包括步骤,S102保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;S104保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息,所述差异代码信息包括子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
S106将上述代码状态信息保存至代码状态信息集文件夹,再将文件夹压缩后集成到安卓编译系统,生成第一代码状态信息集保存进固件;
在需要还原固件源代码时,进行步骤S108从固件中分离所述第一代码状态信息集,根据第一代码状态信息集,下载.repo/manifests文件夹所对应的远端仓库的最新内容,替换默认指向的manifest.xml为本地仓库提交信息文件,将本地仓库提交信息文件中的本地提交号改为差异代码信息中的合并基准点提交号,进而通过reposync还原出未打上差异代码补丁的源代码;S110遍历第一代码状态信息集当中的差异代码文件夹,将差异代码合并入源代码,即可完整还原出固件对应的源代码。
在图1所示的实施例中,仓库信息可以为安卓git仓库信息,远端仓库地址及分值信息为remote URL以及branch信息,通过寻找mainfest文件名找到源代码,再针对根据路子仓库的针对找到差异代码信息及合并基准点提交号等信息一并存入固件中,使得现有技术中固件代码仓库中的代码随着设计版本的更新不断迭代的缺点被克服,达到能够根据合并提交号等信息找到迭代前版本的不同,进而在需要还原固件代码时直接解析固件,就能够找到差异代码将补丁合并入源代码,使得记录的源代码能够回退到固件对应的具体版本。解决了现有技术中固件的源代码无法不易保存,无法随固件进行简单还原的问题。
在其他一些进一步的实施例中,具体还包括步骤,遍历固件源代码工程中所有由manifest管理的git代码仓库,收集子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将所述第一代码状态信息集压缩为代码状态信息集压缩包,集成进安卓固件中。
通过上述设计,能够更好地对子仓库中的数据进行固定提取,达到更好地追踪差异代码的技术效果,保证还原的有效性。
其他一些具体的实施例中,保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息具体包括步骤,
判断当前仓库是否为未修改的AOSP仓库,若否,即修改过AOSP代码或者引进的新仓库,还进行下述步骤:
找出本地已提交但未上传或合并进远端代码仓库的提交集,然后记录该仓库的远端仓库地址和指向的分支名,找出本地提交与远端代码仓库的合并基准点并将其记录;
遍历所有修改过的代码仓库,找出本地未提交的差异代码,将本地未提交的差异代码保存到带有子仓库目录名信息的文件夹。本技术方案能够使得代码仓库的记录更加准确,若仓库修改过则能够准确辨识差异代码,若仓库未被修改过则能够省掉遍历步骤,更好地节约计算机资源。通过上述方案手机达到了优化还原过程的技术效果。
其他一些优选的实施例中,所述步骤,将所述代码状态信息集文件夹压缩,集成进安卓编译系统的新生成固件中具体包括步骤,
向安卓编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,所述脚本用于代码状态信息集压缩包集成到系统格式的固件镜像文件中;执行编译命令make,根据上述添加的脚本,执行保存当前代码状态的脚本程序;待编译系统完成编译,生成当前代码状态的信息集,并保存进安卓固件中。
另外一些实施例中,为了更好地对差异补丁进行还原,还包括步骤,从设备固件中分离代码状态信息集,根据manifest远程仓库地址信息,分支下载地址信息,manifest文件名信息,使用repo init命令获取当前最新的manifest.xml内容;
修改默认指向的manifest.xml,使其能够通过reposync下载到未打上差异代码补丁的源代码,步骤包括:
替换默认指向的manifest.xml为本地仓库提交信息文件,遍历所有差异代码信息文件夹,获取保存了合并基准点提交号信息的文件夹,通过该文件夹名中带的仓库目录名信息,找到manifest.xml文件中相同仓库目录名的行,替换该行中的提交号为合并基准点提交号;进而通过reposync还原出未打上差异代码补丁的源代码;
遍历所有差异代码信息文件夹,通过文件夹名中带的仓库目录名信息,将差异代码补丁文件分别拷贝到对应代码仓库目录下;所述补丁文件包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁,将补丁文件更新到源代码上,即可完成固件所对应的源代码的完整还原。
本发明还提供如下的实施例方案:
2.1编写保存当前代码状态的脚本文件,并添加到编译系统中供其调用
2.1.1保存当前代码状态的脚本,涉及的步骤包括:
2.1.1.1创建代码状态信息集文件夹,供后续存放必要状态信息文件和压缩保存
2.1.1.2保存源码根目录下.repo/manifests git仓库信息到代码状态信息集文件夹,git仓库信息包括远端仓库地址(remote url)和指向的分支(branch)信息。由于.repo/manifest.xml是软链接,故需要通过ls-l命令找出它所指向的真实的manifest文件名,并保存该真实manifest文件和文件名到代码状态信息集文件夹。该步骤将会用于从固件还原源代码的过程,提供给repo init命令中所需要的manifest仓库的远端地址,分支和文件名信息。
2.1.1.3利用repo manifest命令保存当前源代码工程中,所有由manifest管理的git仓库的最新提交号信息到xml文件到代码状态信息集文件夹。该步骤将会用于从固件还原源代码的过程,将上述xml文件作为参数提供给repo sync命令,用于还原源代码。
2.1.1.4利用repo forall-c命令,遍历当前源代码工程中所有由manifest管理的git代码仓库,执行“收集修改过的仓库代码状态信息和代码补丁”脚本,将结果输出到代码状态信息集文件夹。其中,“收集修改过的仓库代码状态信息和代码补丁”的脚本,具体功能为:
2.1.1.4.1判断当前仓库是否为未修改的谷歌AOSP仓库。若是,则退出,因为既然该仓库没有修改过,则没必要检查是否有补丁集,节约遍历时间。若否,即修改过AOSP代码或者引进的新仓库,则需要进行下述步骤。
2.1.1.4.2找出本地已提交但未上传或合并进远端代码仓库的提交集,利用gitformat-patch命令将这些提交集转化为补丁文件集。然后记录该仓库的远端仓库地址(remote url)和指向的分支(branch),同时利用git merge base命令找出本地提交与远端代码仓库的合并基准点提交(merge base)。上述信息和文件集会被分别放置在以代码状态信息集文件夹为基准而创建的各自仓库名文件夹中。
2.1.1.4.3遍历上述有修改过的代码仓库,找出本地未提交的差异代码补丁,利用git diff--binary和git diff--cached–binary命令将本地未提交的差异代码补丁保存到以代码状态信息集文件夹为基准而创建的各自仓库名文件夹中。
2.1.1.5打包压缩2.1.1.1的代码状态信息集文件夹,产生一个代码状态信息集压缩包文件。
2.1.2将2.1.1创建的脚本,集成进Android编译系统。步骤如下:
2.1.2.1往Android编译系统最核心的build/core/main.mk,定义droid_targets的开头,添加对2.1.1创建的脚本的执行语句($(shell)“保存当前代码状态的脚本”),确保编译系统在编译Android固件的最开始就生成当前代码状态的信息集。
2.1.2.2往Android编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,以用来拷贝2.1.1.5所产生的压缩包文件到以ext4文件系统格式打包的固件镜像文件中。
2.2执行编译命令make,编译系统会根据上述添加的脚本,执行保存当前代码状态的脚本程序
2.3编译系统完成编译,生成当前代码状态的信息集,并保存进固件
3从固件还原出源代码的步骤
3.1从2.1.2.2过程中可以得知当时源代码状态信息的保存位置,通过挂载ext4文件系统的固件镜像文件或者adb pull烧录了该固件的设备,就能够拷贝出2.1.1.5所产生的代码状态压缩包文件。
3.2解压3.1中获取的代码状态压缩包文件,能够得到如下信息:
3.2.1下载原始代码所需要的manifest信息,包括2.1.1.2生成的manifest远程仓库地址,分支名,manifest文件名以及2.1.1.3生成的manifest文件。
3.2.2 2.1.1.4生成的所有修改过的仓库代码状态信息和代码补丁
3.3还原源代码
3.3.1遍历2.1.1.4生成的所有修改过的仓库代码状态信息和代码补丁文件夹,找到带有2.1.1.4.2生成的合并基准点(merge base)提交号信息的文件夹。通过该文件夹名中带的仓库名信息,找到2.1.1.3输出的manifest文件中相同仓库名的行,替换改行中的提交号(revision)为合并基准点提交号。
3.3.2使用repo init命令,带上3.2.1提到的参数:manifest远程仓库地址,分支名,manifest文件名,初始化源代码仓库信息。
3.3.3使用repo sync命令下载基准源代码
3.3.4拷贝3.3.1处理过的manifest文件到基准源代码工程下的.repo/manifests/文件夹。
3.3.5使用repo init–m切换到3.3.4提到的manifest文件
3.3.6使用repo sync命令将基准源代码更新到合并基准(merge base)的源代码
3.3.7遍历2.1.1.4生成的所有修改过的仓库代码状态信息和代码补丁文件夹,通过该文件夹名中带的仓库名信息,将补丁文件(包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁)分别拷贝到对应代码文件夹下。使用git am将本地已提交但未合并到远程仓库的补丁打上。使用git apply--reject将本地未提交补丁打上。
通过上述步骤,即可将源代码还原到生成该固件时的源代码状态。解决了现有技术无法针对任意固件还原其源代码的技术效果。
一种安卓系统固件源代码还原存储介质,存储有计算机程序,所述计算机程序在被运行时执行下述步骤,
保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息,所述差异代码信息包括子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将上述代码状态信息保存至代码状态信息集文件夹,再将文件夹压缩后集成到安卓编译系统,生成第一代码状态信息集保存进固件;
在需要还原固件源代码时,从固件中分离所述第一代码状态信息集,根据第一代码状态信息集,下载.repo/manifests文件夹所对应的远端仓库的最新内容,替换默认指向的manifest.xml为本地仓库提交信息文件,将本地仓库提交信息文件中的本地提交号改为差异代码信息中的合并基准点提交号,进而通过reposync还原出未打上差异代码补丁的源代码;遍历第一代码状态信息集当中的差异代码文件夹,将差异代码合并入源代码,即可完整还原出固件对应的源代码。
进一步地,所述计算机程序在被运行时还执行步骤,
遍历固件源代码工程中所有由manifest管理的git代码仓库,收集子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将所述第一代码状态信息集压缩为代码状态信息集压缩包,集成进安卓固件中。
具体地,所述计算机程序进行保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息具体包括步骤,
判断当前仓库是否为未修改的AOSP仓库,若否,即修改过AOSP代码或者引进的新仓库,还进行下述步骤:
找出本地已提交但未上传或合并进远端代码仓库的提交集,然后记录该仓库的远端仓库地址和指向的分支名,找出本地提交与远端代码仓库的合并基准点并将其记录;
遍历所有修改过的代码仓库,找出本地未提交的差异代码,将本地未提交的差异代码保存到带有子仓库目录名信息的文件夹。
优选地,所述计算机程序进行,将所述代码状态信息集文件夹压缩,集成进安卓编译系统的新生成固件中具体包括步骤,
向安卓编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,所述脚本用于代码状态信息集压缩包集成到系统格式的固件镜像文件中;执行编译命令make,根据上述添加的脚本,执行保存当前代码状态的脚本程序;待编译系统完成编译,生成当前代码状态的信息集,并保存进安卓固件中。
具体地,所述计算机程序在被运行时还执行步骤,从设备固件中分离代码状态信息集,根据manifest远程仓库地址信息,分支下载地址信息,manifest文件名信息,使用repo init命令获取当前最新的manifest.xml内容;
修改默认指向的manifest.xml,使其能够通过reposync下载到未打上差异代码补丁的源代码,步骤包括:
替换默认指向的manifest.xml为本地仓库提交信息文件,遍历所有差异代码信息文件夹,获取保存了合并基准点提交号信息的文件夹,通过该文件夹名中带的仓库目录名信息,找到manifest.xml文件中相同仓库目录名的行,替换该行中的提交号为合并基准点提交号;进而通过reposync还原出未打上差异代码补丁的源代码;
遍历所有差异代码信息文件夹,通过文件夹名中带的仓库目录名信息,将差异代码补丁文件分别拷贝到对应代码仓库目录下;所述补丁文件包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁,将补丁文件更新到源代码上,即可完成固件所对应的源代码的完整还原。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。

Claims (10)

1.一种安卓系统固件源代码还原方法,其特征在于,包括步骤,保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息,所述差异代码信息包括子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将上述代码状态信息保存至代码状态信息集文件夹,再将文件夹压缩后集成到安卓编译系统,生成第一代码状态信息集保存进固件;
在需要还原固件源代码时,从固件中分离所述第一代码状态信息集,根据第一代码状态信息集,下载.repo/manifests文件夹所对应的远端仓库的最新内容,替换默认指向的manifest.xml为本地仓库提交信息文件,将本地仓库提交信息文件中的本地提交号改为差异代码信息中的合并基准点提交号,进而通过reposync还原出未打上差异代码补丁的源代码;遍历第一代码状态信息集当中的差异代码文件夹,将差异代码合并入源代码,即可完整还原出固件对应的源代码。
2.根据权利要求1所述的安卓系统固件源代码还原方法,其特征在于,还包括步骤,
遍历固件源代码工程中所有由manifest管理的git代码仓库,收集子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将所述第一代码状态信息集压缩为代码状态信息集压缩包,集成进安卓固件中。
3.根据权利要求2所述的安卓系统固件源代码还原方法,其特征在于,
保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息具体包括步骤,
判断当前仓库是否为未修改的AOSP仓库,若否,即修改过AOSP代码或者引进的新仓库,还进行下述步骤:
找出本地已提交但未上传或合并进远端代码仓库的提交集,然后记录该仓库的远端仓库地址和指向的分支名,找出本地提交与远端代码仓库的合并基准点并将其记录;
遍历所有修改过的代码仓库,找出本地未提交的差异代码,将本地未提交的差异代码保存到带有子仓库目录名信息的文件夹。
4.根据权利要求2所述的安卓系统固件源代码还原方法,其特征在于,所述步骤,将所述代码状态信息集文件夹压缩,集成进安卓编译系统的新生成固件中具体包括步骤,
向安卓编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,所述脚本用于代码状态信息集压缩包集成到系统格式的固件镜像文件中;执行编译命令make,根据上述添加的脚本,执行保存当前代码状态的脚本程序;待编译系统完成编译,生成当前代码状态的信息集,并保存进安卓固件中。
5.根据权利要求1所述的安卓系统固件源代码还原方法,其特征在于,还包括步骤,从设备固件中分离代码状态信息集,根据manifest远程仓库地址信息,分支下载地址信息,manifest文件名信息,使用repo init命令获取当前最新的manifest.xml内容;
修改默认指向的manifest.xml,使其能够通过reposync下载到未打上差异代码补丁的源代码,步骤包括:
替换默认指向的manifest.xml为本地仓库提交信息文件,遍历所有差异代码信息文件夹,获取保存了合并基准点提交号信息的文件夹,通过该文件夹名中带的仓库目录名信息,找到manifest.xml文件中相同仓库目录名的行,替换该行中的提交号为合并基准点提交号;进而通过reposync还原出未打上差异代码补丁的源代码;
遍历所有差异代码信息文件夹,通过文件夹名中带的仓库目录名信息,将差异代码补丁文件分别拷贝到对应代码仓库目录下;所述补丁文件包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁,将补丁文件更新到源代码上,即可完成固件所对应的源代码的完整还原。
6.一种安卓系统固件源代码还原存储介质,其特征在于,存储有计算机程序,所述计算机程序在被运行时执行下述步骤,
保存固件源代码根目录下的.repo/manifests目录的仓库信息,所述仓库信息包括.repo/manifests目录远端仓库地址信息、分支名信息以及manifest文件名;保存固件源代码根目录下所有子仓库的提交信息为本地仓库提交信息文件,所述提交信息包括子仓库的远端仓库地址信息、子仓库的分支名信息以及子仓库的本地提交号;保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息,所述差异代码信息包括子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将上述代码状态信息保存至代码状态信息集文件夹,再将文件夹压缩后集成到安卓编译系统,生成第一代码状态信息集保存进固件;
在需要还原固件源代码时,从固件中分离所述第一代码状态信息集,根据第一代码状态信息集,下载.repo/manifests文件夹所对应的远端仓库的最新内容,替换默认指向的manifest.xml为本地仓库提交信息文件,将本地仓库提交信息文件中的本地提交号改为差异代码信息中的合并基准点提交号,进而通过reposync还原出未打上差异代码补丁的源代码;遍历第一代码状态信息集当中的差异代码文件夹,将差异代码合并入源代码,即可完整还原出固件对应的源代码。
7.根据权利要求6所述的安卓系统固件源代码还原存储介质,其特征在于,所述计算机程序在被运行时还执行步骤,
遍历固件源代码工程中所有由manifest管理的git代码仓库,收集子仓库所跟踪的远端仓库分支名、子仓库与子仓库所跟踪的远端仓库的合并基准点提交号、子仓库与子仓库所跟踪的远端仓库的差异代码,分别将结果输出到带有子仓库目录名信息的文件夹;
将所述第一代码状态信息集压缩为代码状态信息集压缩包,集成进安卓固件中。
8.根据权利要求7所述的安卓系统固件源代码还原存储介质,其特征在于,
所述计算机程序进行保存固件源代码根目录下所有子仓库与其对应的远端仓库的差异代码信息具体包括步骤,
判断当前仓库是否为未修改的AOSP仓库,若否,即修改过AOSP代码或者引进的新仓库,还进行下述步骤:
找出本地已提交但未上传或合并进远端代码仓库的提交集,然后记录该仓库的远端仓库地址和指向的分支名,找出本地提交与远端代码仓库的合并基准点并将其记录;
遍历所有修改过的代码仓库,找出本地未提交的差异代码,将本地未提交的差异代码保存到带有子仓库目录名信息的文件夹。
9.根据权利要求7所述的安卓系统固件源代码还原存储介质,其特征在于,所述计算机程序进行,将所述代码状态信息集文件夹压缩,集成进安卓编译系统的新生成固件中具体包括步骤,
向安卓编译系统的设备编译配置文件中添加PRODUCT_COPY_FILES脚本,所述脚本用于代码状态信息集压缩包集成到系统格式的固件镜像文件中;执行编译命令make,根据上述添加的脚本,执行保存当前代码状态的脚本程序;待编译系统完成编译,生成当前代码状态的信息集,并保存进安卓固件中。
10.根据权利要求6所述的安卓系统固件源代码还原存储介质,其特征在于,所述计算机程序在被运行时还执行步骤,从设备固件中分离代码状态信息集,根据manifest远程仓库地址信息,分支下载地址信息,manifest文件名信息,使用repo init命令获取当前最新的manifest.xml内容;
修改默认指向的manifest.xml,使其能够通过reposync下载到未打上差异代码补丁的源代码,步骤包括:
替换默认指向的manifest.xml为本地仓库提交信息文件,遍历所有差异代码信息文件夹,获取保存了合并基准点提交号信息的文件夹,通过该文件夹名中带的仓库目录名信息,找到manifest.xml文件中相同仓库目录名的行,替换该行中的提交号为合并基准点提交号;进而通过reposync还原出未打上差异代码补丁的源代码;
遍历所有差异代码信息文件夹,通过文件夹名中带的仓库目录名信息,将差异代码补丁文件分别拷贝到对应代码仓库目录下;所述补丁文件包括本地未提交补丁和本地已提交但未合并到远程仓库的补丁,将补丁文件更新到源代码上,即可完成固件所对应的源代码的完整还原。
CN201810238074.7A 2018-03-22 2018-03-22 一种安卓系统固件源代码还原方法及存储介质 Active CN108563444B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810238074.7A CN108563444B (zh) 2018-03-22 2018-03-22 一种安卓系统固件源代码还原方法及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810238074.7A CN108563444B (zh) 2018-03-22 2018-03-22 一种安卓系统固件源代码还原方法及存储介质

Publications (2)

Publication Number Publication Date
CN108563444A CN108563444A (zh) 2018-09-21
CN108563444B true CN108563444B (zh) 2021-03-19

Family

ID=63532071

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810238074.7A Active CN108563444B (zh) 2018-03-22 2018-03-22 一种安卓系统固件源代码还原方法及存储介质

Country Status (1)

Country Link
CN (1) CN108563444B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109669692B (zh) * 2018-12-21 2023-03-10 深圳Tcl新技术有限公司 源码共享方法、服务器、计算机可读存储介质及系统
CN109800018A (zh) * 2019-01-10 2019-05-24 郑州云海信息技术有限公司 一种基于Gerrit的代码管理方法及系统
CN109933364A (zh) * 2019-02-25 2019-06-25 晶晨半导体(上海)股份有限公司 一种代码管理方法
CN110688140B (zh) * 2019-10-11 2023-11-21 上海创功通讯技术有限公司 一种代码管理方法和终端
CN112988217B (zh) * 2021-03-10 2023-11-17 北京大学 用于快速全网代码溯源检测的代码库设计方法及检测方法
CN113127429B (zh) * 2021-06-16 2022-10-11 北京车智赢科技有限公司 一种压缩处理方法、系统及计算设备
CN113806595B (zh) * 2021-08-13 2022-08-12 荣耀终端有限公司 一种代码搜索系统生成方法、代码搜索方法和搜索服务器

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106528258A (zh) * 2016-10-28 2017-03-22 武汉斗鱼网络科技有限公司 提高安卓项目编译速度的方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7809836B2 (en) * 2004-04-07 2010-10-05 Intel Corporation System and method for automating bios firmware image recovery using a non-host processor and platform policy to select a donor system
US8661425B1 (en) * 2006-07-28 2014-02-25 American Megatrends, Inc. Method, apparatus, and computer-readable medium for storing data associated with a firmware program
CN104317643A (zh) * 2014-10-12 2015-01-28 福州瑞芯微电子有限公司 一种实现分区迁移的方法、系统及装置
CN104809036B (zh) * 2015-05-07 2018-11-13 北京瑞星网安技术股份有限公司 修复路由器固件漏洞的方法和系统
CN105302554B (zh) * 2015-10-23 2018-11-30 深圳市创维电器科技有限公司 一种Android系统自动化程序构建方法及系统
CN106708564A (zh) * 2016-11-29 2017-05-24 努比亚技术有限公司 一种fota更新方法、装置及服务器
CN106775723B (zh) * 2016-12-16 2021-01-29 深圳市优博讯科技股份有限公司 基于Android平台的系统固件定制的方法和Android设备
CN107341031B (zh) * 2017-06-20 2020-12-15 广州慧睿思通信息科技有限公司 一种在dsp固件里加入固件生成信息的方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106528258A (zh) * 2016-10-28 2017-03-22 武汉斗鱼网络科技有限公司 提高安卓项目编译速度的方法及系统

Also Published As

Publication number Publication date
CN108563444A (zh) 2018-09-21

Similar Documents

Publication Publication Date Title
CN108563444B (zh) 一种安卓系统固件源代码还原方法及存储介质
US9898269B2 (en) Build deployment automation for information technology mangement
CN111142903B (zh) 一种基于文件对比的配置文件交互式更新方法及装置
CN106371940B (zh) 一种程序崩溃解决方法及装置
RU2565109C2 (ru) Способ и устройство для восстановления резервной базы данных
US9390124B2 (en) Version control system using commit manifest database tables
CN110442371B (zh) 一种发布代码的方法、装置、介质及计算机设备
CN105893008A (zh) 一种定制多渠道安装包的方法及装置
CN111324359B (zh) 插件部署方法及装置
CN107678748B (zh) 一种源代码文件编译方法及装置
CN110083360B (zh) 一种应用程序代码的编译方法、装置、设备及存储介质
WO2022116437A1 (zh) 多架构静态库冲突处理方法、装置、设备及存储介质
CN115658128A (zh) 一种生成软件物料清单的方法、装置及存储介质
CN113760234B (zh) 一种软件开发方法和系统
CN114860654A (zh) 一种基于Flink数据流的Iceberg表Schema动态变更方法及系统
CN110688147A (zh) 一种进行元数据打包与解析的方法
CN107193619B (zh) 一种编译版本自动更新的方法与装置
CN108664255B (zh) 一种软件升级方法及装置
CN110750310B (zh) 基于ios系统组件化开发的二进制和源码切换方法
CN110018857B (zh) 应用组件化中分支自动管理方法、存储介质、设备及方法
CN111949303A (zh) 升级包处理方法、装置、电子设备及存储介质
WO2019041891A1 (zh) 升级包的生成方法及装置
CN114816816A (zh) 崩溃堆栈信息处理方法、装置、设备及存储介质
US8190587B1 (en) In-place image promotion
CN114237976A (zh) 一种数据获取方法及装置

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
CB02 Change of applicant information

Address after: 350003 building 18, No.89, software Avenue, Gulou District, Fuzhou City, Fujian Province

Applicant after: Ruixin Microelectronics Co., Ltd

Address before: 350003 building 18, No.89, software Avenue, Gulou District, Fuzhou City, Fujian Province

Applicant before: Fuzhou Rockchips Electronics Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant