2011/02/06

FreeBSD の Android 開発環境

最近、猫も杓子もスマートフォンで再来年にはシェアが 50% を超えると言われてる。
つー訳でおいらもミーハーに Android 開発をやって見たくなり、とりあえず開発環境をしらべて見た。

と言ってもいつもの如く FreeBSD & Eclispe使いたく無い なので偉く苦労するはめに。



Android の SDK は Google が公開している。
http://developer.android.com/sdk/index.html

Linux 版があるので動かしてみた。
ダウンローダみたいのは起動したが Linux とは認識されずダウンロード出来ない (;_;) /blog/20110206/android-sdk-linux.png
赤い×印が...

で、ググってたら bsdroid なる物が有志で移植されてるらしいのを見付けた。
http://bsdroid.org/tiki-index.php

ここから AOSP-2.2-20100709-i386, 14Mb を落してくる。
GUI でもできるけど基本 CUI でやる。



BSDroid.INFO に従ってまずは環境設定。

$ setenv ANDROID_SDK_ROOT /opt/android-AOSP-2.2-i386-distro-20100709
$ setenv SDK_UPDATER_URLS http://bsdroid.org/

でツール起動して更新パッケージを全部落す。

$ tools/android update sdk -u



AVD(AndroidVirtualDevice)を作る。

$ tools/android list target
Available Android targets:
id: 1 or "android-AOSP"
     Name: Android AOSP (Preview)
     Type: Platform
     API level: AOSP
     Revision: 20100709
     Skins: WQVGA432, HVGA (default), WVGA854, WQVGA400, QVGA, WVGA800

$ tools/android create avd --name test --sdcard 64M --target 1

状況確認。

$ tools/android list avd                                                  
Available Android Virtual Devices:
    Name: test
    Path: /home/xxxx/.android/avd/test.avd
  Target: Android AOSP (Preview) (API level AOSP)
    Skin: HVGA
  Sdcard: 64M



エミュレータの起動。起動が凄く重い。Core2Duoで2分かかる。

$ tools/emulator -avd test

↓2分...



adb サーバを起動する。adbはデバッガらしい。

$ tools/adb fork-server server
$ tools/adb start-server



プロジェクトを作る。

$ tools/android create project -t 1 -p projects/sample -k "com.sample.test" -a HelloWorld

mainのソースとインストールまでできる build.xml が生成される。

$ ls -1 projects/sample/
AndroidManifest.xml
bin/
build.properties
build.xml
default.properties
libs/
local.properties
res/
src/



インストールを行うにはリリース用の鍵が必要なので keytool で作る。 パスワードは "android" でないといけない。 変更できると思うが設定の場所がよく分からん。

$ cd ~/.android/
$ keytool -genkey -v -keystore debug.keystore \
	-alias androiddebugkey -keyalg RSA \
	-validity 10000 -dname "CN=Android Debug,O=Android,C=US"
passwd: android



メインクラスに HelloWorld 出力コードの修正。
projects/sample/src/com/sample/test/HelloWorld.java:

package com.sample.test; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView disp = new TextView(this); disp.setText("Hello world!"); setContentView(disp); } }



やっとコンパイルとインストール。

が、このままコンパイルするとこんなエラーが出る。

…/projects/sample/build.xml:78: For 'AOSP' SDK Preview, attribute minSdkVersion in AndroidManifest.xml must be 'AOSP'

よく分からんがググって出て来た設定を projects/sample/AndroidManifest.xml に追加。

< ?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sample.test" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:icon="@drawable/icon"> <activity android:name="HelloWorld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="AOSP" /> <!-- これ追加 --> </manifest>



さらに、コンパイル時に tools/ant が無いと言われたら tools/ant を
http://bsdroid.org/tiki-index.php
の別のアーカイブから探してコピーする。

…/projects/sample/build.xml:78: Rules directory '…/tools/ant' is missing.



後は、エミュレータへのインストールまで ant がやってくれる。

$ cd projects/sample
$ ant install

エミュレータの画面を確認すると HelloWorld がアプリに追加されている。

実行してみる。

動いた!!

一応、これで最低限の開発環境が出来た。
でも実機持って無いんだよねオレ... orz



参考にしたページ:
http://d.hatena.ne.jp/isher/20100928/1285616799
http://blog.goo.ne.jp/quamtacq/e/416f3335540cee9e50b90dee47688bb4


2010/12/12

FreeBSDのUSB設定覚書

USB-Audio をやろうとして FreeBSD のUSB回りの設定を
しらべたのでメモっとく。

