2012年7月13日金曜日

Lion上でAndroidビルド

OSXでJCROMが、LionではできねーYO! とご指摘をいただきました。
Lionの載ったMBAで試してみたけど、、できるよ?
今回はAOSPの android-4.1.1_r1 をビルドしてみました。
基本的にJCROMの手順と同じです。


【環境構築】

1. ディスクユーティリティを使って大文字/小文字を区別するパーティションを作成


2. Xcode 3.x インストール
  • Appleのサイトの Looking for additional developer tools あたりから xcode_3.2.6_and_ios_sdk_4.3.dmg をダウンロードします(要登録)。「xcode 3.2.6」あたりのキーワードで検索すればすぐ見つかります。
  • dmgファイルをダブルクリックしてマウントしますが、そのままインストールしてはダメとのことで(出典)、ターミナルを開いて
    setenv COMMAND_LINE_INSTALL 1
    open /Volumes/Xcode\ and\ iOS\ SDK/Xcode\ and\ iOS\ SDK.mpkg
    
    とします(csh系の場合)。bashなら
    export COMMAND_LINE_INSTALL=1
    open /Volumes/Xcode\ and\ iOS\ SDK/Xcode\ and\ iOS\ SDK.mpkg
    
  • 場所(インストール先)が /Developer になることを確認してインストールを続けます。
  • 途中で「In order to continue the installation, please close the following application: iTunes」と言われてインストールが止まってしまいました。iTunesなんか起動してないのに! ⇒ 慌てず騒がず ps x して iTunesHelper のプロセスを見つけて kill します(出典)。
  • Xcode 4.x との共存はできないんじゃないかな… という話を聞きました。AndroidソースをビルドするかiOSのアプリ開発をするかどっちか選択しないとですねー()


3. ビルドに必要なツールのインストール
  • 最初にMacPortsを selfupdate します。インストール済みPortsも更新します。
    sudo port selfupdate
    sudo port upgrade outdated
    
  • gmake と libsdl と git-core と gnupg をインストールします(csh系)。
    setenv POSIXLY_CORRECT 1
    sudo port install gmake libsdl git-core gnupg
    
    bashなら Initializing a Build Environment の通り
    POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg
    でよいでしょう。

4. gmake 3.81
  • Initializing a Build Environment の通りです。
    sudo vi /opt/local/etc/macports/sources.conf
    # rsync の行より上に file:///Users/Shared/dports という一行を挿入
    mkdir /Users/Shared/dports
    cd /Users/Shared/dports
    svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
    portindex /Users/Shared/dports
    sudo port install gmake @3.81
    


5. Android SDK
  • 最新に更新しておきました。
  • Android SDK Tools → rev.20
  • Android SDK Platform-tools → rev.12


6. repo
  • こちらも念のため最新版を取得(MBAでは初めて repo 使うので)。
    curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
    chmod +x ~/bin/repo
    
    ~/bin はもともとパスが通してあります)


【ビルドの準備】

1. ソースコード取得
repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r1
repo sync -j4


2. プロプライエタリなバイナリ
  • Building for devices の Obtaining proprietary binaries にあるリンク先から Android 4.1.1 用バイナリをダウンロードします。W-CDMA(HSPA+)のGalaxy Nexus(SC-04Dもこれ)の場合はここの4つです。
  • wget とか curl とか使うまでもなく、ブラウザでダウンロードでいいかなって^^;
  • 各アーカイブをAndroidソースのルートディレクトリ(.repo のあるディレクトリ)に展開して extract-***.sh を実行します。
    tar xzf ~/Downloads/broadcom-maguro-jro03c-38ebfe02.tgz
    ./extract-broadcom-maguro.sh
    
    
    みたいな。[Enter]キーを押してライセンス表示 → ライセンスをよく読んで [Q] で抜ける(またはスペースで読み進める) → ライセンス納得できたら「I ACCEPT」と入力。

【ビルド手順】

0. bash を起動
  • ソースをダウンロードしたディレクトリに移動しておきます。


1. ファイル数制限緩和
ulimit -S -n 2048


2. キャッシュ設定
  • ccache のパスが変わっています。
    export USE_CCACHE=1
    export CCACHE_DIR=/Volumes/AndroidBuild/android-4.1.1_r1/.ccache
    ./prebuilts/misc/darwin-x86/ccache/ccache -M 20G

3. ビルド
  • HSPA+のGalaxy Nexusは maguro です。
    source build/envsetup.sh
    lunch full_maguro-user
    make -j4
    
    ⇒ エラーしたorz
  • /opt/local/lib/libz.dylib が i386 でリンクできない? そうなの?
    sudo port install zlib +universal
    make -j4
    ⇒ エラーしたorz
  • /opt/local/lib/libiconv.dylib が i386 でリンクできない? そうなの?
    sudo port install libiconv +universal
    make -j4
    ⇒ …ビルド終わったー キタ━━━━(゚∀゚)━━━━ッ!!

ROMの書き込みは OSXでJCROM と同じ。
手元のMBAは容量がカツカツなのでJCROMかAOSPかどっちかのソースしか持っておけないのですが、一応Lionでもビルドできましたよ、ということで共有しておきます。

p.s. ビルドしたJBを焼いたGNですがカメラが動きません(´・ω・`) 環境のせいではない気がするけど…うーん

1 件のコメント: