Mono Works

チラシのすきま

Android開発者トレーニング(Lesson2)様々なデバイスのサポート

Lesson2:Supporting Different Devices

Android端末は、いろんな形状やサイズのものが世界中で販売されてます。そのため、Android用に開発したアプリを世界中に広めたいなら、様々なデバイス構成をサポートする必要があります。その中でも、多言語のサポート、様々な画面構成のサポート、異なるAndroid OSのバージョンサポートの3つは、とくに重要です。

androiddevmemo20151020_00

今回のレッスンでは、多様なデバイス構成に対する3つのサポートをアプリケーションの単体パッケージで実現する方法について解説します。

Device compatibility overview  |  Android Developers

多言語のサポート

異なる言語のサポート  |  Android Developers

これについては、下記メモを参照ください。

メモ:文字列の定義とアプリの国際化(テキストローカライズ)対応 - Mono Works

様々な画面構成のサポート

複数画面をサポートする  |  Android Developers

Android端末の画面構成は、画面サイズと密度という2つの要素で分類されます。この2つの要素に対応して、アプリの画面レイアウトを最適化させるには、選択可能なリソースを用意する必要があります。

画面サイズに合わせたレイアウトファイルの用意

これは、多言語サポートと同じように画面サイズごとにリソースフォルダを分けて、レイアウト用のXMLファイルを準備します。画面サイズは、small、normal、large、xlargeの4段階で、それぞれ下記のようなフォルダ構成でレイアウトファイルを用意します。

res/
  layout-small/
    main.xml
  layout/
    main.xml
  layout-large/
    main.xml
  layout-xlarge/
    main.xml

画面解像度に合わせた画像ファイルの用意

こちらは、下記メモを参照ください。

メモ:プロジェクトに画像を登録 - Mono Works

Android端末の画面構成は非常に多様で、そのサポートは一筋縄ではありません。ここでは、その一端を示しましたが、下記レッスンで別途解説しますので、また今度。

複数画面をサポートする  |  Android Developers

異なるAndroid OSのバージョンサポート

プラットフォームのバージョンとAPIのレベル

他のOS同様、Androidのプラットフォームもバージョンアップが繰り返されていて、それぞれのバージョンごとに(Build.VERSION_CODESクラスの定数として)固有のバージョンコードが割り振られています。

Build.VERSION_CODES  |  Android Developers

また、Androidプラットフォームが提供する framework APIは、プラットフォームのバージョンが上がるのに合わせて改訂(新機能の追加等)がおこなわれており、プラットフォームのバージョンとAPIレベルには相関があります。APIレベルとバージョンコードの関係は、下記ページにまとめられています。

<uses-sdk>  |  Android Developers

どこまで古いバージョンをサポートするか問題

Android開発者サイトでは、どのバージョンの端末がどれくらいの割合で稼働しているかという情報が公開されていて、定期的に更新されています。下記メモにバージョンのサポート範囲についてまとめているので、サポート範囲決定の参考にしてください。

メモ:Androidのバージョンや画面サイズの違いにどこまで対応するか - Mono Works

サポートするバージョンの範囲が決まったら、次は、どうやって、その範囲をカバーするのかというお話です。

バージョン(APIレベル)の指定

具体的には、開発しているアプリのテスト対象(ターゲット)となるバージョンと、サポート対象とする最も古いバージョンの 2つをAPIレベルで記述します。トレーニングページには、AndroidManifest.xmlファイルの <uses-sdk>要素内に記述するよう解説されてますが、Android Studioのテンプレートからプロジェクトを作成した場合、これらは build.gradleに記述されており、AndroidManifest.xmlファイルに記述しなくてもOKです。build.gradleとAPIレベルに関する説明は、下記トレーニングを参照ください。

Android開発者トレーニング(Lesson1)プロジェクトの作成など - Mono Works

システムバージョンの確認と活用方法

プラットフォームのバージョンは、下記の記述で取得できます。これで APIレベルを int型で取得できます。

Build.VERSION.SDK_INT

この取得値は、こんな風に活用できます。

if (Build.VERSION.SDK_INT >= 16) {
  // ここにAPIレベル16以降の端末で実行する処理を記述
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
  // ここにAPIレベル16以降の端末で実行する処理を記述
}

表現は違いますが、いずれも APIレベルが16(Android 4.1 JELLY_BEAN)以降の端末でのみ、実行させたい処理を記述する手段です。

なお、Androidでは、Android Support Libraryというツールが提供されています。このツールをアプリに組み込むことで、古いバージョンのプラットフォームでも、より新しいバージョンのAPIを利用可能にすることができます。詳しくは、こちら。

Support Library  |  Android Developers

また、Androidアプリでは、XML属性として記述された内容については、実行時のシステムでサポートされていない記述は無視されます。なので、古いシステムのことを気にせず、どんどん新しいバージョンでサポートされているXML属性を使っていきましょう。と書かれています。

スタイルとテーマを使う

Androidでは、デフォルトでいくつかのスタイルやテーマが提供されています。これらシステムに組み込まれたスタイルやテーマを使っておくと、新しいバージョンで提供されるスタイルやテーマが自動的に適用されます。これらスタイルやテーマは、manifestファイルに記述します。

アプリ全体(すべてのactivity)にandroidの提供するテーマを適用する場合、こんな記述になります。例では、Theme.Translucent(透明な背景)を適用。

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.co.monoworks.myfirstapp" >

    <application
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent" ></br>  <activity
        ...<中略>
        </activity>

    </application>

</manifest>

特定のactivity(例では、MyActivity)に「/res/values/styles.xml」で定義したオリジナルのテーマを適用する場合、このように記述します。

<activity
    android:name=".MyActivity"
    android:theme="@style/CustomTheme">
</activity>

というわけで、今回のレッスンでは、ざっくりと様々なAndroid端末に対応する方法についてトレーニングしました。

【参考サイト】

Supporting Different Devices | Android Developers

Supporting Different Languages | Android Developers

Supporting Different Screens | Android Developers

Supporting Different Platform Versions | Android Developers

コメント

コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)
執筆者
"ぽぽろんち" @pporoch
pporoch120
Mono Worksの中の人。好きなことをつらつらと書き留めてます。
ギターを始めてから 練習動画をYouTubeにアップしてます。ご笑納ください。
"DQX@ぬここ(UD487-754)、コツメ(NO078-818)"
採用案内