Portable Ubuntu RemixでAndroidバイナリを作成する
Portable Ubuntuのプロジェクト成果物が、以前と変わっているようだ。
以前のPortable Ubuntu for Windowsに相当するものは”Portable Ubuntu Remix Version UNO”という名前になっており、新しく”Portable Ubuntu Remix Version DOS”というものがあった。
違いはよく分かっていないが、Version DOSの方はCygwinを利用しているようだ。また、ベースとなるUbuntuのバージョンが、UNOでは8.04, DOSでは9.04のようだ。
また、ホームドライブの容量拡張方法も変わっており、Version DOS release 4以降ではToporesizeというアプリから行うように記載されている(入手はここから)。試しに実行してみたが、容量の変更に失敗しているようにみえる場合もあり、バックアップをとってから実行した方が良いように思う。
今回、このPortable Ubuntu Remixに、Androidネイティブバイナリのビルドを行うための環境を構築した。長期的に利用するのであれば、おそらくPortable UbuntuよりCygwin上に構築する方がWindows環境との親和性が高く良いと考える。ただ、今回後述のライブラリ”Sourcery G++ Lite”がCygwinへはうまくインストールできなかったためこちらを利用することにした。
準備
- Windows上へのインストール
- Portable Ubuntu Remix上へのインストール
- Sourcery G++ Lite for ARM GNU/Linux 2009q1-203 (IA32 GNU/Linux Installerを利用)
なお、以下ではPortable Ubuntu Remix(以降、Portable Ubuntu)設定作業についてのみ記述する。Android SDK及びAndroid Emulatorの設定についてはこちらなどを参考に、SDカードを持ったAVDを作成し起動しておく。
共有ディレクトリ設定
インストール時に作成されるファイルPortable_Ubuntu_DOS\config\portable_ubuntu.confで設定を行う。
ファイルを”shared_folder”で検索しヒットした箇所の例の通り記述すれば良い。
Portable Ubuntu上では /media/cofsX にマウントされる。
日本語化
必須というわけではないが、取り敢えず行っておく。
- Portable Ubuntuを起動する。
- 画面上部に表示されるパネルから、System > Administration > Language Support を選択する。
- 表示されたLanguageダイアログの最下部ボタン Install / Remove Languages... を押す。
- 表示されたInstalled Languagesダイアログで、japaneseにチェックをつけ、Apply Changesボタンを押す。
- Languageダイアログに戻り、日本語を選択して完了。
Sourcery G++ Lite for ARM GNU/Linux インストール
$ sh arm-2009q1-203-arm-none-linux-gnueabi.bin
を実行し、表示されたとおりに進めればよい。rootのデフォルトパスワードは123456。
上記インストーラでインストールすると、~/.bash_profile ファイルが作成される。クロスコンパイラのPATH設定を行うためのものであるが、.bash_profileが存在すると.profileが読み込まれず、次回起動時に不具合が出る。このため、.bash_profileは(必要であればバックアップをとった後)削除し、PATH設定は.profileに追記しておく。
再起動して、起動できてPATH設定も正しいことを確認できれば完了。
バイナリ作成
androidネイティブバイナリを作成する。ライブラリダイナミックリンク版も作成できるようだが、ここでは簡単なスタティックリンク版を作成・実行する。
hello worldコードをhello.cに記述し、以下のコマンドを実行すれば良い。
$ arm-none-linux-gnueabi-gcc hello.c -o hello –static
fileコマンドで確認すると、ARM用バイナリであることがわかる。
$ file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not stripped
バイナリ実行
今回、Android EmulatorはWindows上で起動しているため、共有ディレクトリ経由でWindowsに上記で作成したバイナリを持って来る。
その後、EmulatorのSDカードにバイナリを置く。コマンドプロンプトで下記コマンドを実行すればよい。
> adb push hello /sdcard
次にEmulatorのshellを起動する。
> adb shell
ただし、/sdcardはnoexec付きでmountされているため、このままでは実行できない。
# mount
/dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1000,fmask=0711,dmask=0700,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8 0 0
このため、Emulatorを起動して初回実行する前に、下記のコマンドを実行し、実行可能なようにマウントし直す。
# umount /sdcard
# mount –t vfat /dev/block//vold/179:0
これで作成したプログラムを実行できる。
# /sdcard/hello
参考
- Port OpenGL/SDL/TinySDGL to android with native C
Sourcery G++ Lite for ARM GNU/Linuxについて。 - Android Dev Phone 1 その2 – splhack
sdcard上のバイナリ実行について。
« Google Chrome Beta でhttpsのログイン/ログアウトに不具合 | トップページ | Android EmulatorでSDLを実行してみる »
この記事へのコメントは終了しました。
« Google Chrome Beta でhttpsのログイン/ログアウトに不具合 | トップページ | Android EmulatorでSDLを実行してみる »
コメント