【Kotlin/Android Studio】コードからAPI(OS)レベルを取得して分岐する方法!Build.VERSION.SDK_INT

この記事からわかること
- Android Studio/KotlinでコードからAPIレベルを取得する方法
- Build.VERSION.SDK_INTの使い方
- Android 10(API 29)とAndroid 11(API 30)でコードを分岐させるには?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Kotlin:1.9.0
APIレベルとは?
Androidの「APIレベル」とはAndroidプラットフォームにおけるリリースバージョンごとに更新されていく値です。これはOSのバージョン(Android 16など)と基本的に関係していてOSのバージョンが上がるとAPIレベルも上がります。
Androidアプリ開発においては「アプリの最小対応APIレベル(minSdkVersion
)」や「ターゲットAPIレベル(targetSdkVersion
)」、「コンパイルAPIレベル(compileSdkVersion
)」を指定することでAPIレベルに応じたアプリとして管理することが可能です。
アプリの最小対応APIレベル(minSdkVersion)
「アプリの最小対応APIレベル(minSdkVersion)」はアプリがインストール可能なAPIレベルです。指定した値より古いデバイス(APIレベルの低い端末)ではアプリ自体がインストールできなくなるので、適切な範囲で指定する必要があります。
またアプリにライブラリを導入している場合は各ライブラリのminSdkVersion
との兼ね合いも考慮する必要があります。
未設定の場合は1
(全てのAndroidが対象)になってしまうので設定は必須になります。
ターゲットAPIレベル(targetSdkVersion)
「ターゲットAPIレベル(targetSdkVersion)」はアプリがメインターゲットとしているAPIレベルです。未設定の場合はminSdkVersion
に指定した値が反映されます。
またtargetSdkVersion
に指定したAPIレベルは上位互換性を維持するため、新しいAPIにおいて動作に対する変更を適用しない仕組みになっており、targetSdkVersion
で指定したレベルで期待される動作に近づくように働いてくれます。
targetSdkVersion
を上げないことのデメリットは最新のAPIレベルで追加された機能が利用できないことです。なのでAPIレベルアップデート対応を行う場合はcompileSdkVersion
をあげれば対象のAPIレベルで動作することは担保できますが、対象のAPIレベルで追加された機能を使用したい場合はtargetSdkVersion
をあげておく必要があります。
コンパイルAPIレベル(compileSdkVersion)
「コンパイルAPIレベル(compileSdkVersion)」はコンパイル時に適応するAPIレベルです。ここで指定しているレベルでサポートしている機能が利用できるようになるため、基本的に最新にしておけば問題ないです。
またtargetSdkVersion
はcompileSdkVersion
より大きな値を指定することはできないようになっています。
android {
// アプリケーションの名前空間(パッケージ名)を指定。リソースやクラスを一意に識別するために使用。
namespace 'com.example.myapp'
// コンパイル時に使用するAndroid SDKのバージョン。最新のAPI機能を使用するために指定。
compileSdk 33
// アプリケーションの基本的な設定。
defaultConfig {
// アプリケーションの一意なID。Google Playでのアプリを識別用。
applicationId "com.example.myapp"
// アプリが動作するための最小SDKバージョン。
minSdk 24
// アプリがターゲットとするSDKバージョン。
targetSdk 33
// アプリの内部バージョンコード。
versionCode 1
// ユーザーに表示されるアプリのバージョン名。
versionName "1.0"
}
}
コードからAPIレベルを取得する方法
Kotlinでコードからアプリが実行されているデバイスのAPIレベルを取得するにはBuild
クラスのVERSION.SDK_INT
を使用します。Build.VERSION.SDK_INT
の中には自動でデバイスのAPIレベルが格納されています。
import android.os.Build
print(Build.VERSION.SDK_INT) // 34
取得できる数値はAndroid 14であれば34といったAPIレベルです。
AndroidのバージョンとAPIレベル
AndroidのバージョンとAPIレベル、バージョンコードは以下のようになっています。(※ 2025/3/6時点)
プラットフォームのバージョン | API レベル | VERSION_CODE |
---|---|---|
Android 16 | API 35 → ベータ版 1 | BAKLAVA |
Android 15 | 35 | VANILLA_ICE_CREAM |
Android 14 | 34 | UPSIDE_DOWN_CAKE |
Android 13 | 33 | TIRAMISU |
Android 12 | 32 | S_V2 |
Android 12 | 31 | S |
Android 11 | 30 | R |
Android 10 | 29 | R |
Android 9 | 28 | Q |
詳細は公式サイトを参考にしてください。
処理を分岐する
Build.VERSION.SDK_INT
で取得した値で分岐させることでAPIに応じて非推奨になってしまったコードなどを分けて記述することができるようになります。
if (Build.VERSION.SDK_INT <= 29) {
// Android 10 (API 29) 以前で実行する処理
} else if(Build.VERSION.SDK_INT >= 30) {
// Android 11 (API 30) 以降で実行する処理
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。