2012年9月26日水曜日

「Android アプリ機種対応ことはじめ」をまとめました

EGGの曽川です。

Android アプリ UI/UX デザイン ことはじめをみたのでまとめてみました。
動画はこちらです。
公式のまとめはこちらです。

全端末に対応しなけりゃいけないのではないか?疑問に答える。

●Android OSの最近の動き

4.0系の上昇が非常に著しい
09/04時点で4.0以上が22.1%

●画面化像度対応

どう解決するか?
Javaに関しては豊富なAPIが提供されている。
values-swXXdp(Smallest Width):画面の狭いほうの長さがxxdpであれば使用する。
トレーニングやAndroid デザインを活用する
GoogleIO 2012のリソースを参考にする
タブレット端末とハンドセットの端末を考慮する
dimenリソース(values>dimens.xml)を使用する
 ⇒レイアウトが同じでもスペースの大きさを変えられる(あまり知られていない)

●その他の話題

JavaのAPIは上方互換
 ⇒2.2等で動くなら4.0等でも動く
Android compatibility Definition Document
 ⇒全OSバージョン用に端末メーカへの最低要件定義を行っている
  迷った時はここを見る
OutOfMemory
 ⇒一部の端末ではRAMが小さい
  トレーニングを参考に
OSにより違う処理をする
 ⇒lazy class loading(リフレクションよりも高速)
  参考

●NDK
MIPSは安価で高速な処理を今後できるのではないか
Androidはarmだけではなくなっている
OpenSLも便利
 ⇒音声再生ライブラリ

CPUアーキテクチャ別のマルチプルapk
 ⇒これまではOSバージョンだけでしか分けられなかった

●OpenGL ES
90.7%がOpenGL ES 2.0
 ⇒2.0前提でOK
GPUファミリーが多い
 ⇒powerVRをターゲットにしている人が多いがAndroidでは特殊(iPhone)
  powerVRはレンダリングシェーダの属性をまとめてソートするのが早い
  GPU別にチューニングする
4つのファミリーでテストする。

●WebView
機種ごとのふるまいが違う(日本人からの質問が多い)
WebViewを透明にして後ろのActivityを見せるとかしているのはある端末ではトラブルが起こるなど。
 ⇒Google自身も全機種について把握していない
  ActivityとWebViewを重ねるのは気をつけてほしい
canvasとcssアニメーションはどっちが早い?
 ⇒cssアニメーション
  4.0ではcanvas中心になってきている。
  4.0でcssアニメーションを使い続けるとメモリリークしているかも?(Google調査中)
  ※ちなみに酷使しているのは日本だけ

ChromeとWebViewがマージされつつある。(完全マージはいつかは未定)
 ⇒今後は標準ブラウザとWebViewを統一化する

拡大縮小
 ⇒書くのが楽なのはviewport
  ただし、スクロールするときに画像が粗くなる
   ⇒WebViewでのスクロールをなるべく避けるのが良いのでは?
   ⇒もしくはjavascriptでガリガリ書く
WebViewは先読みとキャッシュを使う

●WebView(2)

WebViewのレイアウト計算がずれる場合がある
 ⇒ActivityとWebViewの計算をずらす

●SIMカードがないと起動できないアプリについて
物理的なIDの利用はおススメしない
SIMカードは携帯を対象としているので、Wi-fiのみ端末が軒並みダメになる。
個人情報漏えいの懸念
 ⇒root化した端末で偽装できる
  その人のアカウントで利用できてしまう
  原則はスマートフォンで自動ログインはしない
複数台以上の端末に入れてほしくない制御を入れたい場合には? 
 ⇒Build.SERIAL
  ANDROID_ID(端末初期化でリセット可能)
  ※2.3以降のみ
  ※やむを得ない場合に使用する
   Googleは禁止してはいないが十分注意する。ユーザはパーミッションを意識している。
  ※個人的にはこちらも参考にして欲しい
パーミッションについてはアプリ説明文で説明する

●端末のブラックリスト
サムスンの幾つかの機種が出て来ない場合もある
 ⇒Google側で対応中。
テストしてない機種という理由でブラックリスト化するのはオススメしない
 ⇒すぐ反映されないリスト
  入っていないリストはアクセスできる
 ⇒発売直後はアクセスできる
  ユーザの評価が固まってきたり、安定してきたらブラックリストは使わない。
Manifestで縛る方が安全

●Q&A
Q.不具合のポイントは?
A.OpenGL、カメラ
 Activity、Viewを普通に使っていたら機種ごとの差分は出ない
Q.テストのTips
A.10数機種テストする100機種以上テストしているところもある
 配信したい国の人気の端末でテストする
 RAM容量が小さい端末でもテストする
Q.タブレットのような画面を画面の小さな端末で代用する方法があると聞いたが?
A.Screen Compatibility Mode
 targetSDK8にしてると拡大される
Q.内蔵メモリなのに外部SDカードとして使わなければいけない場合はどうすればいいか
A.セカンダリエクスターナルストレージ問題
 標準のAPIではアクセス出来ない領域にストレージが存在している。
 機種別のプログラミングしかない
 Googleと端末メーカの問題

●補足
今後タブレット端末は増えるので対応してほしい

0 件のコメント:

コメントを投稿