2011-06-10 [長年日記]
Android Layout Cookbookを読んだよ
最近はXOOMでアンドロイドアプリを作ったりしているわけですが、コードはともかくとして(とは言ってもJavaは初めてなのでリファレンスと首っ引きですが)、とにかくレイアウト、デザイン周りがよくわからない。背景に透過色を設定したいだとか、画面構成をこうしたいんだけどなんだかうまくいかないなーとか、多分基本的なところで躓くことが多かったので、この本を選択した。
んで、教科書的に前から読んでいく分には解説も丁寧で読みやすいと思う。逆に言うと技術書的には少し冗長で情報が散漫としている印象を受けた。最初は頭から読んでいたのだけど、途中からはパラパラよみして、もともと持っていた疑問もある程度解消し、XMLによる画像リソースの定義(ができることも知らなかった)なんかもできるようになったけど、今後リファレンスとして使用するかというとそういうつくりの本ではない。情報に対するフックをもう少し上手に設定してもらえればなあと思った。
2011-06-21 [長年日記]
XOOMのアップデート
Android3.1にアップデートした。ということで今回のアップデートで変わったところの暫定のまとめ。
MicroSDが使えるようになった
MicroSDを挿すとふつうに認識する。マウントポイントは、/mnt/sdcard-ext で、この変更にともない追加された「ファイル」アプリでアクセスすることが可能。他のアプリからこの領域にどうアクセスする(orできる)のかはこれから調査。MicroSDカード買わなきゃ。
WiFiで5GHz帯が使用できるようになった
[設定]-[無線とネットワーク]-[Wi-Fi設定]を開き、右上のメニューから詳細設定を選択し、Wi-Fi周波数帯域から「自動」もしくは「5GHzのみ」を選択することにより5GHz帯での接続が可能になる。11a対応のルータ等とつなぐ場合、干渉を抑えられる可能性がある。ただし、5GHz帯の11nで接続しても最大で65Mbpsでのリンクしか確認できていないので、速度的には2.4GHz帯での11nと変わらないと思う。
USBホストに正式対応した(けどハードウェア的には非対応)
だけど実質動作する。XOOMのUSBポートは内部回路的には(多分)OTGになっていて3.0のときもMicroUSBのAを無理やり挿すとUSBキーボードを認識して文字入力はできていた。今回OSレベルでUSBホストの正式対応が入ったため、かなり広範囲のデバイスを認識するようになった。
- マウス、キーボード
- 普通に認識して、文字入力やマウスカーソルによるオペレーションが可能になる。
- PS3コントローラ
- 認識はしているようだけど、方向キー(+左スティック)だけしか動作確認できなかった。
- iPhone3GS
- 接続するとギャラリーアプリが起動してiPhoneで撮影した静止画の表示や取り込みができる。これはPTPというUSB上のプロトコルによるもので、対応しているものならデジカメでも同様のことが可能なはず。その名のとおり静止画のみなので動画は取り込むことができない。
USBデバッグ時のアイコン
ハニーなドロイドくんになった。
2011-06-22 [長年日記]
Wi-Fi経由でAndroidのデバッグをしよう
Android3.1でUSBデバイスの対応が入り、もちろんユーザサイドでもUSBデバイスを使用するアプリの開発ができるようになったのだけど、端末にUSBデバイスを接続するとUSB経由でのデバッグができなくなってしまう。この時に使用するのがWiFi経由でのデバッグ。
やり方はUSB Host and Accessory | Android Developersを参照のこと、で終了でもいいんだけど一応書いておく。前提条件として、
- USBでデバッグできる環境になっていること
- PCと端末が同じネットワークセグメントに存在すること
で、
- 端末をPCのUSBポートに接続
- コマンドプロンプトでAndroidSDKのplatform-tools/にパスが通っている状態で、adb tcpip 5555 を実行。
- さらにadb connect (端末のIPアドレス):5555 を実行。
この状態で、Eclipse ADTからDebug,Runを実行するとUSB接続した場合と同様にデバッグ対象のデバイスとして先ほど登録した端末がネットワーク越しに見えているはず。プログラムのダウンロードやDDMSによる端末のモニタリングも可能*1なので、USB接続と全く同じそれなりの環境でデバッグできる。最初にコマンドを入力する必要はあるけど、ケーブルレスになって取り回しがよくなるため、USBデバイスを使用しないアプリでも画面の回転や、重力センサの動作を検証する場面では便利なはず。
(追記)adb connect を実行すると端末のモードが変わってしまいUSBデバッグで接続できなくなるため、PCの電源を落とす前にadb usbを実行する必要がある。実行せずにPCの電源を落とした場合は端末の再起動でOK。
*1 LogCatだけだった
2011-06-28 [長年日記]
フォトマップをリリースしました
アンドロイドで位置情報がついた写真を地図上に表示するアプリ、フォトマップをリリースしました。アイコンがしょっぱいのは仕様です。無料でダウンロードできるので、Android端末(2.1以上)の人はぜひダウンロードしてみてください。
ソースコードもそのうちGitHubあたりで公開します。
(追記)Android3.0未満の端末だと落ちるみたいなので公開停止中。端末持ってないとだめだなー。 (さらに追記)再公開しました。
2011-06-29 [長年日記]
Androidアプリを3.0に対応させる方法
Android端末のバージョン毎のシェアをみるかぎり、現状ではAndroid3.0以降に対応する動機は薄いと言わざるを得ないけど*1、将来的なものを見据えて対応する場合にどうすればいいのかという話。あるいはフォトマップをリリースしてみての反省会。
最低限何をすればいいか
基本的には何もしなくてもOK。動作はする。ただし、1.x系との共存は難しそう*2。2.x系であればまっとうな作りをしているアプリならそれなりの見た目になる。具体的にどのアプリとは言わないけれど画面サイズをスマートフォンの範囲で決め打ちして作っていると、画像が横にだけ引き伸ばされて悲惨なことになったりする。2.xでも7inchタブレットサイズの端末というのもあるわけだし、HTMLでいうところのリキッドレイアウト的な考え方で作ったほうがいいだろう。
既存のアプリを3.x対応にする
2.x,3.xでそれぞれそれなりの見た目で表示させるには少し手を入れる必要がある。アプリが2.xで問題なく動作している前提で、
- プロジェクトのTargetのAPIを11以上にする。いまなら12にすればOK。
- ManifestでminSdkVersionとtargetSdkVersionを設定する。
- Android2.1からの対応ならminSdkVersionは7で、targetSdkVersionは先ほど選んだプロジェクトのTargetAPIと同じにする。
- テーマとして、@android:styles/Holo.*を指定する。
これで、3.xでは「Holographic」な表示になり、2.xでは対応する従来のテーマが適用される。ただし、テーマの対応が一対一ではないのと、オブジェクト全てに想定通りの設定がなされるかというとそうでもないため、res/values以下に従来のテーマを指定したスタイルを配置、res/values-v11以下に3.xのテーマを指定したスタイルを配置してそれぞれカスタマイズするという方が汎用性もあっていい。
新規あるいは機能追加で2.x,3.x両対応にする
先程の項目は全てやっている前提で、例えばメニュー*3の特定のアイコンは常に表示させたいだとか、ある場面ではActionBarを消したいだとか3.x固有の動作をさせたくなってくると思うのだけど、その時には、try{}catch{}節で
try{ 3.x系の操作 } catch(NoSuchMethodError e){ 2.x系の同等の操作 or なにもしない }
といった感じでエラーをハンドリングする必要がある。
また、同じAPIでも挙動が異なる場合があるため最終的にはエミュレータ、実機で動作を確認したほうがいい。 さらに3.xでは複数のインテントを位置画面上に表示するfragmentなる機能があるらしいのだけど、それはまたそのうち。