元気にやっていますか?
私は相変わらず、曖昧な空白とともにふらふらする毎日です。
健体壮美なあなたのことだから大丈夫だとは思いますが、
くれぐれもお体にはお気をつけください。

2010/04/13

WindowsユーザがAndroid標準ライブラリをEclipseで参照できるようになるまで

EclipseでAndoroidアプリをコーディングするにあたって、ライブラリ(android.jar)の中を追えないのは不便なので、ソースコードをダウンロードしようと思い立った。(Android-SDKにはソースが含まれていない。)
だけど、このプロジェクトはWindows環境に対するサポートがない。
Building under Windows is not currently supported.
だから、WindowsユーザはUNIXライクな環境を構築するところから始めなければならない。
UNIXコマンドを使い慣れていないWindowsユーザは、いくつもの壁にぶち当たることになるので、UNIXに全く触ったことのない人(僕もそのうちの一人だけど)が実施できるように詳細な手順を書く。

<サマリ>
1.UNIXコマンドを使用できるようにするため、cygwinをインストールする
2.repoコマンドをインストールする
3.repoに対する実行権限を付与
4.リポジトリ(repo)の初期化
5.ソースコードのダウンロード(リポジトリの同期)
6.ソースコードを所定のディレクトリへコピーする
7.Eclipseの再起動

<手順>
1.UNIXコマンドを使用できるようにするため、cygwinをインストールする
デフォルトパッケージに加え、git、curl、corkscrewをインストールしておく。
【参考】

2.repoコマンドをインストールする
cygwinのコマンドラインより以下を実行。
curl -k https://android.git.kernel.org/repo > /bin/repo
プロキシ経由でインターネットにつながっている場合は、xオプションを追加する。
curl -k -x <host>:<port> https://android.git.kernel.org/repo > /bin/repo
<host>→プロキシサーバのホスト名、もしくは、IPアドレス
<port>→プロキシサーバのポート番号

プロキシ環境にもかかわらず、xオプションを指定しない場合、以下のようなエラーが発生する。

curl: (6) Couldn't resolve host 'android.git.kernel.org'
kオプションは、安全でないSSLの接続を行うことを許可するためのオプション。
(「安全でない」とは、デフォルトのCA証明書がカバーしていないサーバとの接続のこと。)
kオプションを指定しないと以下のようなエラーが発生する。
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
成功すると、以下のような表示。
$ curl -k https://android.git.kernel.org/repo > /bin/repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17211    0 17211    0     0   6840      0 --:--:--  0:00:02 --:--:--  8767
<cygwin-HOME>/bin/repoというテキストファイルが作成されている(中身は、シェルスクリプト)。
<cygwin-HOME>/bin/にファイルを作成しているので、パスを新たに設定する必要がない。
【参考】



3.repoに対する実行権限を付与
chmod a+x /bin/repo
【参考】

4.リポジトリ(repo)の初期化
作業用のディレクトリ作成、移動、初期化実行。
mkdir ~/work
cd ~/work
repo init -u git://android.git.kernel.org/platform/manifest.git
ただし、プロキシ環境の場合は、以下2点の配慮が必要。
  1. corkscrewコマンドでプロキシサーバをトンネリングする。
  2. プロキシサーバがgitプロトコル(ポート番号:9418)のトンネリングを許可するよう設定する。
プロキシサーバの設定を変えなければならないというのは、かなり痛い。
会社や学校など、プロキシ設定が帰られない状況ならば、ダウンロードはできないということだ。
トンネリングの具体的な方法は以下のサイトを参照。

プロキシをうまくトンネリングできていないと、以下のようなエラーが発生する。
$ repo init -u git://android.git.kernel.org/platform/manifest.git
Getting repo ...
   from git://android.git.kernel.org/tools/repo.git
Proxy could not open connnection to android.git.kernel.org:  Forbidden
fatal: The remote end hung up unexpectedly
成功すると、以下のような表示。
$ repo init -u git://android.git.kernel.org/platform/manifest.git
warning: gpg (GnuPG) is not available.
warning: Installing it is strongly encouraged.

Getting repo ...
   from git://android.git.kernel.org/tools/repo.git
remote: Counting objects: 982, done.
remote: Compressing objects: 100% (392/392), done.
remote: Total 982 (delta 616), reused 919 (delta 570)
Receiving objects: 100% (982/982), 290.03 KiB | 394 KiB/s, done.
Resolving deltas: 100% (616/616), done.
From git://android.git.kernel.org/tools/repo
 * [new branch]      master     -> origin/master
 * [new branch]      stable     -> origin/stable
 * [new tag]         v1.6.9.1   -> v1.6.9.1
From git://android.git.kernel.org/tools/repo
 * [new tag]         v1.0       -> v1.0
 * [new tag]         v1.0.1     -> v1.0.1
 * [new tag]         v1.0.2     -> v1.0.2
 * [new tag]         v1.0.3     -> v1.0.3
 * [new tag]         v1.0.4     -> v1.0.4
 * [new tag]         v1.0.5     -> v1.0.5
 * [new tag]         v1.0.6     -> v1.0.6
 * [new tag]         v1.0.7     -> v1.0.7
 * [new tag]         v1.0.8     -> v1.0.8
 * [new tag]         v1.0.9     -> v1.0.9
 * [new tag]         v1.1       -> v1.1
 * [new tag]         v1.2       -> v1.2
 * [new tag]         v1.3       -> v1.3
 * [new tag]         v1.3.1     -> v1.3.1
 * [new tag]         v1.3.2     -> v1.3.2
 * [new tag]         v1.4       -> v1.4
 * [new tag]         v1.4.1     -> v1.4.1
 * [new tag]         v1.4.2     -> v1.4.2
 * [new tag]         v1.4.3     -> v1.4.3
 * [new tag]         v1.4.4     -> v1.4.4
 * [new tag]         v1.5       -> v1.5
 * [new tag]         v1.5.1     -> v1.5.1
 * [new tag]         v1.6       -> v1.6
 * [new tag]         v1.6.1     -> v1.6.1
 * [new tag]         v1.6.2     -> v1.6.2
 * [new tag]         v1.6.3     -> v1.6.3
 * [new tag]         v1.6.4     -> v1.6.4
 * [new tag]         v1.6.5     -> v1.6.5
 * [new tag]         v1.6.6     -> v1.6.6
 * [new tag]         v1.6.7     -> v1.6.7
 * [new tag]         v1.6.7.1   -> v1.6.7.1
 * [new tag]         v1.6.7.2   -> v1.6.7.2
 * [new tag]         v1.6.7.3   -> v1.6.7.3
 * [new tag]         v1.6.7.4   -> v1.6.7.4
 * [new tag]         v1.6.7.5   -> v1.6.7.5
 * [new tag]         v1.6.8     -> v1.6.8
 * [new tag]         v1.6.8.1   -> v1.6.8.1
 * [new tag]         v1.6.8.10  -> v1.6.8.10
 * [new tag]         v1.6.8.11  -> v1.6.8.11
 * [new tag]         v1.6.8.2   -> v1.6.8.2
 * [new tag]         v1.6.8.3   -> v1.6.8.3
 * [new tag]         v1.6.8.4   -> v1.6.8.4
 * [new tag]         v1.6.8.5   -> v1.6.8.5
 * [new tag]         v1.6.8.6   -> v1.6.8.6
 * [new tag]         v1.6.8.7   -> v1.6.8.7
 * [new tag]         v1.6.8.8   -> v1.6.8.8
 * [new tag]         v1.6.8.9   -> v1.6.8.9
 * [new tag]         v1.6.9     -> v1.6.9
Getting manifest ...
   from git://android.git.kernel.org/platform/manifest.git
