整个升级的策略为两个步骤:
因此,第一步是准备升级前后两个版本的 源码 。
配置git仓库的目的,是为了利用git进行diff,之所以不使用Linux自带的diff命令,是因为下一步所述问题。
将升级前版本 源码 初始化为git仓库,可提交服务器(gerrit)
这是最坑的一步。原先笔者将升级前代码删光,然后将升级后代码直接复制过来,心想git立马就能检测出差异,差异即升级内容,然后笔者提交至服务器,review发现,出现了大量内容完全一致的修改。
google一下后,了解到,出现该问题是因为两份代码的换行符格式不同,简单介绍一下:
换行符有两种:
\r
\n
不同的OS上使用的换行符:
0x0A
0x0D
0x0D0A
由于换行符差异,Linux自带的 diff 命令便不好使了,而git本身也是基于 diff 封装的VCS,所以diff这条路行不通(或者说只是笔者没找到办法,不知道如何在diff时忽略换行符差异,读者可自行研究)。
diff
笔者在Linux服务器上下载的AOSP,之后修改是在Windows,因此当使用某些IDE(比如AS,如果自己配置的不是强制LF)打开或者编辑过文件后,会被转成CRLF,这就导致最后提交时,内容看似完全一样的两份文件,其实换行符编码格式已经被偷偷改了,从而被git识别为修改过。(用Windows开发Android实属笑话,笔者也很无奈)
于是笔者心想,既然最初是LF,那么我就只在Linux服务器上操作,这样就可以避免被强转。
旧版本回退到升级前,删光所有文件,从新版本cp目录过去,git提交,一气呵成。
review代码一看,这不还是跟之前一样的吗?为什么没起作用呢?并且注意到一个提示:
old mode 100644 new mode 100755 仍然是google大法,最后在stackoverflow找到了解决方案。 2.4 修改git配置 忽略文件模式(权限)差异 git config --global core.filemode false 禁止自动转换换行符格式 git config --global core.autocrlf false 禁止提交包含混合换行符的文件 git config --global core.safecrlf true 2.5 提交patch 然后重复前面的步骤:旧版本回退到升级前,删光所有文件,从新版本cp目录过去,git提交,review一看,搞定! 至此,得到了codebase升级的差异。 2.6 应用patch 切回vendor自己的版本节点,从gerrit上将差异cherry-pick下来,解冲突。 至此,codebase升级完成。 三、 总结思考 换行符格式:这个坑一言难尽,开发者还是尽量保持同一个OS环境吧Linux命令:对于常用的命令还是需要熟练使用Git命令:同上 四、 参考文献 Git 多平台换行符问题(LF or CRLF)Git 进阶 | 3分钟学会优雅处理换行符linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹How do I remove files saying “old mode 100755 new mode 100644” from unstaged changes in Git?CR,LF,CR/LF,回车,换行 最近在AOSP下编写了漏洞的patch以及CTS的patch,趁机重新学习了repo以及git的相关命令,特此记录。 目录下的代码被改乱了,想恢复原状? 不用怕,来~~~ git reset --hard HEAD一般写Patch的步骤: 在要做修改的目录下 1.切换到最近版本的AOSP: git checkout Android-6.0.1_r412.基于此版本建立新的分支并切换过去: AOSP,“Android Open-Source Project”的缩写,中文意为“Android开放源代码项目”。在Android Open-Source Project社区,你可以找到你所需要参与开发的Android兼容设备的信息和相关源代码。Android是一个开源的,用于移动设备的系统。Android开放源代码项目(AOSP),由谷歌发起。 简单地说,安卓官方原生系统是 sudo apt-get install python3.7 安装好了后需要对系统默认python切换: lrwxrwxrwx 1 root root 26 8月 16 2019 dh_pypy -> ../share/dh-python/dh_pypy -rwxr-xr-x 1 ro 镜像来自:https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-20200401.tar,由于官方下载不稳定,本人上传至网盘分享出来。 链接:https://pan.baidu.com/s/11Ij69hZpzJ6MWhgwotJh4g 密码请下载aosp.txt文件之后查看 全部下载完成之后,linux系统输入cat aosp-20200401.tara* > aosp-20200401.tar ,windows:在cygwin下试试,没验证过 ### 回答1: AOSP是Android的开源版本,缺少Google Apps(GApps)。因此,用户安装AOSP时会错过Google Play商店和其他Google服务。为了解决这个问题,用户需要把GApps集成到AOSP中。 首先,用户需要下载和安装AOSP源代码。下载完源代码后,用户可以在AOSP项目中的Packages目录中找到vendor/google目录。用户需要将GApps的ZIP文件复制到vendor/google目录下。 然后,用户需要在vendor/google目录下创建一个脚本来在AOSP中集成GApps。在创建脚本之前,用户需要下载一个叫作Google API的SDK。打开Terminal窗口并切换到vendor/google目录,然后输入以下命令来初始化脚本: source build/envsetup.sh lunch full-eng make -j4 此命令将初始化脚本并编译AOSP源代码,其中“make -j4”指令将以4个线程进行编译,这将加快编译过程。 接下来,用户需要编辑先前创建的脚本。脚本应该包含GApps的适当文件夹路径和其它所需信息。完成编辑后,用户需要保存脚本并运行以下命令来集成GApps: make updatepackage make -j4 这将启动AOSP的集成过程,并将GApps包含在AOSP中。当编译完成后,用户可以将新的AOSP映像刷入设备中并Enjoy Google Apps的服务。 ### 回答2: AOSP (Android Open Source Project) 是一个开源的 Android 操作系统源代码项目,它提供了 Android 系统的核心功能和基础设施。但是,由于 Google 出于商业考虑并未将 Google 应用程序 (GApps) 包含在 AOSP 中,因此如果您想使用 Google 应用程序和服务,您需要将它们手动集成到 AOSP 中。 集成 GApps 允许 AOSP 用户像使用 Google Play 商店、谷歌地图和 Gmail 等应用程序,从而提供更为完整和便利的使用体验。它的集成步骤也相对简单,有以下几个步骤: 1. 下载 GApps 软件包。您需要根据您的 Android 系统版本和设备架构下载合适的 GApps 软件包。 2. 在 AOSP 中挂载 /system 分区。通过 adb 命令将设备连接到电脑上,并以 root 权限装载 /system 分区。 3. 拷贝 GApps。通过 adb 命令将 GApps 软件包从电脑拷贝到设备上。 4. 安装 GApps。通过在设备上运行相应的 shell 命令来安装所需的 GApps 软件。安装可能需要一段时间,具体时间因安装包大小和设备性能而定。 5. 重新启动设备。重启设备后,您现在可以在 AOSP 中运行 Google 应用程序并享受相关功能和服务了。 需要注意的是,GApps 软件包不属于 AOSP 的一部分,也不是由 Google 公司提供的官方软件包。因此,在安装 GApps 之前,请确保您从可靠的来源下载软件包,并理解相关法律规定和风险。同时,不同版本的 GApps 软件包可能不兼容不同的 AOSP 版本和设备类型,因此请仔细查看官方文档或咨询相关社区的支持人员,以确保安装的正确性和稳定性。 ### 回答3: AOSP即Android Open Source Project,是Android的开源项目。它提供了一套完整的Android源代码,开发人员可以使用这个代码库开发自己的定制版Android系统。 但是AOSP并不包含Google应用和服务(GApps),例如谷歌商店、谷歌地图、Gmail等等。这些应用和服务是Google的专有软件,不能直接加入到AOSP中。 如果我们想在AOSP中使用GApps,就需要进行集成。集成GApps的方法有多种,下面我们简单介绍一下其中一种方法: 1. 下载GApps包 首先需要从可信的第三方网站(如opengapps.org)下载GApps包。我们需要选择支持AOSP版本的GApps包,同时要选择与自己的手机对应的CPU架构和安卓版本。 2. 解压GApps包 下载完成后,将GApps包解压缩。得到的文件夹中应该有一些.apk文件(Android应用程序)和一些库文件(包括.so文件)。 3. 将GApps文件复制到系统目录中 将GApps文件复制到系统目录中,例如/system/app、/system/priv-app以及/system/lib等等。复制时需要注意文件权限和所有权。 4. 设置权限和所有者 在一些情况下,很可能需要手动设置GApps文件的权限和所有者。通常,这些文件的所有者应该是“system”或“root”,因为它们需要访问系统级的资源。 5. 重启手机 重启手机,等待一段时间。一旦手机启动成功,你就可以在应用列表中找到GApps应用。如果你尝试安装Google Play Store,它应该就能正确运行。 综上所述,集成GApps到AOSP中需要一些技术和操作知识,需要仔细阅读相关文档和资料,才能确保集成成功。 repo拉取仓库时报"Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle"错误的解决方案 graphicswe: 老兄,管用了,谢谢 Downloading Repo source from https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ remote: Enumerating objects: 4372, done. remote: Counting objects: 100% (4372/4372), done. remote: Compressing objects: 100% (2065/2065), done. remote: Total 7925 (delta 3917), reused 2307 (delta 2307), pack-reused 3553
old mode 100644 new mode 100755 仍然是google大法,最后在stackoverflow找到了解决方案。
仍然是google大法,最后在stackoverflow找到了解决方案。
2.4 修改git配置 忽略文件模式(权限)差异 git config --global core.filemode false 禁止自动转换换行符格式 git config --global core.autocrlf false 禁止提交包含混合换行符的文件 git config --global core.safecrlf true 2.5 提交patch 然后重复前面的步骤:旧版本回退到升级前,删光所有文件,从新版本cp目录过去,git提交,review一看,搞定! 至此,得到了codebase升级的差异。 2.6 应用patch 切回vendor自己的版本节点,从gerrit上将差异cherry-pick下来,解冲突。 至此,codebase升级完成。 三、 总结思考 换行符格式:这个坑一言难尽,开发者还是尽量保持同一个OS环境吧Linux命令:对于常用的命令还是需要熟练使用Git命令:同上 四、 参考文献 Git 多平台换行符问题(LF or CRLF)Git 进阶 | 3分钟学会优雅处理换行符linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹How do I remove files saying “old mode 100755 new mode 100644” from unstaged changes in Git?CR,LF,CR/LF,回车,换行 最近在AOSP下编写了漏洞的patch以及CTS的patch,趁机重新学习了repo以及git的相关命令,特此记录。 目录下的代码被改乱了,想恢复原状? 不用怕,来~~~ git reset --hard HEAD一般写Patch的步骤: 在要做修改的目录下 1.切换到最近版本的AOSP: git checkout Android-6.0.1_r412.基于此版本建立新的分支并切换过去: AOSP,“Android Open-Source Project”的缩写,中文意为“Android开放源代码项目”。在Android Open-Source Project社区,你可以找到你所需要参与开发的Android兼容设备的信息和相关源代码。Android是一个开源的,用于移动设备的系统。Android开放源代码项目(AOSP),由谷歌发起。 简单地说,安卓官方原生系统是 sudo apt-get install python3.7 安装好了后需要对系统默认python切换: lrwxrwxrwx 1 root root 26 8月 16 2019 dh_pypy -> ../share/dh-python/dh_pypy -rwxr-xr-x 1 ro 镜像来自:https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-20200401.tar,由于官方下载不稳定,本人上传至网盘分享出来。 链接:https://pan.baidu.com/s/11Ij69hZpzJ6MWhgwotJh4g 密码请下载aosp.txt文件之后查看 全部下载完成之后,linux系统输入cat aosp-20200401.tara* > aosp-20200401.tar ,windows:在cygwin下试试,没验证过 ### 回答1: AOSP是Android的开源版本,缺少Google Apps(GApps)。因此,用户安装AOSP时会错过Google Play商店和其他Google服务。为了解决这个问题,用户需要把GApps集成到AOSP中。 首先,用户需要下载和安装AOSP源代码。下载完源代码后,用户可以在AOSP项目中的Packages目录中找到vendor/google目录。用户需要将GApps的ZIP文件复制到vendor/google目录下。 然后,用户需要在vendor/google目录下创建一个脚本来在AOSP中集成GApps。在创建脚本之前,用户需要下载一个叫作Google API的SDK。打开Terminal窗口并切换到vendor/google目录,然后输入以下命令来初始化脚本: source build/envsetup.sh lunch full-eng make -j4 此命令将初始化脚本并编译AOSP源代码,其中“make -j4”指令将以4个线程进行编译,这将加快编译过程。 接下来,用户需要编辑先前创建的脚本。脚本应该包含GApps的适当文件夹路径和其它所需信息。完成编辑后,用户需要保存脚本并运行以下命令来集成GApps: make updatepackage make -j4 这将启动AOSP的集成过程,并将GApps包含在AOSP中。当编译完成后,用户可以将新的AOSP映像刷入设备中并Enjoy Google Apps的服务。 ### 回答2: AOSP (Android Open Source Project) 是一个开源的 Android 操作系统源代码项目,它提供了 Android 系统的核心功能和基础设施。但是,由于 Google 出于商业考虑并未将 Google 应用程序 (GApps) 包含在 AOSP 中,因此如果您想使用 Google 应用程序和服务,您需要将它们手动集成到 AOSP 中。 集成 GApps 允许 AOSP 用户像使用 Google Play 商店、谷歌地图和 Gmail 等应用程序,从而提供更为完整和便利的使用体验。它的集成步骤也相对简单,有以下几个步骤: 1. 下载 GApps 软件包。您需要根据您的 Android 系统版本和设备架构下载合适的 GApps 软件包。 2. 在 AOSP 中挂载 /system 分区。通过 adb 命令将设备连接到电脑上,并以 root 权限装载 /system 分区。 3. 拷贝 GApps。通过 adb 命令将 GApps 软件包从电脑拷贝到设备上。 4. 安装 GApps。通过在设备上运行相应的 shell 命令来安装所需的 GApps 软件。安装可能需要一段时间,具体时间因安装包大小和设备性能而定。 5. 重新启动设备。重启设备后,您现在可以在 AOSP 中运行 Google 应用程序并享受相关功能和服务了。 需要注意的是,GApps 软件包不属于 AOSP 的一部分,也不是由 Google 公司提供的官方软件包。因此,在安装 GApps 之前,请确保您从可靠的来源下载软件包,并理解相关法律规定和风险。同时,不同版本的 GApps 软件包可能不兼容不同的 AOSP 版本和设备类型,因此请仔细查看官方文档或咨询相关社区的支持人员,以确保安装的正确性和稳定性。 ### 回答3: AOSP即Android Open Source Project,是Android的开源项目。它提供了一套完整的Android源代码,开发人员可以使用这个代码库开发自己的定制版Android系统。 但是AOSP并不包含Google应用和服务(GApps),例如谷歌商店、谷歌地图、Gmail等等。这些应用和服务是Google的专有软件,不能直接加入到AOSP中。 如果我们想在AOSP中使用GApps,就需要进行集成。集成GApps的方法有多种,下面我们简单介绍一下其中一种方法: 1. 下载GApps包 首先需要从可信的第三方网站(如opengapps.org)下载GApps包。我们需要选择支持AOSP版本的GApps包,同时要选择与自己的手机对应的CPU架构和安卓版本。 2. 解压GApps包 下载完成后,将GApps包解压缩。得到的文件夹中应该有一些.apk文件(Android应用程序)和一些库文件(包括.so文件)。 3. 将GApps文件复制到系统目录中 将GApps文件复制到系统目录中,例如/system/app、/system/priv-app以及/system/lib等等。复制时需要注意文件权限和所有权。 4. 设置权限和所有者 在一些情况下,很可能需要手动设置GApps文件的权限和所有者。通常,这些文件的所有者应该是“system”或“root”,因为它们需要访问系统级的资源。 5. 重启手机 重启手机,等待一段时间。一旦手机启动成功,你就可以在应用列表中找到GApps应用。如果你尝试安装Google Play Store,它应该就能正确运行。 综上所述,集成GApps到AOSP中需要一些技术和操作知识,需要仔细阅读相关文档和资料,才能确保集成成功。 repo拉取仓库时报"Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle"错误的解决方案 graphicswe: 老兄,管用了,谢谢 Downloading Repo source from https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ remote: Enumerating objects: 4372, done. remote: Counting objects: 100% (4372/4372), done. remote: Compressing objects: 100% (2065/2065), done. remote: Total 7925 (delta 3917), reused 2307 (delta 2307), pack-reused 3553
git config --global core.filemode false
git config --global core.autocrlf false
git config --global core.safecrlf true
然后重复前面的步骤:旧版本回退到升级前,删光所有文件,从新版本cp目录过去,git提交,review一看,搞定!
至此,得到了codebase升级的差异。
切回vendor自己的版本节点,从gerrit上将差异cherry-pick下来,解冲突。
至此,codebase升级完成。