Android SDK Platformは、オペレーティングシステムの特定バージョン向けのライブラリ、システムイメージ、ツールのセットです。各プラットフォームはAPI Levelに関連付けられており、Android APIクラスを含むandroid.jar、ランタイムコンポーネント、エミュレータが含まれます。Google Developer Documentation、2026年によると、開発者はターゲットOSバージョンに対してコードをコンパイルするためにSDK Platformを使用します。インストールされたプラットフォームがないと、APKをビルドしたりエミュレータでアプリケーションを実行したりすることはできません。SDK Managerはこれらのコンポーネントのダウンロード、更新、削除を管理します。
重要なポイント
SDK PlatformはAndroid SDKの基本的なコンポーネントであり、特定のAndroidバージョン向けのアプリケーションを開発するためのライブラリとツールの完全なセットを提供します。各プラットフォームはAPI Level(新しいOSリリースとともに増加する整数)で識別されます。例えば、Android 13はAPI Level 33、Android 14はAPI Level 34、Android 15はAPI Level 35に対応します。
Android Studio(IDE)とは異なり、SDK Platformにはコードエディタやデバッガは含まれていません。これはコンパイラとビルドシステムに接続するシステムレイヤーです。開発者がimport android.app.Activityと記述すると、コンパイラは特定のSDK Platformのandroid.jarからこのクラスを取得します。必要なAPI Levelのプラットフォームがインストールされていないと、コードはコンパイルされません。
Googleは各安定版Androidバージョンに対して新しいSDK Platformをリリースします。その歴史はAndroid 1.0(API 1)からAndroid 15(API 35)まで35以上のAPI Levelに及びます。各プラットフォームは下位互換性があります。API Level 21用に書かれたコードはAPI Level 35でも動作しますが、その逆はできません。
Androidは急速に進化しており、各バージョンで新しいAPIが追加され、既存の動作が変更され、制限が導入されます。例えば、Android 10(API 29)はScoped Storageを導入し、Android 12(API 31)はSplashScreen APIを、Android 14(API 34)は必須のBroadcastReceiverフラグを導入しました。開発者はこれらの機能を利用するために、現在のプラットフォームに対してアプリケーションをコンパイルする必要があります。
同時に、アプリケーションは古いOSバージョンでも実行できます。そのために、GradleではminSdk(アプリケーションが実行される最小API Level)が指定されます。コードはバージョンチェックと条件付きAPI呼び出しを使用します。このアプローチにより、新機能を失うことなく互換性が確保されます。
| Androidバージョン | API Level | コードネーム | リリース年 |
|---|---|---|---|
| Android 12 | 31 | Snow Cone | 2021 |
| Android 13 | 33 | Tiramisu | 2022 |
| Android 14 | 34 | Upside Down Cake | 2023 |
| Android 15 | 35 | Vanilla Ice Cream | 2024 |
SDK Platformは単一のファイルではなく、アプリケーションのコンパイル、ビルド、テストを共に保証するコンポーネントのセットです。主要な要素はandroid.jar — このバージョンに含まれるAndroid APIクラスを含むアーカイブです。このファイルはKotlinまたはJavaコンパイラに接続し、開発者が利用できるクラス、メソッド、アノテーションを決定します。
各SDK Platformには、Android Virtual Deviceエミュレータ用のSystem Image(オペレーティングシステムイメージ)が含まれています。対応するイメージがないと、エミュレータは必要なAPI Levelの仮想デバイスを起動できません。System Imagesにはいくつかのタイプがあります:Google APIs(Googleサービス付き)、Google Play(Play Store付き)、AOSP(Googleサービスなしの純粋なAndroid)。
SDK Platformには、このAPI Levelに最適化されたBuild-ToolsとPlatform-Toolsのバージョンが含まれています。Build-Toolsにはaapt2(Android Asset Packaging Tool)、dx/d8(Dalvik/ARTコンパイラ)、ApkSignerが含まれます。Platform-ToolsはADB(Android Debug Bridge)、fastboot、SQLiteを提供します。これらのツールはSDK Managerを介してSDK Platformとは独立して更新されます。
各プラットフォームには、標準のAndroidリソース(システムテーマ、スタイル、アニメーション、色、寸法)が含まれています。これらのリソースはコンパイル中に使用されます。開発者が@android:style/Theme.Material.Lightを参照すると、ビルドシステムはSDK Platformのリソースから定義を取得します。これにより、すべてのデバイスでシステムコンポーネントの一貫した外観が保証されます。
| コンポーネント | 説明 | サイズ(目安) |
|---|---|---|
| android.jar | コンパイル用Android APIライブラリ | 50~120 MB |
| System Image | エミュレータ用OSイメージ | 600~1500 MB |
| Build-Tools | APKおよびAABビルドツール | 200~400 MB |
| Platform Resources | システムリソース(テーマ、スタイル) | 30~80 MB |
| Skins | エミュレータ用デバイスプロファイル | 10~50 MB |
API LevelはAndroid SDKバージョンの整数識別子です。各Androidリリースは単調増加する1つのAPI Levelに対応します。開発者はbuild.gradleの3つの主要パラメータ(compileSdk、minSdk、targetSdk)でAPI Levelを指定します。これらのパラメータの選択により、利用可能なAPIとシステムがアプリケーションを処理する方法が決まります。
GoogleはminSdkを現在の配布しきい値より低くしないことを推奨しています。Android Studio Distribution Dashboard(2026年)によると、約95%のデバイスがAndroid 8.0(API 26)以上で動作しています。compileSdkは最新の安定版である必要があります。これにより、新しいAPIへのアクセスが可能になり、lintチェックで非推奨メソッドを検出できます。
新しいAPI Levelごとに、Googleは重要な変更を導入します。Android 6.0(API 23)はランタイム権限を追加しました。アプリケーションはインストール時ではなく実行時に権限を要求します。Android 8.0(API 26)は自動入力フォームと通知チャネルを導入しました。Android 12(API 31)はインテントへのアプローチを根本的に変更しました。SplashScreen APIとexported属性によるコンポーネントのエクスポートが登場しました。Android 14(API 34)はBroadcastReceiverのフラグ指定を必須にし、フォアグラウンドサービスに厳格な制限を導入しました。
API Levelの歴史を理解することは、開発者が正しい互換性戦略を選択するのに役立ちます。アプリケーションがcompileSdk 35を使用しているがminSdk 26の場合、コードはBuild.VERSION.SDK_INTによるバージョンチェック後にのみAPI 35のメソッドを呼び出すことができます。このアプローチはバージョンゲート開発と呼ばれ、業界標準です。
| Android | API | 年 | 主な革新 |
|---|---|---|---|
| 6.0 Marshmallow | 23 | 2015 | ランタイム権限 |
| 8.0 Oreo | 26 | 2017 | 通知チャネル、自動入力 |
| 10 | 29 | 2019 | Scoped Storage、ダークテーマ |
| 12 | 31 | 2021 | SplashScreen、exported属性 |
| 14 | 34 | 2023 | Broadcastフラグ、フォアグラウンドサービス |
SDK ManagerはAndroid SDKコンポーネントを管理するためのツールです。新しいSDK Platformのインストール、既存の更新、古いものの削除を行います。SDK ManagerはAndroid Studioのグラフィカルインターフェースと、sdkmanagerを介したコマンドラインツールの両方で利用できます。コマンドラインのSDK Managerは、グラフィカルインターフェースがないCI/CDパイプラインでの使用に便利です。
SDK ManagerはプラットフォームをAndroid SDKディレクトリにインストールします。デフォルトの場所は、LinuxとmacOSでは$HOME/Android/Sdk、Windowsでは%LOCALAPPDATA%\Android\Sdkです。platformsディレクトリの中にはandroid-{API Level}という名前のフォルダがあり、それぞれに完全なSDK Platformが含まれています。
sdkmanagerコマンドは「platforms;android-{API}」形式のパッケージ識別子を受け入れます。例えば、SDK Platform 35をインストールするコマンドは次のようになります:
# API Level 35用のSDK Platformをインストール
sdkmanager "platforms;android-35"
# 1つのコマンドで複数のプラットフォームをインストール
sdkmanager "platforms;android-34" "platforms;android-33" "platforms;android-31"
# インストール済みプラットフォームの一覧
sdkmanager --list_installed | grep platforms
# 古いプラットフォームを削除
sdkmanager --uninstall "platforms;android-28"
最新のAndroidプロジェクトはGradle Pluginを使用しており、最初のビルド時に自動的にSDK Platformをインストールできます。これを行うには、build.gradleでcompileSdkを指定し、ローカル設定にSDKディレクトリを追加する必要があります。Android Studioはプロジェクトを開く際に不足しているプラットフォームのインストールも提案します。Gradle同期ウィンドウの「Install SDK Platform」ボタンをクリックするだけです。
SDK Managerを介してSDK Platformを定期的に更新することが重要です。プラットフォームとともにBuild-ToolsとPlatform-Toolsも更新され、ビルドパフォーマンスとデバッグの安定性に影響します。Googleは2~3週間ごとにSDKの更新を確認することを推奨しています。特にGoogle Playでアプリケーションの新バージョンを公開する前には重要です。
特定のAPI Levelでエミュレータを実行するには、同じバージョンのSystem Imageをインストールする必要があります。SDK Managerは異なるアーキテクチャ(x86_64、arm64-v8a)とタイプ(Google APIs、Google Play、AOSP)のイメージをダウンロードできます。イメージのダウンロード後、AVD Managerがそれに基づいて仮想デバイスを作成します。
# API 35用のGoogle APIs付きSystem Imageをインストール
sdkmanager "system-images;android-35;google_apis;x86_64"
# コマンドラインでAVDを作成
avdmanager create avd -n pixel8 -k "system-images;android-35;google_apis;x86_64"
# 作成済みAVDの一覧
avdmanager list avd
build.gradleの3つのパラメータが、アプリケーションとSDK Platformの連携方法を定義します。compileSdkはコンパイルに使用されるAPI Levelです。このパラメータはコードで利用可能なAndroid APIクラスを指定します。compileSdkは3つの中で最も新しいものである必要があり、ランタイムの動作には影響しません。アプリケーションはコンパイルされますが、デバイスで利用可能なAPIのみを使用します。
minSdkはアプリケーションをインストールできる最小のAPI Levelです。Google PlayはminSdkより低いバージョンのデバイスへのアプリケーションのインストールを許可しません。このパラメータは互換性のしきい値を定義し、ユーザーカバレッジに影響します。minSdkが低いほど多くのデバイスがサポートされますが、チェックなしで使用できる新しいAPIは少なくなります。
targetSdkはアプリケーションがテストされたAPI Levelです。AndroidシステムはtargetSdkを使用して動作変更を適用します。アプリケーションが新しいAPI Levelに更新されていない場合、システムは古いバージョン用の互換モードを有効にします。Google PlayではtargetSdkが一定レベル以上であることが要求されます。2026年時点ではAPI 34(Android 14)です。
android {
compileSdk 35
defaultConfig {
applicationId "com.example.app"
minSdk 26
targetSdk 35
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
// Android SDKバージョンはSDK Managerを介してインストールする必要があります
// sdkmanager "platforms;android-35"
選択戦略はプロジェクトの目標によって異なります。新しいアプリケーションの場合:compileSdk — 最新の安定版(2026年初頭時点で35)、minSdk — API 26(Android 8.0、デバイスの95%をカバー)、targetSdk — 最新の安定版。既存のアプリケーションを更新する場合:compileSdkは直ちに引き上げ、targetSdk — すべての動作変更のテスト後、minSdk — 古いデバイスのサポートを終了する必要がある場合のみ。
Googleは新しいAndroidバージョンのリリースから1年以内にtargetSdkを更新することを要求しています。この要件を満たさないアプリケーションはGoogle Playで更新を公開できません。期限を追跡するには、公式のAndroid OSアップデートカレンダーを使用してください。
| パラメータ | 目的 | 推奨 |
|---|---|---|
| compileSdk | コンパイル用APIバージョン | 最新の安定版 |
| minSdk | 最小サポートバージョン | 95%カバレッジのためにAPI 26 |
| targetSdk | 動作変更用バージョン | 最新の安定版+テスト |
異なるAndroidバージョン向けに開発する場合、APIの利用可能性を考慮する必要があります。アプリケーションがcompileSdk 35を使用しているがAPI 31のデバイスで実行される場合、API 34で追加されたメソッドを呼び出すとNoSuchMethodErrorまたはAbstractMethodErrorが発生します。新しいAPIを安全に呼び出すために、Build.VERSION.SDK_INTを使用したバージョンチェックが用いられます。
class FeatureChecker {
fun registerNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 通知チャネルはAPI 26から利用可能
val channel = NotificationChannel(
"updates",
"更新",
NotificationManager.IMPORTANCE_DEFAULT
)
val manager = context.getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
}
}
特定のバージョンでのみ呼び出されるメソッドには、@RequiresApiアノテーションを使用します。これにより、lintチェックに対してメソッドが安全であることを伝え、警告を無効にします。SDK_INTチェックと組み合わせることで、アノテーションはコードをよりクリーンにし、レビュアーにとって理解しやすくします。
@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
fun scheduleExactAlarm(manager: AlarmManager, time: Long) {
// API 34:SCHEDULE_EXACT_ALARMフラグ付きscheduleExact
if (manager.canScheduleExactAlarms()) {
manager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent)
} else {
// SCHEDULE_EXACT_ALARM権限をリクエスト
val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
context.startActivity(intent)
}
}
fun safeScheduleAlarm(context: Context, triggerTime: Long) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
scheduleExactAlarm(getAlarmManager(context), triggerTime)
} else {
// 権限チェックなしの古いsetExactメソッド
getAlarmManager(context).setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent)
}
}
開発者のデバイスやCIにインストールされているSDK Platformのバージョンを確認する必要がある場合があります。これはADBを介して、またはアプリケーションコードでプログラム的に行うことができます。デバイスのAPI Levelを知ることは、バージョン固有の動作をテストする際に役立ちます。
fun logDeviceInfo() {
with (Build.VERSION) {
Log.d("SDK_Demo", "SDK_INT: $SDK_INT")
Log.d("SDK_Demo", "RELEASE: $RELEASE")
Log.d("SDK_Demo", "CODENAME: $CODENAME")
Log.d("SDK_Demo", "PREVIEW_SDK_INT: $PREVIEW_SDK_INT")
}
// 出力:SDK_INT: 35、RELEASE: 15、CODENAME: REL
}
よくある質問
Android StudioはIDEであり、SDK Platformはコンパイルのためのライブラリとツールのセットです。StudioはアプリケーションをビルドするためにSDK Platformを使用しますが、プラットフォームはSDK Managerを介して個別にダウンロードされ、Studioのバージョンとは独立して更新できます。
通常、3つのバージョンで十分です:最新版(compileSdk)、最小版(minSdk)、テスト用の中間版です。SDK Managerを使用すると、必要に応じてプラットフォームを簡単に追加および削除できます。平均して、開発者は作業マシンに3~5のプラットフォームを保持しています。
いいえ。各SDK PlatformにはそのバージョンのAPIのみが含まれています。API 35のメソッドを呼び出すには、android-35プラットフォームが必要です。古いプラットフォームがインストールされた状態で新しいcompileSdkを指定すると、コンパイルエラーが発生します。
Googleは各バージョンに対してSDK Platformの更新(バグ修正、新しいAPI、パフォーマンス改善)をリリースします。SDK Managerは利用可能な更新を通知します。安定したビルドのためには、プラットフォームの最新リビジョンをインストールすることをお勧めします。
デフォルトでは、各SDK PlatformはAndroid/Sdk/platforms/android-{API}ディレクトリに200~800 MBの容量を占有します。フォルダ内には、android.jar、リソースを含むdataフォルダ、エミュレータとビルドシステムの設定ファイルが含まれています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。