Androidの実機試験をするときの端末の選び方

Androidアプリの実機試験を行う際に気をつけている事に関するメモです。
試験端末の選び方を示した「試験端末の選び方編」と、実際のテスト方法に関する「実機試験編」に分けて記述します。

この記事は「試験端末の選び方編」となります。

# 基本的な考え方

Androidは無数に端末が存在しており、解像度、OS、各種センサーの有無など組み合わせが膨大です。
これらを全てを検証してサポートするのは、時間的にもコスト的にもまず不可能と考えます。

基本的には限られた期間・コストの中でも、効率よく不具合を確認できるように端末を選定していきます。

# 試験端末を購入するかどうか

基本的には、メジャーな端末やOSバージョンはなるべく保有しておくほうが良いと思います。
AndroidSDKに付属するエミュレータやGenymotionなどの高速なエミュレータなどでていますが、細かな操作感や不具合を確認するには、実機があったほうが良いと思います。

クライアントから端末を借用できるのであれば、購入する必要が無い場合もありますので、契約時に確認してみると良いかもしれません。

また、一時的な不具合対応の場合は端末をレンタルしてくれるサービスを利用するのも手だと思います。
ただし、この場合レンタルする期間が長かったりやレンタルする端末古い場合、レンタルするよりも白ロムで購入したほうが安くなる場合もありますので、借りる際には調べてからのほうが良いでしょう。

# 試験する端末の選定について

試験する端末をどうするかについてですが、主に次のような観点で選んでいます。

## OSバージョンで選ぶ

インストール可能な最低バージョン(minSdkVersion)から、最新OSバージョンまでAPIレベル単位で網羅したいです。
流石に2.3.3と2.3.5など同じAPIレベル内のマイナーバージョンを全て揃えるのは厳しいため、目をつぶります。

予算の都合上難しいのであれば、ユーザーが多いOS4.2、OS4.4、OS5.0くらいを重点的にテストすると良いのではないかと思います。
ただ、プログラム内でAPIレベルによる場合分けをしている場合は、そのOSでの動作を確認するべきでしょう。

最新バージョンのOSですが、OSがでてからしばらくは対応機種がGoogleのNexusシリーズのみという場合が多いので、条件によっては、それより手前のバージョンまでの検証とすることがあります。

また、Android4.3で日本国内で発売された端末は他のバージョンと比べてかなり少ないかつ、OSアップデートが提供されているケースが多いため、ピンポイントで検証用の端末の入手がやや難しく注意が必要です。
以下に国内キャリアから発売されている主なOS4.3の端末を上げますが、ほぼSAMSUNGのGALAXYシリーズです。

* GALAXY Note3(au版/docomo版有) 
※4.3→4.4→5.0とアップグレードされてます

* GALAXY S4
※4.2→44.3→44.4→45.0とアップグレードされてます

* GALAXY S IIIα
※4.1.1→4.3　とアップグレードされています

## 解像度で選ぶ

基本的にメジャーな解像度は網羅しますが、ベースとなる解像度を決めておくとデザイン作成時にスムーズかもしれません。
レイアウトの確認だけであれば、エミュレータでも良いかもしれません。
たまに特殊解像度の端末が有りますが、試験に加えるかは時と場合によります。

特にカメラを使う場合プレビューサイズが解像度におおよそ比例しており、指定範囲などをcropする際は端末の解像度から計算する必要があるので多くの端末で見ることになります。

スマートフォンの主な解像度一覧は次のとおりです
* 2560×1440
* 1920×1080
* 960×540
* 854×480
* 800×480

最近は1920×1080が多く、時々ミドルレンジ向けで1280×720、一部メーカー(SAMSUNG、LGあたり)のハイスペックモデルで2560×1440が入ってくるという傾向があります。
それ以外の960×540や854*480は大抵が2.3系列で4系のものは無いか少ないため、対応OSバージョンが4以上の場合はあまり意識しなくても良いかなとは思います。

他にも1024×768(Optimus Vu)、480*320(Pocket WiFi S、Optimus chatなど)の解像度がありますが、元々数がかなり少ないため、特殊解像度としてあえてカバーしない場合もあります。

## シェア率から選ぶ

全世界のバージョンシェアですが、http://developer.android.com/intl/ja/about/dashboards/index.html にGoogleが公開しているシェア率の記載があります。
ただし、諸々の国内Android事情により、国内シェアは若干古いOSバージョンが少し多いという感覚で考えます。

だいたい、4.4系を厚めに選んで、4.2系と5.0系を少し、4.0系、4.1系、4.3系、5.1系をちょっと入れるという感じでしょうか。
正直、今から4.0~4.3の端末を沢山買ってもユーザーは減る一方なので、揃えるのはちょこっとでいい気がします。

端末のシェアだと手元に出せる数字はありませんが、上位はSAMSUNG(GALAXYシリーズ)とSONY(Xperiaシリーズ)とSHARP(AQUAS/AQUAS Phoneシリーズ)ばっかりになると思われますが、基本的にこのシェアだけで試験する端末を選ぶということはありません。

### メーカーで選ぶ

シェア率基準で選ぶと国内ではやはりSAMSUNG、SONY、ついでSHARPあたりの端末が多い気がします。
ベースはよく売れてそうな端末でありつつも、適度に富士通、LG、HTC、京セラ、NEC、パナソニックなどのメーカーを加えていきます。