remote: Counting objects: 413, done.
remote: Compressing objects: 100% (181/181), done.
remote: Total 413 (delta 149), reused 381 (delta 136)
Receiving objects: 100% (413/413), 91.54 KiB, done.
Resolving deltas: 100% (149/149), done.
From git://android.git.kernel.org/platform/manifest
 * [new branch]      android-1.5 -> origin/android-1.5
 * [new branch]      android-1.5r2 -> origin/android-1.5r2
 * [new branch]      android-1.5r3 -> origin/android-1.5r3
 * [new branch]      android-1.5r4 -> origin/android-1.5r4
 * [new branch]      android-1.6_r1 -> origin/android-1.6_r1
 * [new branch]      android-1.6_r1.1 -> origin/android-1.6_r1.1
 * [new branch]      android-1.6_r1.2 -> origin/android-1.6_r1.2
 * [new branch]      android-1.6_r1.3 -> origin/android-1.6_r1.3
 * [new branch]      android-1.6_r1.4 -> origin/android-1.6_r1.4
 * [new branch]      android-1.6_r1.5 -> origin/android-1.6_r1.5
 * [new branch]      android-1.6_r2 -> origin/android-1.6_r2
 * [new branch]      android-2.0.1_r1 -> origin/android-2.0.1_r1
 * [new branch]      android-2.0_r1 -> origin/android-2.0_r1
 * [new branch]      android-2.1_r1 -> origin/android-2.1_r1
 * [new branch]      android-2.1_r2 -> origin/android-2.1_r2
 * [new branch]      android-2.1_r2.1p -> origin/android-2.1_r2.1p
 * [new branch]      android-2.1_r2.1s -> origin/android-2.1_r2.1s
 * [new branch]      android-sdk-1.5-pre -> origin/android-sdk-1.5-pre
 * [new branch]      android-sdk-1.5_r1 -> origin/android-sdk-1.5_r1
 * [new branch]      android-sdk-1.5_r3 -> origin/android-sdk-1.5_r3
 * [new branch]      android-sdk-1.6-docs_r1 -> origin/android-sdk-1.6-docs_r1
 * [new branch]      android-sdk-1.6_r1 -> origin/android-sdk-1.6_r1
 * [new branch]      android-sdk-1.6_r2 -> origin/android-sdk-1.6_r2
 * [new branch]      android-sdk-2.0.1-docs_r1 -> origin/android-sdk-2.0.1-docs_r1
 * [new branch]      android-sdk-2.0.1_r1 -> origin/android-sdk-2.0.1_r1
 * [new branch]      android-sdk-2.0_r1 -> origin/android-sdk-2.0_r1
 * [new branch]      android-sdk-2.1_r1 -> origin/android-sdk-2.1_r1
 * [new branch]      android-sdk-tools_r2 -> origin/android-sdk-tools_r2
 * [new branch]      android-sdk-tools_r3 -> origin/android-sdk-tools_r3
 * [new branch]      android-sdk-tools_r4 -> origin/android-sdk-tools_r4
 * [new branch]      android-sdk-tools_r5 -> origin/android-sdk-tools_r5
 * [new branch]      cdma-import -> origin/cdma-import
 * [new branch]      cupcake    -> origin/cupcake
 * [new branch]      cupcake-release -> origin/cupcake-release
 * [new branch]      donut      -> origin/donut
 * [new branch]      donut-plus-aosp -> origin/donut-plus-aosp
 * [new branch]      eclair     -> origin/eclair
 * [new branch]      master     -> origin/master
 * [new branch]      release-1.0 -> origin/release-1.0
 * [new tag]         android-1.5 -> android-1.5
 * [new tag]         android-1.5r2 -> android-1.5r2
 * [new tag]         android-1.5r3 -> android-1.5r3
 * [new tag]         android-1.5r4 -> android-1.5r4
 * [new tag]         android-1.6_r1 -> android-1.6_r1
 * [new tag]         android-1.6_r1.1 -> android-1.6_r1.1
 * [new tag]         android-1.6_r1.2 -> android-1.6_r1.2
 * [new tag]         android-1.6_r1.3 -> android-1.6_r1.3
 * [new tag]         android-1.6_r1.4 -> android-1.6_r1.4
 * [new tag]         android-1.6_r1.5 -> android-1.6_r1.5
 * [new tag]         android-1.6_r2 -> android-1.6_r2
 * [new tag]         android-2.0.1_r1 -> android-2.0.1_r1
 * [new tag]         android-2.0_r1 -> android-2.0_r1
 * [new tag]         android-2.1_r1 -> android-2.1_r1
 * [new tag]         android-2.1_r2 -> android-2.1_r2
 * [new tag]         android-2.1_r2.1p -> android-2.1_r2.1p
 * [new tag]         android-2.1_r2.1s -> android-2.1_r2.1s
 * [new tag]         android-sdk-1.5-pre -> android-sdk-1.5-pre
 * [new tag]         android-sdk-1.5_r1 -> android-sdk-1.5_r1
 * [new tag]         android-sdk-1.5_r3 -> android-sdk-1.5_r3
 * [new tag]         android-sdk-1.6-docs_r1 -> android-sdk-1.6-docs_r1
 * [new tag]         android-sdk-1.6_r1 -> android-sdk-1.6_r1
 * [new tag]         android-sdk-1.6_r2 -> android-sdk-1.6_r2
 * [new tag]         android-sdk-2.0.1-docs_r1 -> android-sdk-2.0.1-docs_r1
 * [new tag]         android-sdk-2.0.1_r1 -> android-sdk-2.0.1_r1
 * [new tag]         android-sdk-2.0_r1 -> android-sdk-2.0_r1
 * [new tag]         android-sdk-2.1_r1 -> android-sdk-2.1_r1
 * [new tag]         android-sdk-tools_r2 -> android-sdk-tools_r2
 * [new tag]         android-sdk-tools_r3 -> android-sdk-tools_r3
 * [new tag]         android-sdk-tools_r4 -> android-sdk-tools_r4
 * [new tag]         android-sdk-tools_r5 -> android-sdk-tools_r5
