AndroidのAPIとAPIレベルとOSバージョンの関係性と最小APIレベルの考え方【Androidアプリ開発】

Androidアプリ開発入門

Android APIレベルとOS一覧対応表

今回はAndroidアプリのAPIとAPIレベルとOSバージョンの関係性について書いています。APIレベルはAndroidアプリを開発していく上で重要になるので是非一読して頂けたらと思います。

APIレベルとはAPIフレームワークのリビジョンです。APIフレームワークの機能追加・修正・変更があった場合にレベルが上がります。AndroidOSには色々なバージョンが有りますがOSバージョンによって対応するAPIが変わってきます。それからAPIレベル(OS)毎にコードネームがついています。

プラットフォーム
バージョン
APIレベルコードネーム
Android 11.030
Android 10.029Q
Android 928P
Android 8.127O_MR1
Android 8.026O
Android 7.1.1
Android 7.1
25N_MR1
Android 7.024N
Android 6.023M
Android 5.122LOLLIPOP_MR1
Android 5.021LOLLIPOP
Android 4.4W20KITKAT_WATCH
Android 4.419KITKAT
Android 4.318JELLY_BEAN_MR2
Android 4.2
Android 4.2.2
17JELLY_BEAN_MR1
Android 4.1
Android 4.1.1
16JELLY_BEAN
Android 4.0.3
Android 4.0.4
15ICE_CREAM_SANDWICH_MR1
Android 4.0
Android 4.0.1
Android 4.0.2
14ICE_CREAM_SANDWICH

Android 3.2
13HONEYCOMB_MR2
Android 3.1.x
12HONEYCOMB_MR1
Android 3.0.x11HONEYCOMB
Android 2.3.4
Android 2.3.3
10GINGERBREAD_MR1
Android 2.3.2
Android 2.3.1
Android 2.3
9GINGERBREAD
Android 2.2.x8FROYO
Android 2.1.x7ECLAIR_MR1
Android 2.0.16ECLAIR_0_1
Android 2.05ECLAIR
Android 1.64DONUT
Android 1.53CUPCAKE
Android 1.12BASE_1_1
Android 1.01BASE
引用:Androidデベロッパー APIレベルとは

APIの互換性

APIのリビジョンは以前のAPIに追加する形になるため基本的には上位互換があると言えます。例外として既存機能の代替え機能を追加した時やセキュリティの関係で廃止になった機能については使えません。一方、下位互換は、基本的な考えに基づくと下位互換は無いと言っておきます。上位レベルに付加されている機能が提供されていないので使えません。

AndroidアプリのAPIレベル互換性の例

下位互換を実現するにはAndroidX(Jetpack)と言う機能を使うことで実現可能です。AndroidXはAndroid9(APIレベル29)で追加された機能でSupport Library(下位互換などの機能)の代替機能となります。Support Libraryはまだ使えますが、AndroidXを使うように推奨されています。

最小APIレベル(最小SDKバージョン)を意識する必要がある

マニフェストファイル(XML)と呼ばれるアプリの設定情報を記述するファイルがあるんですが、これに最小APIレベルを指定する必要があります。Android studioを使った場合プロジェクトの新規作成の時に出てくる[最小SDKバージョン]の項目になります。ここで設定した値未満の機種は対象外機種になりインストール出来ません。Android 10(APIレベル29)の端末では、最小APIレベルを22以下に設定している場合にアプリの初回起動に警告が表示されます。

例えば現在の最新はAPI29なんですが、この時に追加された機能を使ったアプリの場合最小APIは29となります。もし、この値を28にしていた場合に最新バージョンの端末(Android10)でアプリを使った場合は使えますが、API28(Android9)の端末の場合はクラッシュして予期しないエラーとかで落ちてしまいます。

Android 最小APIレベルの最新バージョンの機能を使用した場合の考え方

もう1つよくある例を挙げておきます。APIレベル10~28の機能を使ったアプリの場合、最小APIレベルは28になります。この時マニフェストファイルで値を29にした場合、本来使えるはずの28の機種がマニフェストファイルの縛りによりインストール出来なくなります。値を27にした場合、27もインストール可能ですが28の機能を使ってる為クラッシュしてしまいます。

Android 最小APIレベルの考え方

最小APIレベルはアプリで使われてるクラスの最大値であると言うことがわかってもらえたでしょうか。ただし、前章で少し触れたAndroidXの機能を使って下位互換を行った場合はその対象となる機能のAPIレベルになります。上記は基本的な考えで実際は下位互換前提で作っていきます。

使われてるAPIレベルはAndroidデベロッパーのAPIリファレンスで対象のパッケージ(クラス)のページに必ず記載されています。また、Android studioでプロジェクト作成時に選択した最小APIレベル([最小SDKバージョン]の項目)は後から変更できます。

対象APIレベル要件を満たす必要がある

アプリを公開するときにGoogle Playの縛りで『対象APIレベルの要件』というのが有ります。マニフェストファイルに対象APIレベルというのが設定にあってここの値を要件と合致させる必要があります。つまり、要件にあるAPIレベルでアプリ使える様にしなくては行けません。対象APIレベルの『対象』はターゲットとする機種を指します。現在(2020年6月に書いてます)の要件は下記になります。

APIレベルの要件開始日
Android 8.0(APIレベル26)2018年8月1日:新規アプリで必要
2018年11月1日:アプリのアップデートに必要
Android 9(APIレベル28)2019年8月1日:新規アプリで必要
2019年11月1日:アプリのアップデートに必要
Android 10(APIレベル29)2020年8月3日:新規アプリで必要
2020年11月2日:アプリのアップデートに必要
引用:Play Consoleヘルプ

なるべく最新のAPIレベルに対応させてねって事です。現在だとAPI28に対応していないとダメと言うことになります。新規アプリだと8月3日以降はAPI29にしてないアプリはリリースできません。既にアプリをリリースしてる場合は11月2日までには対応していないといけない、といった感じです。

最小APIレベル~対象APIレベルまでがダウンロード可能と言うことです。毎年同じ時期に要件の更新をしてるので要注意です。

ターゲットにするOSのバージョンを考える

作成するアプリのOSバージョンはどの範囲まで対応させたら良いのかって言う所なんですが、基本使いたい機能に合わせますが、Google Playの方でアプリがどのOSで使われているかの統計があるのでそちらも参考になると思います。下記は2020年6月1日までの7日間に収集されたデータです。

VersionAPIDistribution
62316.90%
8.12715.40%
82612.90%
5.12211.50%
72411.40%
92810.40%
7.1257.80%
4.4196.90%
5213.00%
4.2.x171.50%
4.1.x161.20%
4.3180.50%
2.3.3 -2.3.7100.30%
4.0.3 -4.0.4150.30%
引用:Androidデベロッパー 配信ダッシュボード

マニフェストファイルのAPIレベルの設定

一応マニフェストファイルの属性も書いておきます。この辺りは別の記事で詳しく書こうと思ってます。

android:minSdkVersion必須項目。最小APIレベルを指定する
android:targetSdkVersion対象APIレベルを指定する。
この属性を指定していない場合はminSdkVersionの値が入る。