Android Developers Blog: Introducing Android 1.5 NDK, Release 1

Android 1.5 NDK Release 1 が出てた。これでJNIがやりやすくなりますね。

http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

それにしても、ここを長らくほったらかしにしすぎだった。できるだけ毎週末には少しずつ書いていくように頑張ろう。

これは素晴らしい JNI on Android のまとめ情報

JNI絡みで書こうかと思ってたこと以上のことが全て書かれていた。すばらしい。

ライブラリは/system/lib に置くよりは、/data/data//lib に置くほうが私はいいと思っていますが、それは些細なことですね。

Tips: JNIのnativeライブラリの置き場所

/system をread-writeモードでremountしてからsoファイルを書き込むということでも可能だが、/system 以下を書き換えるのは抵抗がある、という方は別の場所にライブラリを置けばいい。

/data/data//lib ディレクトリに置いたライブラリも、Dalvik上のアプリケーションからライブラリのロードパスとして認識されているので、そこに追加のsoファイルを置けばいい。

ただし、/data/data//lib は所有者が system:system となっている*1ため、通常のユーザ権限ではファイルを追加できないので、root権限での作業が必要。

/data/data//lib は別のアプリケーションからはライブラリのロードパスとは認識されていないので、アプリケーション専用のnativeライブラリを置くという観点でも良い場所である。

一般のアプリケーションのapkの中にsoファイルを入れたものを提供できるようになった場合*2、この手作業が自動化されるのだろう。

*1:Dalvikアプリケーションがネット上などからnativeライブラリを取得し、自分の権限で書き込み可能な場所に置くという方法で、任意のnativeライブラリをロードできるようなことが起きないようにしていると思われる。

*2:標準アプリケーションのapkファイルには、soファイルが含まれるものがすでにある。

Android Dev Phone 1 の正式な1.1イメージ

http://blogger.splhack.org/2009/03/official-adp1-image.html からの情報で、ADP1の正式な1.1イメージが公開されていることに気づいたので、早速適用してみた。