7.0 から usbd が無くなって devd に変わったみたい。
devd は usb だけじゃなくデバイス全般を扱う。

まず繋がっているUSBデバイスの一覧は usbconfig で表示。
# usbconfig

ugen0.1: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen1.1: at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen2.1: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
ugen3.1: at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen4.1: at usbus4, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen5.1: at usbus5, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen6.1: at usbus6, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
ugen5.2: at usbus5, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen5.3: <4Axes 16Key GamePad HuiJia> at usbus5, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON


各デバイスの詳細は dump_device_desc を指定する。
# usbconfig -d 5.3 dump_device_desc

ugen5.3: <4Axes 16Key GamePad HuiJia> at usbus5, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON

bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0110
bDeviceClass = 0x0000
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0008
idVendor = 0x0d9d
idProduct = 0x3011
bcdDevice = 0x4b24
iManufacturer = 0x0001
iProduct = 0x0002 <4Axes 16Key GamePad>
iSerialNumber = 0x0000
bNumConfigurations = 0x0001


USBデバイスの接続/離脱のイベントは devd.conf に記述する。
devd.conf は直接触らず /etc/devd/ の下に *.conf として作る。

/etc/devd/my.conf:
# PS Joystick converter SANWA JY-PSUAD1

attach 100 {
match "vendor" "0x0d9d";
match "product" "0x3011";
action "/hogehoge/start $device-name &";
};
detach 100 {
match "vendor" "0x0d9d";
match "product" "0x3011";
action "/hogehoge/stop $device-name";
};

# USB-Audio
attach 100 {
device-name "pcm0";
action "mixer vol 100:100; mixer pcm 100:100;";
};


attach/detach の意味はそのまま。
100 は優先度。通常は適当で良い。
vendor/product は usbconfig で得た idVendor/idProduct の値。
$device-name は /dev/xxx の xxx に置き換わる。
重要: action のコマンドはすぐに終了する必要がある。
でないと devd も止まってしまう。

#ちなみに pcm0 で mixer の設定をしているのはデフォルトが
#75:75 で音量が小さいため。75% と言いつつ半分位に聞こえる。

設定後は dved の再起動が必要。
# /etc/rc.d/devd restart


PC-Audio は USB-JoyStick から mplayer を操作しようと目論んで
いるので attach/detach でプレーヤの起動/終了ができる必要が
あって調べてみたがUSB回りはいろいろ興味深い。

関連記事:
静音PC、使用感
静音PC買ってしまいました
PCオーディオ始めますた
共立エレのUSB-AUDIOキット
FreeBSDでPCオーディオ:高音質再生
FreeBSDでPCオーディオ:リッピング



2010/12/05

FreeBSDでPCオーディオ:リッピング

リッピングは最初 Windows Media Player でやろうと思ってた。
リッピング時にWebからCDの情報をアーティストやアルバム名を
自動でファイル名にしてくれるのが便利過ぎだったので。

しかし「ä」のような特殊文字がファイル名に使われてどうにも
FreeBSDにコピーできなかったのでやめる事に。

同じ機能を持つアプリをFreeBSDで探したとろ見付かりました。
grip というアプリです。
ports からインストールします。
# cd /usr/ports/audio/grip

# make install


起動してCDを入れるとこんな画面に。すばらしい!!


CDの情報を集めているオープンなサーバがあるようです。デフォでOKです。


日本語ファイル名を扱う為にはちょっと環境設定が必要なようです。
export G_FILENAME_ENCODING=@locale

or
setenv G_FILENAME_ENCODING @locale

その上で「日本語(EUC-jp)を使用する」を有効にします。
但し、これをすると「ä」が逆に文字化けするので注意が必要です。


出力先ファイル名のデフォルトではトラック番号が付かないので追加しました。
%t がトラック番号です。エンコーダは非可逆圧縮の flac に変えています。デフォは mp3 だったかな。


中間ファイルの wav ファイルは最後に削除されるので RAMディスクにしておきました。


リッピングを実行します。
きれいなCDなら10倍速以上でガシガシ リッピングします。

画面上の顔文字の意味は以下を参照してください。
http://ja.wikipedia.org/wiki/Cdparanoia


ファイルを確認してみます。
エンコーダを非可逆圧縮にしたので1つ30M位のサイズです。
$ ls -Rs ~/music

~/music/上々颱風/愛があるから大丈夫:
29648 01.銀の琴の糸のように.flac
31200 02.上海我愛イ尓.flac
32720 03.愛があるから大丈夫.flac
34832 04.黄昏酒場でまた会おね.flac
37136 05.アビシニアを遠く離れて.flac
37648 06.ハロハロヨコスカ.flac
36928 07.Sara.flac
41040 08.なんじゃもんじゃの木の下で.flac
35760 09.いつでも誰かが.flac
27488 10.メトロに乗って浅草へ.flac