From git://android.git.kernel.org/platform/manifest
 * [new tag]         android-1.0 -> android-1.0

5.ソースコードのダウンロード(リポジトリの同期)
4で作成した作業用のディレクトリにて引き続きcygwinコマンドを実行。
repo sync
莫大な量のファイルをダウンロードするので、1~2時間かかる。

6.ソースコードを所定のディレクトリへコピーする
欲しいソースは以下のディレクトリにダウンロードされている。
<repoの作業用ディレクトリ>/frameworks/base/core/java/android
<repoの作業用ディレクトリ>/frameworks/base/core/java/com

この2つのディレクトリをandroid.jarと同じディレクトリの"sources"にコピーする。
android.jarは、使用するバージョンによって格納場所が異なる。
2010年4月14日現在の最新、Android SDK Platform 2.1_r1の場合↓
<android-sdkのインストールディレクトリ>/platforms/android-7/

C:\android-sdk\platforms\android-7
|  android.jar

└─sources
    ├─android
    └─com
【参考】

7.Eclipseの再起動
Eclipseを起動済みの場合は、再起動する。


全体的にお世話になったサイト:

2 件のコメント:

  1. コメント拝見いたしました。
    参考にして頂き、ありがとうございました。
    これからも参考にして頂けるような情報をUPしていきますので、指摘、問題等あれば連絡ください。

    返信削除
  2. 今までjadclipseで見ていたのですが、こちらを参考に、ソースを落とせました。
    ありがとうございました。
    vistaなので思わぬところでつまづきましたが、なんとか出来ました!

    返信削除