適用手順(on Windows)

  • Windows用fastboot.exe をダウンロードし、%ANDROID_HOME%\tools にコピーしておく
  • 1.1 の radio image と system image を両方ダウンロードする
    • 念のため、元に戻すことができるように 1.0のイメージも両方ダウンロードしておく
  • ADP1をPCとUSBで接続する(ADP1にはSDカードを挿入しておく)
  • もし、デバイスマネージャ上で、接続したADP1が"HTC Dream Composite ADB Interface"として見えていない場合は、ドライバを手動で更新する(http://forum.xda-developers.com/showthread.php?t=463627 を参照)
    • USB Mass Storage(USB大容量記憶装置デバイス)の詳細タブを表示する
    • プルダウンメニューで Compatible Ids (互換性ID)を選択する
    • 下のテキストボックスに表示された内容が以下のものである場合それがADP1なので、ドライバタブを選択してドライバの更新ボタンでドライバ更新を開始する
USB\Class_ff&SubClass_42&Prot_03
USB\Class_ff&SubClass_42
USB\Class_ff
  • adb devices で ADP1の接続を確認する
  • radio image の(1.1への)アップデート
    • radio image のZIPファイルを adb push で ADP1内のSDカード上にupdate.zip というファイル名でコピーする
> adb push ota-radio-1_22_14_11.zip /sdcard/update.zip
    • ADP1の電源を落としてから、HomeボタンとBackボタンを押しながら起動しなおす
    • !のアイコンが表示されたらキーボードを開いて、ALT+L を押してアップデートの途中経過が表示されるようにする
    • ALT+Sを押して、SDカード上のupdate.zipをインストールする
    • インストール終了後、HomeボタンとBackボタンを押して再起動する
      • ここでは必ずHome+Backで再起動することそうしないとradio imageが適用が完了しない
  • system image の(1.1への)アップデート
    • ADP1をPCとUSBで接続する
    • ADP1をFASTBOOTモードで起動する (カメラボタンを押しながら電源ONでの起動)
      • 画面上に FASTBOOT と表示されていなければ、Backボタンを押してFASTBOOTと表示される状態にする
    • もしダウンロードしたアプリを消してしまいたい場合は、以下のコマンドでuserdata を消去する(通常の場合、この手順は不要)
> fastboot erase userdata
    • 同じようにcacheも消去することができる(私の場合、こちらは行った)
> fastboot erase cache
    • システムイメージを書き込む
> fastboot update signed-dream_devphone-img-130444.zip
    • 書き込み終了後に自動で再起動しない場合は、以下のコマンドなどで再起動する
> fastboot reboot
> fastboot reboot-bootloader
      • MENU+SEND+END でも再起動可能

HTC Dream(ADP1)向けのソースコード取得・ビルド

基本的なソースコード取得方法

release-1.0 取得方法

  • repo init 時に、-b release-1.0 も指定して、~/mydroid を初期化する
    • % repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
  • 基本と同じく、local_manifest.xml を~/mydroid/.repo 以下に置く
  • local_manifest.xml ファイル中の、vendor/htc/dream と hardware/msm7k の revision を cupcake と指定する
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
 <remove-project name="kernel/common"/>
 <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-htc-2.6.25"/>
 <project path="vendor/htc/dream" name="platform/vendor/htc/dream" revision="cupcake"/>
 <project path="hardware/msm7k" name="platform/hardware/msm7k" revision="cupcake"/>
</manifest>
    • vendor/htc/dream と hardware/msm7k には、release-1.0 のタグやブランチが無いための処置
  • repo sync で取得する

最新版のカーネルを新しいもの(2.6.27)にする取得方法

  • repo init は通常通りで、~/mydroid を初期化する
    • % repo init -u git://android.git.kernel.org/platform/manifest.git
  • 基本と同じく、local_manifest.xml を~/mydroid/.repo 以下に置く
  • local_manifest.xml ファイル中の、kernel の revision 指定を refs/heads/android-msm-2.6.27 と指定する
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
 <remove-project name="kernel/common"/>
 <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.27"/>
 <project path="vendor/htc/dream" name="platform/vendor/htc/dream"/>
 <project path="hardware/msm7k" name="platform/hardware/msm7k"/>
</manifest>
    • 2.6.27 のカーネルにはHTC専用のものが無い(?)
  • repo sync で取得する

ビルド(HTC Dream向け)

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
  • VMUbuntu環境にPCとUSBで接続したADP1を接続する(VMWare Player の機能を使用する)
    • APD1 はUSB Debugging が出来る状態にあらかじめセットしておく
    • VM側でADP1を参照できるようにすると、Host OS側からは見えなくなる
  • ~/mydroid/vendor/htc/dream 直下の シェルスクリプトを実行し、ADP1からHTCのプロプライエタリなファイル(バイナリ)を取得しておく
    • これらのファイルはソースから生成することが出来ない
  • ~/mydroid/build/buildspec.mk.default を ~/mydroid/buildspec.mk にコピーする
  • ~/mydroid/buildspec.mk のTARGET_PRODUCT をコメントでなくし(先頭の#を取り除き)、generic を htc_dream に書き換える
  • ~/mydroid をカレントディレクトリにして、make コマンドを呼び出す

補足

  • UbuntuVMから実機(ADP1)と接続できるように設定し、adb が正常動作したとしても、fastboot は正常に動作しない模様

Android ソースツリーの取得

アプリの作り方もとりあえずすっ飛ばします。Windows だけでソースの取得・ビルドする環境を作るなんてやってられないので、VMLinux(Ubuntu)環境を作ってその上でソースコードを取得します。

Ubuntu VMの導入

  • VMware Workstation Player | VMwareからVMWare Playerをダウンロードしてきてインストールする(インストール後再起動が必要です)
  • Homepage | Ubuntu Japanese Teamから日本語 Remix VMware仮想マシン(私は8.04LTSを選択)をダウンロードしてきて展開し、適当な場所に置く
    • 日本語 Remixを使うのは、ディスクの空き容量がたっぷりある設定がされているVMのため
  • VMを起動し、初回起動時の手順に従ってユーザを作成したり、パッケージをアップデートしたりする
    • open-vm-tools が 8.10 ではうまく動作しないようなので、vmware-tools を持っていない人は 8.04 から 8.10 へのアップグレードはしない方が良いです
  • メニューのトラブルシューティング→メモリ割り当ての変更で、最低1024MB以上のメモリ割り当てに変更した後、Ubuntuを再起動する
    • VMに割り当てられたメモリが少ないとAndroidのビルドに非常に時間がかかってしまうので、多くしておくことが望ましい
      • vmxファイルの中の数値をエディタで書き換えても良い

ソースコードの取得

インストール手順レベルの英語くらいは読めないと先々すぐに詰まることになるので、日本語で細かく手順を記載しない。

  • 再起動後ログインし、http://source.android.com/の手順に従って必要なソフトをapt-get(もしくはパッケージマネージャ)でインストールしていく
    • 最新版のソースツリーだと大丈夫かもしれませんが、JDK 6ではビルドがうまくいかないということがあったので、JDK 5系を入れた方が無難かもしれない(たぶん JDK 6系でも大丈夫だと思いますが)
    • SDKでのアプリ開発だけなら、Eclipse 上でたいてい作業できますが、ソースコード取得・ビルドの領域までくると、端末エミュレータ上でのコマンドライン操作が普通に出来るようにならないとやってられません
  • http://source.android.com/の手順に従ってrepoを取得する
    • repo取得後に source コマンドで ~/.profile を読み込みなおしてください。そうしないと、~/bin にパスが通りません
      • % source ~/.profile
  • 手順に従ってrepoを使ってソースを取ってくる
    • 途中でユーザ名、メールアドレスを設定しろと言われるので設定する


ここまでで generic なソースコードの最新版を取得することができる。

Android SDK の準備 (Windows)

Java SDKのダウンロード・インストール

Eclipseのダウンロード・インストール

Android SDKのダウンロード・インストール

EclipseへのADTプラグインの導入


ここまでで最低限アプリケーションを開発する環境は揃う。
ただし、作ったアプリケーションをMarketで公開することまで考えると、署名するための環境構築などがまだ必要。が、とりあえずそれは後回し。