聞いてみました。
$ mplayer `find ~/music -name '*.flac'`


ちゃんと鳴ってます。

関連記事:
静音PC、使用感
静音PC買ってしまいました
PCオーディオ始めますた
共立エレのUSB-AUDIOキット
FreeBSDでPCオーディオ:高音質再生
FreeBSDでPCオーディオ:リッピング



2010/10/24

FreeBSDとWindowsのマルチブート

以前からFreeBSDとWin系のマルチブートで使っていたんだけど
最近うまくマルチブート環境が構築できなくて困っていた。

FreeBSDのブートローダをインストールするとWinXPが壊れて
しまい起動しなくなるのだ。
WinXPはリカバリをしてもMBRを戻しても起動しなくなる。

仕方無くWinXPからFreeBSDを起動していた。
c:\boot.ini

[boot loader]
timeout=30
default=c:\boot1
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP"
C:\boot1="FreeBSD"

- c:\boot1 は /boot/boot1 をコピー

ここに FreeBSD/8.1 を追加して WinXP/FB7.1/FB8.1 のマルチ
ブートにしようとしたが boot.ini ではどうもうまく行かない。

結局いろいろ試してなんとか解決法を見付けた。

1. FreeBSDをインストールする時にブートローダをインストールしない。
2. FreeBSDを起動して boot0cfg で MBR のみ書き込む。
# boot0cfg -Bv -o packet -f backup.mbr ad0


これでFreeBSDのブートローダが普通に使えるようになった。
単にFreeBSDのインストーラにバグがあってWinXPを壊している
だけかも。


ただ、Vista以降はMBRにIDを書き込んでチェックしているらし
いのでもっとややこしくなりそう。 M$のいやがせか。

一応調べたらVistaのMBRチェックは無効にできるらしい。
http://uyota.asablo.jp/blog/2007/08/18/1733839から
 bcdedit /set {bootmgr} device boot

bcdedit /set {default} device boot
bcdedit /set {default} osdevice boot

まだ、移行する気無いけどメモっとく。
つーか、ゲームとデバイスの動作確認にしか使わないんだよね Windows。。



2010/10/17

ビデオカードが壊れた(;_;)

前から調子が悪くてDVIが出力できなくなってたビデオカード
が完全に壊れてアナログも出なくなってしまった。
一応、GIGA BYTEのパッケージ版なんだけど2年位で壊れた。
GIGA BYTEのマザーのほうも調子悪いし次からGIGA BYTEは
止めよっと。

翌日、秋葉へ買いだしに。

今まで使ってたのが GeForce/7300。ファンレスな以外は
特に取り柄は無いがゲームしなけりゃ十分な性能。

FreeBSD+X.orgはビデオカード変えるとトラブり易いので
同じGeForceの系統が良かったんだけどなんか廉価版
のが見付からない。

結局、一抹の不安を抱えつつ最安&ファンレスの
RADEON HD 4350 を購入する事に。

クレバリーで 3180円也

とりあえず、差し替えて起動してみる。
BIOS は上がって来た、一安心。

そのまま FreeBSD を起動してみるが予想通り X は起動
しないのでお約束の呪文を唱える。
# X -configure

# mv /root/xorg.conf.new /etc/X11/xorg.conf

xdm を起動してみる。
うっ、起動したが画面が壊れてる。

仕方無いのでドライバ VESA に切替えてみる。
Section "Device"

:
Driver "vesa"
#Driver "radeon"
:
EndSection


今度は起動したが動画再生がおかしい。
早送りになって全画面表示もできない。
どうも XVideo のアクセラレーションが無効になってしまうせい
らしい。 やっぱ radeon ドライバが必要に。

散々オプションをいじった挙げ句、メモリを半分に設定すると
動作する事が分かった。
Section "Device"

:
Driver "radeon"
VideoRam 131072
:
EndSection

どうもDTIのメモリマップ衝突してんじゃないかと思う。
結構古いチップなのにドライバにバグがあるのね。

これで、、と思ったらビデオの早送り状態が改善されない。
音声関係がおかしくなってるらしい。
結局サウンドドライバを再読み込みすると直った。
# kldunload snd_hda.ko

# kldload snd_hda.ko

X の起動後にサウンドドライバを読み込まないとおかしく
なるみたい。わけわかめ。

