プラットフォームの各種バージョンのサポート

Android の最新バージョンには、アプリ開発用の優れた API が用意されていますが、ユーザーのデバイスは必ずしもアップデートされているとは限らず、最新の Android が普及するまでは、以前のバージョンも引き続きサポートする必要があります。このレッスンでは、最新の API を活用しつつ、以前のバージョンのサポートも継続する方法について説明します。

Android Studio の新しいプロジェクト ウィザードを使用して、各バージョンの Android を搭載しているアクティブなデバイスの分布を確認します。この分布は、Google Play ストアにアクセスするデバイスの数に基づきます。一般に、アプリのターゲットを最新バージョンに設定しつつ、アクティブなデバイスの約 90% をサポートすることをおすすめします。

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

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

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

次に例を示します。

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

Android の新しいバージョンのリリースに伴い、スタイルや動作が変更される場合があります。そのような変更のメリットを活用しつつ、さまざまなユーザー デバイスのスタイルにフィットするアプリを開発するには、targetSdkVersion 値を、利用可能な最新の Android バージョンに合わせて設定するようにしてください。

実行時にシステム バージョンをチェックする

Android は、Build 定数クラスを通じて、プラットフォーム バージョンごとに一意のコードを提供しています。このコードをアプリ内で使用することで、コードの実行条件を設定できます。特定の 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">

テーマの作成方法や使用方法については、スタイルとテーマをご覧ください。