異なるプラットフォーム バージョンのサポート

Android の最新バージョンではアプリ開発の優れた API が提供されていますが、一方で Android のアップデートが浸透するまでは以前のバージョンも引き続きサポートする必要があります。このレッスンでは、最新の API を活用しながら、以前のバージョンのサポートも継続する方法について説明します。

プラットフォーム バージョンのダッシュボードは定期的に更新され、Google Play Store にアクセスする端末数に基づいて、アクティブな端末に搭載されている Android の各バージョンの分布を公開しています。アプリは通常、最新バージョンをサポートしながら、アクティブな端末の 90% をサポートすると良いとされています。

ヒント:複数の Android バージョンに対して最適な機能を提供するには、アプリで Android サポート ライブラリ を使います。そうすれば、新しいプラットフォーム API を以前のバージョンで使用できます。

最小の対象 API レベルを指定する

AndroidManifest.xml ファイルにはアプリの詳細や、サポートする Android のバージョン情報などが記述されています。アプリがサポートする最小の API レベルとアプリの設計やテストの対象である最新の API レベルを具体的に指定するには、<uses-sdk> 要素の minSdkVersion 属性と targetSdkVersion 属性を使用します。

たとえば:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

Android の新しいバージョンのリリースに伴い、スタイルや動作が変更される場合があります。そうした変更をアプリで活用できるようにして、各ユーザー端末のスタイルにアプリを適合させるには、targetSdkVersion 値を利用可能な Android の最新バージョンに合わせて設定します。

実行時にシステム バージョンを確認する

Android では、Build constants クラスで各プラットフォーム バージョンごとに固有のコードが提供されています。より高い API レベルのコードをアプリで使用すると、その API レベルが端末で利用可能な場合にのみコードが実行されるように条件を設定できます。

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

注:XML リソースの解析時、Android では現在の端末でサポートされない XML 属性は無視されます。つまり XML 属性を使う際に、それが新しいバージョンでのみサポートされているとしても、以前のバージョンでそのコードが原因でエラーが発生するおそれはありません。たとえば targetSdkVersion="11" を設定した場合、Android 3.0 以降ではデフォルトでアプリに ActionBar が含まれます。それからアクションバーにメニューを追加するには、メニューリソース XML で android:showAsAction="ifRoom" を設定する必要があります。これはクロス バージョンの XML ファイルで行っても安全です。それは、以前のバージョンの Android では showAsAction 属性が単に無視されるためです(つまり res/menu-v11/ に別バージョンを置く必要はありません)。

プラットフォームのスタイルとテーマを使用する

Android では、基本のオペレーティング システムの外観や使い心地をアプリにも適用するテーマを提供しています。これらのテーマは、マニフェスト ファイル内でアプリに適用できます。このようなビルトインのスタイルやテーマを使うことで、新しくリリースされる Android に合わせてアプリの外観や使い心地を最新のものに更新できます。

アクティビティをダイアログ ボックスのようにするには:

<activity android:theme="@android:style/Theme.Dialog">

アクティビティに透明な背景を付けるには:

<activity android:theme="@android:style/Theme.Translucent">

/res/values/styles.xml で定義される独自のカスタム テーマを適用するには:

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

アプリ全体(すべてのアクティビティ)にテーマを適用するには、次のように android:theme 属性を <application> 要素に追加します。

<application android:theme="@style/CustomTheme">

テーマの作成や使用の詳細については、Styles and Themes をご覧ください。