そんなこんなでやっと完全復活。
丸一日潰れてしまいました。(;_;)



2010/08/22

FreeBSDでchromeを動かしてみた。

google のブラウザの chrome を FreeBSD で動かしたかったんでちょっと調べてみた。

この辺にバイナリが公開されてるって記事が有ったので試してみた。
http://gihyo.jp/admin/clip/01/fdt/200911/27

この記事には FreeBSD/7.2 でビルドされたって書いてあるので 7.2 で試してみる。
#が実は7-stableでえらい苦労した。

ダウンロードは http://chromium.hybridsource.org/ の i386 から
この時点では chromium-5.0.375.125_1.tbz を利用。

pkg_add でインストール

# pkg_add chromium-5.0.375.125_1.tbz
pkg_add: could not find package python26-2.6.5_1 !
pkg_add: could not find package perl-5.10.1_2 !
pkg_add: could not find package eggdbus-0.6_1 !
pkg_add: could not find package polkit-0.96_2 !
pkg_add: could not find package alsa-lib-1.0.23 !
pkg_add: could not find package alsa-plugins-1.0.23_1 !


依存関係で幾つかエラーになるので必要な物を packageかportsでインストール。

実行

# chrome
/libexec/ld-elf.so.1: Shared object "libnssutil3.so.1" not found, required by "chrome"
/libexec/ld-elf.so.1: Shared object "libjpeg.so.11" not found, required by "chrome"
/libexec/ld-elf.so.1: /usr/local/lib/libxml2.so.5: version LIBXML2_2.6.15 required by chrome not defined

なんか依存関係に無いのにエラーになるのが結構有る.. orz
追加でインストール又はアップグレードが必要。

再実行

# chrome
/libexec/ld-elf.so.1: chrome: Undefined symbol "shmctl"

何やら見慣れないエラーが...

ググッてみたら FreeBSD-7 以降からライブラリのバージョン管理のせいらしい。

# objdump -T /lib/libc.so.7 | grep shmctl
00045f64 w DF .text 00000000 FBSDprivate_1.0 _shmctl
00045f64 w DF .text 00000000 FBSD_1.0 shmctl
00045f64 g DF .text 0000000a FBSDprivate_1.0 __sys_shmctl

# objdump -T /usr/local/bin/chrome | grep shmctl
00000000 DF *UND* 00000000 FBSD_1.1 shmctl

OS の libc は 1.0 だが chrome が使っているのは 1.1 と言うことらしい。

じゃあ力ずくで、と言うわけで libc.so をバージョンだけ替えてソースからコンパイルしてみた。

# objdump -T /lib/libc.so.7 | grep shmctl
00045f64 w DF .text 00000000 FBSD_1.1 shmctl

#chrome
/libexec/ld-elf.so.1: /usr/local/lib/libgdk-x11-2.0.so.0: Undefined symbol "shmget"

# objdump -T /usr/local/lib/libgdk-x11-2.0.so.0 | grep shmctl
00000000 DF *UND* 00000000 FBSD_1.0 shmctl

撃沈。
1.0 と 1.1 はアッパーコンパチと言うわけでは無いのか...
これってバイナリ互換性全然無くなるんじゃ無いの? > commiter の人達

どうも、7-stable と 7.2 はだいぶ環境が違うらしい。

7.2 はすぱっと諦め 8.1 で試してみる事にした。
パッケージが2つ足りなかったがあっさりインストール起動まで行った。



日本語が文字化けしてるが設定で行けると思う。

ちょっと時期尚早だったかな。素直に ports が出るまで待った方が良さげ。

追記: フォントをちゃんと設定したらきれいに動いた。結構安定している。



追記2: ports の www/chromium でも動きました。


2010/01/31

FreeBSDで携帯Javaアプリ開発


2010/01/22

自宅サーバ用 UPSタップ

アマゾンに頼んだ UPSタップが届いた。
思ったよりでかい。


マニュアルによると 100W 使用で 5.8 分持つとの事。
但し、連動してPCをシャットダウンさせる機能は無いので寸断対策にしかならない。
値段が 3880円とUPSとしては格安なのでしかたが無いだろう。

自宅サーバを運用している人で電源に不安の有る人にはお勧め。


公開中の自宅サーバ:http://wsjs.dip.jp:8008/




プロフィール
20年勤めた会社がリーマンショックで消滅、紆余曲折を経て現在はフリーランスのSE。 失業をきっかけにこのブログを始める。

サイト内検索

登録
RSS/2.0

カテゴリ

最近の投稿【FreeBSD】

リンク

アーカイブ