ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

【NT-2】やさしい Android: ユーザフレンドリかつデベロッパーフレンドリーな Android アプリケーション開発手法

宮川 大輔

  • Android開発者。日本語化一般(連絡帳など)
    • あかさたなのカーソル(Indexer)
    • 番号表示のローカライゼーション
    • vCard/絵文字サポート

デベロッパー向け発表

今回の講演での優しいとはFriendly。(決してEasyではない)
誰にとってやさしいのか?
→ユーザ&開発者

ユーザにとってやさしいとは?

クラッシュ・フリーズはNG。思った通りの動作

開発者にとってやさしいとは?

  • 余分な手間をかけずに世界中のAndroidで動作
  • バグを抑制・検出できるメカニズム
  • アプリケーション開発を楽しくする

具体的には?

互換性

多くのハードウェアでアプリケーションを動くように

アンドロイドはオープンソース
Androidに手を加える例としてはレイヤー別に、

  • Appレイヤ:必要な機能を絞り込む
  • Frameworkレイヤ:サイズを小さくする、カーネルのコンパクト化など。

変化するプラットフォーム

全デバイスでの検証は難しい。日本では販売されていない未知のデバイスなども。
より多くのユーザに使ってもらうために開発の軸が必要=「互換性」

AndroidMarketを基準とする(アイディア)

AndroidMarketの互換性さえ意識すればよい、互換性のないデバイスのサポートは難しい。

公開APIを使う

公開SDKで規定されたAPIを使う(SDKにないAPIの使用は非推奨)
JavaとしてPublicなAPIは、非公開APIです。なるべく使わないで。
そもそもデバイス上に存在しないかも。将来、サポート対象から外れてしまう可能性

API Versionの管理

MinSDKVersion 3(1.5),TargetSDKVersion 4(1.6)が良いのでは?

複数解像度対応

各解像度ごとにディレクトリを作ってデータを管理 Drawableほにゃらら。
どの解像度をサポートしているかを指定

XMLでのレイアウト

レイアウトをXMLで記述するとAndroid側が自動的にサイズを決定してくれる
手でPixel指定するのはやめる。(レイアウトが崩れる)

RelativeLayout

ビュー間の位置関係でレイアウトを指定できる

国際化対応

インターナショナライゼーション。右から左へ書く言語圏、10 out of 1000
テンプレートに %s out of %s とすると 10件中1000件 あれ?
単純な置換ではないため、非常に難しい。

本来の目標

  • 世界の多くのユーザーに快適に使ってもらえること
  • Androidの市場で英語圏は無視できない。

>
単一言語対応 << 越えられない壁 << 第2言語<
文字列をJavaに埋め込むのはやめましょう
values/strings/xml + values-ja/strings.xml
文字列が読めることが実際に使ってもらえる第一歩

日本人にフレンドリー

unicode:emojiに画像を被せてみる
spannable/span:文字に何かを被せる処理
ImageSpan(文字列を画像に)、文字を画像に変換することが可能。

バグをすばやく見つけるには。

「バグのように見えたらそれはバグです」

UnitTestの作り方、使い方
Log.dでロギング

adb logcat
adb bugreportが便利。
実行するとファイルが出来上がるので、メールで添付して送信

バグ「に見える」挙動を減らす

  • 「バグのように見えるならそれはバグです」(繰り返し)

不親切なUIを改善する
例:画面が真っ黒→「フリーズしているの?」

ユーザーがあれ?と思うところなら、その動作が悪いとは言えないが、改善する余地はある。
例:画面が真っ黒の場合は、次にしてほしいことを表示、や新規文章の作成をするなど。

ユーザーからフィードバックを得る
操作方法に気づくまで、時間がかかるようならUIが不親切

今日のテーマ

  • 多くのユーザのための互換性
  • 国際化対応の第一歩
  • バグへの対処(ユニットテスト、LOGの利用)
  • UIの改善

やさしいAndroid

フレンドリとはEasyではない。しかし、求めるに値するもの。