Androidは割と各メーカーによる癖があるため、一部のメーカーのみの端末で試験をしているとそのメーカーでは期待した動きをするが、他のメーカーではうまくいかないということがたまに起こります。
そのため、幅広いメーカーで見ていく必要はあります。

## プロセッサのアーキテクチャで選ぶ

Android端末に搭載されているプロセッサには、主にarm系、x86系、mips系があります。
ほぼarm系で、たまにASUSのタブレットやスマートフォンがAtomを採用していて、x86系と言った感じです。

mipsは俗に言う中華タブレットの古い機種に多く採用されており、3キャリアから発売されている端末でmips系のアーキテクチャが搭載されている端末はおそらく無いのではないかと思います。
(対応しようにもそもそも端末がないので、基本的には考えないことにしています。)

JavaVMの範囲であればこれらのアーキテクチャをそこまで試験時にとして意識する必要は無いのですが、NDKや、soファイルを含むアプリの場合、各アーキテクチャの端末で試験を行うようにします。

## Nexusシリーズで選ぶ

端末のファクトリーイメージイメージを[Google公式で提供している](https://developers.google.com/android/nexus/images)Nexusシリーズはいざというとき役に立ちます。
例えば、Nexus5であれば最新の4.4から、6.0までマイナーバージョン含めてファクトリーイメージが提供されているので、手間はかかりますが、ダウングレードしたり、アップグレードしたりして、OSバージョンをカバーすることが可能です。

#状況により追加する端末

##タブレット

タブレットに対応(最適化)しているアプリであれば試験は当然ですが、要件としてタブレットに関する事項がない場合でも念のため表示がどのようになるかは確認しておきます。

## カメラ無し端末
カメラがない端末が極稀に存在します。
主にソニーの「Walkman」シリーズや「Nexus7(2012年モデル)(インカメラのみの端末)」などがあげられます。

カメラアプリなどカメラがない端末にはインストールさせたくない場合、Android Manifestに「uses-feature」タグを追加するなどしてインストールさせないようにおきます。
※逆にカメラが必須でない場合は(つまり、カメラ以外のコンテンツが有る場合などカメラ機能以外をカメラ非搭載端末でも利用できるようなアプリの場合は)、uses-featureタグでandroid:required="false"にしないと、逆にダウンロードできなくなります。詳しくは　http://developer.android.com/intl/ja/guide/topics/manifest/uses-feature-element.html などのドキュメントを参照してください。

カメラがない端末にインストールできる場合、カメラ機能利用時に適切なメッセージを表示したり、メニューをグレーアウトするのが理想ですが、最低限の対応としてカメラ利用時にクラッシュしないようにはする必要はあります。

また、オートフォーカスを利用する場合は、オートフォーカスのない端末での動作を確認します。
「MEDIAS TAB N-06D」、「GALAXY Tab4」などのタブレットにはオートフォーカスが無いようです。
こちらも「uses-feature」を適切に設定します。

カメラにかぎらず、他のマイクなどのハードウェアに関しても、それが必須の機能なのかを考えて、機能が搭載されていない端末を考慮して開発するとともに、実際の動作がどうなるかを出来る限り確認します。

## ハードウェアキーボード付き端末

最近ではあま見かけなくなりましたが、「REGZA Phone IS12T」や、「AQUAS Phone IS11SH」、「Optimus chat L-04C」等にはスライド式のハードウェアキーボードが搭載されています。
余裕があればキー入力可能なフォームがあるときに動作がどうなるかは確認しておきたいです。

# 優先度が低くなる端末

逆に試験端末として選ばなくて良い優先度の低い端末について説明します。

## 同じような機種

テストする期間や端末数が限られている場合、同じような端末を試験するメリットは薄いと考えます。
例えば、「GALAXY S5」にはドコモ版「SC-04F」とau版「SCL23」がありますが、周波数や細部のデザイン以外は変わらないため、通常のアプリ開発においては両方の端末を別々に試験するメリットは薄いと考えています。

その他にもdocomoから出ている「Xperia A2 SO-04F」、「Xperia Z1f SO-02F」、MVNOから出ている「Xperia J1 Compact」もハードウェア的にかなり近い兄弟端末であるため、どれか1つやれば残りは優先度的には低くなります。

キャリア違いの端末のテストや兄弟機種のテストは意味が無いとか無駄であるとは考えていませんが、そうするのであればもっと別の端末を揃えてテストすべきです。

## マイナーな機種

いくら安いからといって、MVNOが売っているどこのメーカーかわからないようなマイナー機種を揃えてテストすることはあまりメリットがないと思います。

テストしなくて良いというわけではないのですが、先に上げたOSや解像度やプロセッサでマイナーなものは、どうしても都合がつかなければ優先度を低くするという考えもできます。

## その他（12月4日追記）

コメント欄において、st5757 様より、スマタブinfo([http://smatabinfo.jp/](http://smatabinfo.jp/))という、機種情報が検索、比較できる非常に有用なサイトをご紹介いただきましたので、こちらに追記いたします。

こちらのグラフをみると、やはり国内ではOS4.3のシェアが極端に少なく、OS4.2、OS4.4、OS5.0でシェアの７〜８割を占めていることがわかるかと思います。

また、主要なハードウェアの機能のスペック(Bluetoothやカメラの有無など)が検索ができ、端末に対する細かい知識がなくても、該当端末を簡単に探すことができそうです。

こちらも合わせて確認してはどうでしょうか。