如何在多个AOSP项目中创建补丁?

时间:2012-11-07 00:17:07

标签: android android-source

记录here的过程是为了改变单个项目(又名git repo)。

但是我所做的改变(实现一个新的功能)跨越多个项目,是否可以创建一个补丁来实现这一目标,还是需要将其分解为单独的相互依赖的补丁?

2 个答案:

答案 0 :(得分:1)

我认为您应该将补丁划分为每个项目的补丁。以下是我认为这个的逻辑。每个Android项目都有自己的.git目录,即这些项目位于不同的git存储库中。 Repo工具只是对git命令的补充,即它不会为您提供新功能。因此,您无法创建跨越项目的补丁(因为它们未连接)。因此,您需要将修补程序划分为受新功能影响的每个AOSP项目的单独修补程序。

答案 1 :(得分:1)

要创建项目范围的差异,请使用以下命令: repo diff > /path/to/store/patch/all-changes.diff

接下来,还可以使用repo forall -p -c git status来查看每个项目的状态。

repo forall -p -c git diff 将显示每个项目的差异。

甚至我都在试图弄清楚如何为单个项目生成补丁。但是,如果您了解 AOSP 来源,那么所有项目都来自 aosp_root/.repo/manifests/default.xml

如果您尝试类似 repo forall -p -c git diff > /path/to/patch/change.diff 的内容,该文件将包含所有补丁。我还没想好如何提取打印项目名称的-p部分(通常是aosp_root内部的相对路径),并将其转换为补丁名称。

然而,这些东西在带有一些脚本的 bash 环境中确实不难。哎呀,我认为 repo 也是开源的,这意味着你甚至可以自己修改它!

如果您查看此清单,您应该注意到这些项目的解释方式与 git repo 项目的解释方式相同,这些项目易于克隆和复制补丁。尽管与 git 非常相似,但 AOSP 文件夹结构因设备、SOM 到 SOM 而异。由于路径和其他不同之处,实际创建单个项目变得有点困难。

我熟悉的一件事是在 linux 机器上使用 splitpatch 之类的工具来拆分补丁。但是,这个工具和其他工具一样,会发现拆分 AOSP 补丁,因为许多文件具有相同的名称,例如,如果跨多个项目更改 Android.mk,补丁拆分器很难理解这种结构,因此它认为同一个文件被反复修改。

如果您参考 AOSP 文档,您会发现大量信息。现在您将需要使用非传统的搜索技术来实际找到其中的大部分。 Google 在网络上提供的 AOSP 文档不足以了解所有内容。这只是一个起点。

实际文档可以在特定项目中找到。如果您查看该项目下的 Readme 文件或 docs/ 文件夹,您可能会发现一些更相关的内容。

很容易说它没有很好的记录,但实际上问题在于曝光和组织。文档很丰富,但经常找不到。