How to Add New Project into AOSP
在上一篇《How to Create Branch in Android Local Mirror》中,我介绍了如何在Android Mirror中创建分支,然后进行协同开发。既然是分支,那么增加、删除、修改文件等操作,自然是少不了的,麻烦不到哪里去。不过,如果是增加一个新的工程,就稍微麻烦些了。
过去的几个月里,我不断地在看《Android系统源代码情景分析》和《深入理解Android:卷I》,两位作者讲述知识的方式有一个共同点,就是用图表(UML)来描述,用代码来验证。所以,不可避免我要创建一些测试工程,同时,这些工程还要在不同的机器上协同开发。
接下来,我把在AOSP中,如何增加一个新工程的流程,整理成文字,希望帮助到其他人。
Step 1
明确下,Android Mirror 在一台 Debian 机器上,而我用来工作的 Android Source 在另外一台 Mac OS X 上。
首先登录到 Debian 系统以后,进入到 Android Mirror 的目录。
$ cd ~/android-mirror
Step 2
我考虑建立一个叫做 pointer-demo 的工程,用来练习 RefBase、LightRefBase、sp、wp,这些在 Android 里到处可见的东西,不得不掌握。
想到这里,我决定在 platform/external/ 创建这个 Repository
$ git init --bare platform/external/pointer-demo.git
完毕后,可看到如下输出:
Initialized empty Git repository in /home/poemcode/android-mirror/platform/external/pointer-demo.git/
Step 3
在前一步完成以后,Repository 是一个“裸”版本库,其中还没有我需要的分支。--因为我在 Mac OS X 上,创建了一个 poemcode-5.0 的分支。显然,pointer-demo 还没有这个。
那么就进入到临时目录,--随便一个目录都可以,用完后删除掉。
$ cd /tmp
克隆代码出来:
$ git clone /home/poemcode/android-mirror/platform/external/pointer-demo.git pointer-demo
然后,进入到 pointer-demo,把之前写好的代码文件等拷贝过来,把它提交了。
$ git add Android.mk
$ git add lightpointer.cpp
$ git commit -m 'add the demo code: LightBaseRef and sp'
$ git push
此时,代码仓库中只是有了 master 分支,还没有我需要的分支,继续操作。先在本地创建需要的分支,然后推送过去。
$ git checkout -b poemcode-5.0
$ git push origin poemcode-5.0
完成以后,这个目录就可以删除了。
Step 4
接下来回到 Mac OS X,进入到 Android Source 目录,编辑“根”目录下的 .repo/manifests/default.xml 文件,明确“告诉” repo,多出了pointer-demo工程。
然后把修改提交了:
$ git add default.xml
$ git commit -m 'Add platform/external/pointer-demo'
$ git push
Step 5
最后,执行同步:
$ repo sync platform/external/pointer-demo
完成后检查external目录下,是不是多出了pointer-demo目录,并进入到该目录。
$ git status
会得到如下输出:
当前不在任何分支上。
无文件要提交,干净的工作区
没有关系,对分支进行执行:
$ git checkout poemcode-5.0
可以看到输出:
分支 poemcode-5.0 设置为跟踪来自 aosp 的远程分支 poemcode-5.0。
切换到一个新分支 'poemcode-5.0'
最后确认一下:
$ git status
位于分支 poemcode-5.0
您的分支与上游分支 'aosp/poemcode-5.0' 一致。
无文件要提交,干净的工作区
最后提醒一句,完成增加新工程这个目标,上述做法并非唯一,所谓条条大道通罗马,如果你有其他方法,欢迎告诉我。