Android SDKのソースコードをrepoコマンドでダウンロードする

Android SDKソースコードが欲しくなったのでダウンロードしました。以前はブラウザからダウンロードする方法があったのに、なんかrepoコマンドを使ってリポジトリからチェックアウトしないと、入手する方法がなくなっているようです。これが結構ややこしいので、後で忘れたときの為にメモっておきます。

repoコマンドの準備

$ curl -LO https://dl-ssl.google.com/dl/googlesource/git-repo/repo
$ cd /usr/local
$ sudo mkdir repo
$ cd repo
$ sudo mv ~/repo .
$ sudo chmod a+x repo
$ ln -s ../repo/repo ../bin/repo

ソースコードの取得

$ cd ~/Dev
$ mkdir Android_source
$ cd Android_source
$ repo init -u https://android.googlesource.com/platform/manifest
warning: gpg (GnuPG) is not available.
warning: Installing it is strongly encouraged.

省略

Your Name  [myname]:
Your Email [myname@localhost]:

Your identity is: myname <myname@localhost>
is this correct [y/n]? y

repo initialized in /Users/myname/Dev/Android_source

どういう工程か良く分かりませんが、まずここまでやります。
ブランチを指定してないので、repo init -u https://android.googlesource.com/platform/manifest -b masterの様にmasterを指定した扱いになります。
この例の場合、Android_sourceがワーキングディレクトリとなります。
repoを使うのは、恐らくAndroid SDK自体の開発者となるからなのか、名前とメールアドレスの入力が必要です。

ブランチ名を調べる
$ ls -1 .repo/manifests.git/logs/refs/remotes/origin/
android-1.6_r1
android-1.6_r1.1
android-1.6_r1.2
android-1.6_r1.3
android-1.6_r1.4
android-1.6_r1.5
android-1.6_r2
android-2.0.1_r1
android-2.0_r1
android-2.1_r1
android-2.1_r2
android-2.1_r2.1p
android-2.1_r2.1p2
android-2.1_r2.1s
android-2.2.1_r1
android-2.2.1_r2
android-2.2.2_r1
android-2.2.3_r1
android-2.2.3_r2
android-2.2_r1
android-2.2_r1.1
android-2.2_r1.2
android-2.2_r1.3
android-2.3.1_r1
android-2.3.2_r1
android-2.3.3_r1
android-2.3.3_r1.1
android-2.3.4_r0.9
android-2.3.4_r1
android-2.3.5_r1
android-2.3.6_r0.9
android-2.3.6_r1
android-2.3.7_r1
android-2.3_r1
android-4.0.1_r1
froyo
gingerbread
gingerbread-release
ics-mr0
master

initまでしてあれば、上記ディレクトリを見てブランチ名が調べられます。

$ repo init -b froyo

もし、masterではなく例えばfroyoのソースコードが欲しい場合は、ブランチを切り替えます。

実際にダウンロードする
$ repo sync

initが終わったらsyncする事で実際にワーキングディレクトリにソースコードが入ってくるわけですが、これがかなり時間かかります。ちゃんと計ってませんが1時間くらいかかりました。

eclipseに登録する部分
$ cd /path/to/AndroidSDK/platforms/android-10
$ cp /Users/myname/Dev/Android_source/frameworks/base/core/java sources

Android SDKソースコードが欲しかったのは、eclipseからSDK部分のメソッドやクラスの宣言部分を、すばやく開けるようにしたいからです。調べてみたところ、frameworks/base/core/javaがそれに必要な部分らしいので、上記のようにAndroid SDKの方にコピーしました。
なお、この例だとandroid-10にコピーしてるけど、取ってきたソースコードのバージョンに合わせて変えないとです。

補足

ブランチの切り替え
$ repo init -u https://android.googlesource.com/platform/manifest -b froyo
$ repo sync

これは、最初からブランチを指定する場合。

$ repo init -b froyo
$ repo sync

既にrepo syncして取得済みのを別ブランチに切り替える場合は、ワーキングディレクトリで上記の手順になります。repo syncしなおす必要があるので、それなりの時間がかかると思います。

Android SDKソースコードは、HEADよりはFroyoやGingerbreadのリリース時点のが欲しいわけですが、このブランチを指定するのがなかなか分かりませんでした。Gitのようにrepo branchでどうにかすれば、ブランチの一覧や切り替えが出来るのかなと思ったけど、どうもこれは用途が違うっぽい。このブランチ切り替えの方法を見つけるのに、結構時間かかりました。

リポジトリについて

前回のブログ記事で今年(2011年)8月にダウンロードしたソースからシステムをBuildしましたが、今回、久々に最新のソースを利用しようとしたところ、ソースツリーのURLが変更になっていました。(ソースコードリポジトリがkernel.orgからgooglesource.comに移されたようです)

 ・新(11/5/2011): https://android.googlesource.com/
 ・旧(8/13/2011): git://android.git.kernel.org/

Android: ソースツリーのURLが変更された | ナレッジデザイン大竹のホームページ (by drupal)

多分kernel.orgがクラックされた影響なんだろうけど、リポジトリが変わってました。kernel.orgだった時は、URLにクエリーストリングとかパスとかでブランチを指定すると、そのブランチのソースコードが圧縮ファイルでダウンロードできてました。新しいリポジトリでもダウンロード出来れば楽だったんだけど、調べても全然情報が見つかりません。仕方なくrepoコマンドを使いました。
しかし、eclipseからAndroid SDKソースコードを見れるようにしたいだけなのに、めんどくさすぎ。

ブランチ名について

前述のブランチ名を調べた際、gingerbreadとgingerbread-releaseがありました。

これらのブランチの用途は明記されていませんが、おそらくは

froyo = 開発ブランチ
froyo-release = リリースブランチ

のようです。今日の時点ではfroyo-releaseブランチの先頭にandroid-2.2_r1.1のタグが打たれています。

KMC Staff Blog:Android2.2(Froyo)のダウンロードとビルド

恐らくはと書かれた情報ですが、こういう違いになるらしいです。

repoコマンドについて

epo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Version Control.

Downloading the Source  |  Android Open Source Project

Android SDKはプロジェクト毎に分割されたGitリポジトリになっているらしく、どうもrepoコマンドはAndroid SDK専用のコマンドみたい。Gitの関連コマンドなのに、Gitと同じ感覚では使えないし、ここでしか使わないのに分かりにくいので、正直あまり深くは調べてません。

  1. 覚え書き: Repo と Git の使い方 (Using Repo and Git)
  2. Repo command reference  |  Android Open Source Project
  3. repo init の使い方覚書

一応、参考にしたrepoコマンドについてのページ。

環境

Mac Mac OS X 10.5.8(Leopard
repo 1.7.7.6
$ repo --version
repo version v1.7.7.6
       (from https://android.googlesource.com/tools/repo)
git version 1.7.3.5
Python 2.5.1 (r251:54863, May  5 2011, 18:37:34) 
[GCC 4.0.1 (Apple Inc. build 5465)]

書いた日

下書き発掘エントリー。最初に書き始めたのは2011-11-22。