T-mobile G2はbusyboxが標準で入っている。

T-mobileG2はルート書き換えがちょっとやっかいそうなのですが、busyboxが標準で入っているため、adbのシェル操作や基本的なコマンドは普通に使えます。

入ってるbusyboxのバージョンとサポートメソッド(コマンド)はこちら。

# busybox
BusyBox v1.15.2 (2009-11-27 10:38:30 GMT) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
or: function [arguments]...

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as!

Currently defined functions:
[, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk,
basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat, catv,
chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt,
cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack,
cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df,
dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du,
dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid,
ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush,
fdformat, fdisk, fgrep, find, findfs, fold, free, freeramdisk, fsck,
fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep,
gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd,
hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd,
init, insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink,
iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd,
last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap,
logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr,
lsmod, lzmacat, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev,
mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat, mknod,
mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt,
mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, openvt,
passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root,
pkill, popmaildir, poweroff, printenv, printf, ps, pscan, pwd,
raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath,
reboot, reformime, renice, reset, resize, rm, rmdir, rmmod, route,
rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script,
scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont,
setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum,
sha512sum, showkey, slattach, sleep, softlimit, sort, split,
start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd,
swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar,
tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top,
touch, tr, traceroute, true, tty, ttysize, tunctl, udhcpc, udhcpd,
udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma,
unlzop, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock,
volname, watch, watchdog, wc, wget, which, who, whoami, xargs, yes,
zcat, zcip


たとえば、シェルをashにするだけでタブ補完や各種ショートカットは普通のbashっぽく使えますし、シェルスクリプトも基本的な処理は走ります。

  • シェルをashにする。

# busybox ash

その他、viでファイル編集したりはもちろん、httpd,ftpも使えるのでサーバーっぽく動作させるのも容易です。
SDカードやデータパーティションスクリプト置いておけば、起動も簡単でいろいろできそうです。

日本語設定とキーボード入力

日本語設定は無いですが、以下のアプリを入れると日本語環境が使えます。

  • MoreLocale2
  • Simeji

キーボード出したときも入力メソッドが生きます。
Shift+スペースで日本語/英語入力を切り替え。
日本語テキストもPC感覚で入力できます。


フォントの入れ替え

上記手順で日本語化しただけでは、フォントが中国っぽくて違和感があります。


(図1)デフォルトのフォント

いろんなサイトで紹介されていますが、
/system/fonts以下、

  • DroidSans.ttf
  • DroidSansJapanese.ttf
  • DroidSansFallback.ttf

というファイルを、好みのTrueTypeフォントに置き換えたらフォントが置き換わります。

T-mobileG2では、後で示す「VISIONary」という一時的なroot取得ツールで一時的にフォント置き換えはできます。

  • SDカードに、好きなTrueTypeフォントのファイルを保存。(例では、DroidSansJapanese.ttfとしています。)
  • 次のコマンドで置き換え。Zygoteを再起動。

$ su
# busybox ash
# mount -o rw,remount /dev/block/mmcblk0p25 /system
# cd /system/fonts/
# cp /mnt/sdcard/fonts/DroidSansJapanese.ttf DroidSans.ttf
# cp /mnt/sdcard/fonts/DroidSansJapanese.ttf .
# ls
DroidSans.ttf
DroidSansJapanese.ttf
DroidSansFallback.ttf
DroidSerif-Bold.ttf
DroidSerif-Regular.ttf
Clockopia.ttf
DroidSansMono.ttf
DroidSans-Bold.ttf
DroidSansArabic.ttf
DroidSansThai.ttf
DroidSerif-Italic.ttf
DroidSerif-BoldItalic.ttf
DroidSansHebrew.ttf

# kill -9 $(pidof zygote)


ただし、フラッシュファイルシステムへのwriteはキャッシュだけされて実際の書き込みが行われないサービスが走っているようで、電源を切ると元のフォントに戻ります。ファイルシステムにwriteされない分メモリ(RAM)が圧迫されますし、これ以上いじるにはリスクがありそうなので、デモ用途ぐらいで考えると良いでしょう。



(図2)日本語フォントに置き換え

T-mobile G2のadb接続(Linux)

T-mobile G2をLinuxに接続すると次のように認識されます。

makoto@makoto-macbook:~/android/T-mobileG2/report$ lsusb
Bus 001 Device 008: ID 0bb4:0c91 High Tech Computer Corp.


udevd設定して再起動。

makoto@makoto-macbook:~/android/T-mobileG2/report$ cat /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"

makoto@makoto-macbook:~/android/T-mobileG2/report$ sudo /usr/sbin/service udev restart
udev start/running, process 3580


あとは、Android-SDKのtoolにPATH通して、adb関連ツールが使えます。

  • adbシェル起動

$ adb shell

  • DDMS

$ ddms &

T-mobileG2のシステム情報

ダンプ情報いろいろ。

ビルド情報

[ro.build.date.utc]: [1288151710]
[ro.build.date]: [三 10月 27 11:55:10 CST 2010]
[ro.build.description]: [1.22.531.8 CL277427 release-keys]
[ro.build.display.id]: [FRF91]
[ro.build.fingerprint]: [tmobile/htc_vision/vision/vision:2.2/FRF91/277427:user/release-keys]
[ro.build.host]: [AA107]
[ro.build.id]: [FRF91]
[ro.build.product]: [vision]
[ro.build.project]: [155651]
[ro.build.tags]: [release-keys]
[ro.build.type]: [user]
[ro.build.user]: []
[ro.build.version.codename]: [REL]
[ro.build.version.incremental]: [277427]
[ro.build.version.release]: [2.2]
[ro.build.version.sdk]: [8]

起動直後のmeminfo

# cat /proc/meminfo
MemTotal: 380192 kB
MemFree: 58928 kB
Buffers: 13280 kB
Cached: 169428 kB
SwapCached: 0 kB
Active: 164576 kB
Inactive: 122268 kB
Active(anon): 104284 kB
Inactive(anon): 2080 kB
Active(file): 60292 kB
Inactive(file): 120188 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 259072 kB
HighFree: 2040 kB
LowTotal: 121120 kB
LowFree: 56888 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 36 kB
Writeback: 0 kB
AnonPages: 104144 kB
Mapped: 68576 kB
Shmem: 2228 kB
Slab: 12288 kB
SReclaimable: 4720 kB
SUnreclaim: 7568 kB
KernelStack: 3016 kB
PageTables: 10104 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 190096 kB
Committed_AS: 3818384 kB
VmallocTotal: 778240 kB
VmallocUsed: 104944 kB
VmallocChunk: 636932 kB

パーティション構成

# mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
/dev/block/mmcblk0p25 /system ext3 ro,relatime,errors=continue,data=ordered 0 0
/dev/block/mmcblk0p26 /data ext3 rw,nosuid,nodev,relatime,errors=continue,data=ordered 0 0
/dev/block/mmcblk0p27 /cache ext3 rw,nosuid,nodev,relatime,errors=continue,data=ordered 0 0
/dev/block/mmcblk0p28 /devlog ext3 rw,nosuid,nodev,relatime,errors=continue,data=ordered 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/vold/179:33 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:33 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/block/dm-0 /mnt/asec/com.rovio.angrybirds-1 vfat ro,dirsync,nosuid,nodev,noexec,relatime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/dm-1 /mnt/asec/se.illusionlabs.labyrinth.lite-1 vfat ro,dirsync,nosuid,nodev,noexec,relatime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
none /system/xbin tmpfs rw,relatime,gid=10075 0 0
# cat /proc/emmc
dev: size erasesize name
mmcblk0p17: 00040000 00000200 "misc"
mmcblk0p21: 0087f400 00000200 "recovery"
mmcblk0p22: 00400000 00000200 "boot"
mmcblk0p25: 19fbfa00 00000200 "system"
mmcblk0p27: 0cccce00 00000200 "cache"
mmcblk0p26: 53200200 00000200 "userdata"
mmcblk0p28: 01400000 00000200 "devlog"

T-mobile G2レポート

Android Hacks ―プロが教えるテクニック & ツールの執筆にまで関わっていながら、特にアプリも作って無かったのと、カーネルやルートFSいじるのに便利ということで、ずっとgoldfish(エミュレータ)で遊んでたのですが、ついに実機を入手しました。

[rakuten:earth-mobile:10000257:detail]

高性能でキーボード付なのが購入の決め手です。
欧州版の「HTC Desire Z」(HTC Vision)と中のソフトやフラッシュの容量が違うものの、同等機種と考えられます。
実機の外観などはこちらのサイトが詳しいです。

2日ほど使ってみましたが、3.7インチ(800×480)液晶はきれいだし、タッチパネルの感度もこれまでさわったAndroid端末の中ではかなり良いように感じます。上記サイトのベンチマーク結果でも分かるように動作は軽快。GUIはなめらかで、ゲームも軽快に動きます。そして、キーボードは横長でキーとキーの間が広く、両手で持って親指でタイプするには十分なサイズ。キー配置もクセがなく、気持ちよくタイピングできます。やっぱり文字入力する場面でフルキーボードがあるのがうれしい。特にメールアドレスやパスワード入力場面では英字フルキーボードは強力です。

以下のエントリで開発環境の準備、システムハックまでいろいろ試した結果をメモ程度に残していきたいと思います。

ubuntu9.10 (MacBook) でのAndroid-SDK-2.1導入メモ

MacBook(MC207J/A)にBootCampでubuntu9.10をインストールしていて、そこにAndroid-SDK-2.1を導入する際に、画面の狭さとかが原因で何ヶ所かひっかかったのでメモしときます。
技術的にたいした話は無く、ほとんどこの環境用のメモ。
#日頃Linuxで開発してるくせに、emacsでとシェルぐらいしか使わないので、EclipseみたいなIDEの設定で戸惑ってる気がする。

前提(説明は省略)

  • MacBook(MC207J/A)にBootCampでubuntu9.10を標準インストール
  • NVIDIAのドライバをインストール
  • Eclipse3.5.1をubuntuソフトウェアセンターからインストール

EclipseAndroid-SDKプラグインを入れるまで(その1)

  • AndroidSDKのページ、Installing the ADT Pluginにしたがって設定する。
    • [Help]->[Install New Software..]->[Add]で以下を追加するなど。

https://dl-ssl.google.com/android/eclipse/

  • このとき、こんなエラーが出たら、eclipse3.5のプラグインの設定を見直してみる。

Cannot complete the install because one or more required items could not be found.
Software being installed: Android Development Tools 0.9.4.v200910220141-17704 (com.android.ide.eclipse.adt.feature.group 0.9.4.v200910220141-17704)
Missing requirement: Android Development Tools 0.9.4.v200910220141-17704 (com.android.ide.eclipse.adt.feature.group 0.9.4.v200910220141-17704) requires 'org.eclipse.wst.xml.core 0.0.0' but it could not be found

EclipseAndroid-SDKプラグインを入れるまで(その2)

上記設定である程度インストールが進むが、こんなエラーが出る場合は、Eclipse関連のパッケージが足りない。

Problem Occurred
An error occurred while installing the items
session context was:(profile=PlatformProfile, phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Install, operand=null --> [R]org.eclipse.ant.ui 3.4.1.v20090901_r351, action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallBundleAction).
The artifact file for osgi.bundle,org.eclipse.ant.ui,3.4.1.v20090901_r351 was not found.

  • 解決法

Androidプロジェクトを作るときのダイヤログが狭すぎるとき

  • Androidのprojectを新規作成するときに、MacBookの解像度だと縦幅が足りなくてターゲットが選べないというしょうもない問題が。


  • ダイヤログフォントを小さくするという手もあるが、他にも不便な場面がでてきそうなので仮想スクリーンを広げるのが手軽そう。
  • "NVIDIA Xserver settings"から、"X Server Display Configuration"を選択し、"Panning"の設定を1280x1024ぐらいにする。(あまり広げると今度は使いにくくなる。)


  • これで、target選択も十分できて、その後の開発もやりやすくなります。