minSdkVersion は、アプリケーションをインストールして実行できる最小のAndroid API Levelです。このパラメーターは build.gradle の defaultConfig ブロックで指定され、互換性の下限を定義します。デバイスのAPI Levelが minSdk の値を下回る場合、システムはインストールをブロックし、Google Playはそのデバイスにアプリを表示しません。Android Developers によると、適切な minSdk を選択することは、ユーザーへのリーチと最新APIへのアクセスのバランスを取る上で重要です。
重要なポイント
minSdkVersion は、build.gradle 内の整数パラメーターで、アプリインストールの最小Android API Levelを指定します。デバイスのAPI Levelが指定された値を下回る場合、PackageManager がインストールをブロックし、Google Play Store はそのデバイスの検索結果からアプリを非表示にします。minSdkVersion はビルド時に <uses-sdk android:minSdkVersion> タグを介して AndroidManifest.xml に書き込まれ、インストールのたびにチェックされます。
minSdkVersion の値は、ユーザーへのリーチと新しいAPIへのアクセスのトレードオフです。minSdk が低いほど、特に古いAndroidスマートフォンが普及している開発途上地域で、より多くのデバイスがアプリをインストールできます。minSdk が高いほど、必要な下位互換コードが少なくなり、実行時チェックなしでより多くの最新APIが利用可能になります。Android Jetpack および AndroidX ライブラリは、多くの新しいAPIのバックポートを古いAndroidバージョンに提供し、機能を失うことなく低い minSdk を選択できるようにします。
minSdkVersion は開発のすべての段階に影響します:静的解析(lint は警告に minSdk を使用)、依存関係の互換性(ライブラリは独自の minSdk を必要とする場合がある)、テスト(minSdk のデバイスでのテストが必要)、Google Play Console(ユーザーリーチは minSdk に基づいて計算されます)。minSdkVersion の変更はプロジェクト設定において最も重要な決定の一つであり、コード、テスト、ユーザーベースに影響を与えます。
Build.gradle.kts(Kotlin DSL)はAndroidプロジェクトにおける最新の標準です。minSdk パラメーターはモジュールレベルの defaultConfig ブロックで設定されます。値は異なるビルドタイプやプロダクトフレーバーに対して上書きでき、メインの値を変更せずに低いAPIでテストできます。
// build.gradle.kts — minSdk の基本設定
android {
namespace = "com.example.myapp"
compileSdk = 36
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 26 // Android 8.0 Oreo
targetSdk = 36
versionCode = 1
versionName = "1.0.0"
}
// 異なるフレーバーに対する minSdk の上書き
flavorDimensions += "tier"
productFlavors {
create("free") {
minSdk = 26
}
create("premium") {
minSdk = 26
}
}
}この例では、minSdk = 26 は Android 8.0 Oreo に対応します。これは2026年の一般的な値です:Android Studio Distribution Dashboard によると、デバイスの約 ~15% だけを除外します。compileSdk = 36 はすべての Android 16 API へのアクセスを提供し、targetSdk = 36 は最新バージョンの動作変更を含みます。デバッグビルドでは、古いエミュレーターでのテスト用に minSdk を下げることができます。
minSdkVersion の選択は、ターゲットユーザー、API要件、ライブラリエコシステムの分析に基づく戦略的な決定です。すべてのプロジェクトに単一の正しい値はありません。2026年には、Android Studio は新しいプロジェクトのベースラインとして minSdk = 26(Android 8.0)を推奨していますが、B2Bアプリケーションやエンタープライズソリューションでは、より低いまたは高い値が許容される場合があります。
最初の要素は Distribution Dashboard です。Android Studio は、Google Play のデータに基づいてAPI Levelごとのアクティブデバイス統計を提供し、毎月更新されます。minSdkVersion はターゲット市場のアクティブデバイスの少なくとも90〜95%をカバーする必要があります。アフリカや東南アジアにユーザーがいる国際的なアプリの場合、古いデバイスの割合が高いため、minSdk を 21(Android 5.0)に下げる必要があります。
2番目の要素は 依存関係の要件 です。各ライブラリにはマニフェストで指定された独自の minSdkVersion があります。ライブラリが minSdk 29 を必要とし、アプリが minSdk 26 を必要とする場合、マニフェストマージャーエラーでビルドが失敗します。最新の Google Play Services ライブラリは minSdk 21、Firebase は minSdk 21、ほとんどの Jetpack ライブラリは minSdk 21 または 26、Compose BOM は minSdk 21 です。Compose の場合、最小しきい値は API 21 です。
3番目の要素は 必要なAPI です。アプリの主要機能が特定のレベルからのみ利用可能なAPIを必要とする場合(例:PhotoPicker — API 34、Predicted Navigation — API 35)、minSdk を引き上げる正当な理由になります。ただし、低い minSdk を維持するために、AndroidX バックポート(Activity Result API、NotificationCompat)と実行時チェックの組み合わせがより頻繁に使用されます。
| minSdk | Androidバージョン | カバレッジ(〜2026年) | 推奨 |
|---|---|---|---|
| 21 | 5.0 Lollipop | 97% | 最大カバレッジ、多くのフォールバックコード |
| 23 | 6.0 Marshmallow | 95% | 実行時権限がネイティブで利用可能 |
| 26 | 8.0 Oreo | 85% | 推奨ベースラインレベル |
| 29 | 10 Q | 72% | Scoped Storage がネイティブ、テストが少ない |
| 31 | 12 Snow Cone | 55% | ニッチアプリ、最新API |
ステップ1:Android Studio を開き、File → New Project で、ウィザードの推奨 minSdk を確認します。ステップ2:Android Studio の Distribution Dashboard を確認します(View → Tool Windows → App Inspection → Distribution Dashboard)。ステップ3:プロジェクトの依存関係を分析します — ビルドを実行し、マニフェストマージャーの競合を修正します。ステップ4:どのAPI Level X がバックポートなしで実際に使用されているかを評価します。ステップ5:ターゲットユーザーの90%以上をカバーし、すべての依存関係と互換性のある最小値として minSdk を設定します。
API Level によるデバイス分布 は四半期ごとに変化する動的な指標です。2026年6月時点の Android Studio Distribution Dashboard によると、アクティブなAndroidデバイスの約85%が API 26(Android 8.0)以上、72%が API 29(Android 10)以上、55%が API 31(Android 12)以上で動作しています。中国市場は、多くのHuaweiデバイスに Google Play Services がないため、独自の統計を持っています。
GMSデバイス(Google Mobile Services)はより速く更新されます:メーカーに対する Google Play の必須要件のおかげで、API 31+ の割合は68%に達します。非GMSデバイス(Huawei、Honor、一部の中国ブランド)はより古い分布を持っています:API 31+ の割合は約35%です。アプリが国際市場をターゲットにしている場合は、グローバル統計に依存してください。中国市場をターゲットにしている場合は、非GMSセグメントを考慮してください。
| API Level | Androidバージョン | グローバルカバレッジ | 非GMSカバレッジ |
|---|---|---|---|
| 21-25 | 5.0-6.0 | ~2% | ~5% |
| 26-28 | 8.0-9.0 | ~13% | ~20% |
| 29-30 | 10-11 | ~15% | ~25% |
| 31-33 | 12-13 | ~20% | ~25% |
| 34-35 | 14-15 | ~30% | ~15% |
| 36 | 16 | ~20% | ~10% |
結論:国際的なアプリの場合、minSdk 26 は最小限の下位互換コストで85%のデバイスをカバーします。発展途上地域にユーザーがいるアプリの場合、minSdk 21(97%カバレッジ)は正当化されますが、レガシーAPIを扱うためにより多くのコードが必要になります。制御されたデバイスフリートを持つエンタープライズアプリの場合は、minSdk 31 を設定してフォールバックコードを完全に排除できます。
下位互換性 は、低い minSdkVersion での主な課題です。AndroidX(以前は Support Library)は、最新APIのバックポートを古いAndroidバージョンに提供します:Material Design 用の AppCompatActivity、FragmentManager、Loader、NotificationCompat、PreferenceFragmentCompat など多数のコンポーネント。ネイティブAPIの代わりにAndroidX相当品を使用することが、互換性への第一歩です。
lint(Android Studio の静的アナライザー)は、minSdkVersion より上のAPI呼び出しがないかコードをスキャンします。メソッドが minSdk より高いAPI Level で @RequiresApi でアノテーションされ、チェックなしで呼び出された場合、lint はエラーを強調表示します。警告を抑制するには、メソッドに @SuppressLint("NewApi") アノテーションを付けるか、関数全体に @RequiresApi(Build.VERSION_CODES.TIRAMISU) を使用します。実行時チェック(Build.VERSION.SDK_INT による)は、古いデバイスで新しいAPIを安全に呼び出すための主要なメカニズムです。
// 下位互換性の例:PhotoPicker(API 34+)とフォールバック
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
class ImagePickerActivity : AppCompatActivity() {
// Activity Result API(AndroidX)— すべてのAPI Levelで動作
private val pickImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
uri?.let { displayImage(it) }
}
fun pickImage() {
// PhotoPicker は API 34 からのみ利用可能
if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
// PhotoPicker の使用(API 34+)
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
} else {
// フォールバック:GetContent(すべてのバージョンで動作)
pickImageLauncher.launch("image/*")
}
}
@RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
fun usePhotoPickerOnly() {
// このメソッドはAPIで呼び出せません < 34
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
}
}ImagePickerActivity クラスは、3つのレベルの下位互換性を示しています。AndroidX の Activity Result API はすべてのAPI Levelで機能するため、基本的な画像選択は minSdk に依存しません。PhotoPicker(ACTION_PICK_IMAGES)は API 34 からのみ利用可能で、SDK_INT チェックの下で GetContent へのフォールバック付きで呼び出されます。usePhotoPickerOnly メソッドは @RequiresApi でマークされています — lint はチェックなしでの呼び出しを許可しません。AndroidX の AppCompat は、テーマ、フラグメント、アニメーションを OS バージョンに自動的に適応させます。
ライブラリ(AAR、JAR)にも、マニフェストで指定された minSdkVersion があります。ライブラリを接続する際、Gradle は互換性をチェックします:ライブラリの minSdk がアプリの minSdk より高い場合、ビルドはエラーで失敗します。公開ライブラリの場合、消費者を制限しないように、可能な限り低い minSdk(ほとんどの場合21)を指定することをお勧めします。ライブラリが API 29+ を必要とする場合、約28%の潜在的なユーザーを失います。
マルチモジュールプロジェクト では、モジュールごとに異なる minSdkVersion 値を設定できます。たとえば、:core:network モジュールは minSdk 26 を持ち、:feature:camera モジュールは minSdk 29(特定の要件を持つ CameraX のため)を持つことができます。Google Play は、メインの :app モジュールの minSdk がすべての依存モジュールの minSdk 以下であることを要求します。実際には、同じアプリのすべてのモジュールは、メンテナンスを容易にするために通常同じ minSdk を持ちます。
// build.gradle.kts — 低い minSdk のライブラリモジュール
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.mylibrary"
compileSdk = 36
defaultConfig {
minSdk = 21 // 最大カバレッジのための最小
targetSdk = 36
}
}
dependencies {
// AndroidX Core — minSdk 21、バックポートを追加
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.0")
}minSdk = 21 のライブラリモジュールは97%のデバイスと互換性があり、消費者を制限しません。ライブラリが21より上のAPIを使用する場合、開発者は実行時チェックを追加するか、関連するメソッドに @RequiresApi を指定する必要があります。AndroidX Core KTX(minSdk 21)は、Context、Bundle、Locale およびその他のシステムクラスのバックポートを提供し、ライブラリが低い minSdk を維持できるようにします。
minSdk 選択における間違い は、数千のインストールまたは数週間の追加開発のコストがかかる可能性があります。最初の一般的な間違いは、Distribution Dashboard を分析せずにプロジェクトテンプレートから minSdk をコピーすることです。多くの開発者は、Android Studio テンプレートから minSdk = 21 のままにしていますが、minSdk 26 で自社のユーザーには十分であり、コード内の SDK_INT チェックの数を減らせる場合があります。
2番目の間違いは、市場を考慮せずに minSdk が高すぎる ことです。国際的なアプリに minSdk = 31(Android 12)を設定すると、約45%のデバイスを失います。スタートアップや大量ユーザー向けアプリにとって、これは災害です。minSdk を引き上げる前に必ず Distribution Dashboard を確認し、不明な場合は Google Play Console で A/B テストを使用してください。
3番目の間違いは 依存関係の minSdk を無視する ことです。新しいライブラリを追加するときは、ドキュメントまたはPOMファイルでその minSdk を確認してください。Firebase ML Kit は minSdk 21 を必要とし、一部のカスタムカメラライブラリは minSdk 29 を必要とします。新しいライブラリが原因で本番環境でマニフェストマージャーが失敗した場合、修正に数日かかる可能性があります。
// 例:実行時API互換性チェック
fun checkFeatureAvailability(): Boolean {
// 典型的な間違い — SDK_INT をチェックせずにAPIを呼び出す
return when {
VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
// API 34+ — PhotoPicker を使用
true
}
VERSION.SDK_INT >= VERSION_CODES.Q -> {
// API 29-33 — MediaStore を使用
true
}
else -> {
// API < 29 — ACTION_GET_CONTENTを使用
true
}
}
}API Level チェックの正しいアーキテクチャは、minSdk から compileSdk までのすべての可能な値をカバーする範囲を持つ when 式です。主要なルール:Level X のAPI呼び出しは、minSdk から X までのAPI Levelを持つすべてのデバイスに対して VERSION.SDK_INT チェックで保護する必要があります。lint は未チェックの呼び出しを検出するのに役立ちますが、動的コードの完全なカバレッジを保証することはできません。
よくある質問
minSdkVersion は、アプリをインストールできる最小のAndroid API Levelです。build.gradle の defaultConfig ブロックで指定します。デバイスのAPI Levelが minSdk を下回る場合、システムはインストールをブロックし、Google Play はそのデバイスにアプリを表示しません。minSdk はユーザーリーチに影響します:minSdk = 26 は ~85%のデバイスをカバー、minSdk = 21 は ~97%をカバーします。
minSdkVersion は、Android Studio の Distribution Dashboard 統計とターゲットユーザーに基づいて選択します。マスアプリの場合は、minSdk 26(Android 8.0)が推奨されます — ~85%のデバイスをカバーします。B2Bアプリの場合は、minSdk 31(Android 12)を設定できます。使用するすべてのライブラリが選択した minSdk をサポートしていることを確認することが重要です。Compose アプリの場合、最小しきい値は API 21 です。
新しいAPIは、バックポート付きの AndroidX(AppCompat、Core KTX、Activity Result API)を介して、またはフォールバックコード付きの Build.VERSION.SDK_INT 実行時チェックを介して、低い minSdkVersion で使用できます。@RequiresApi アノテーションは、メソッドが特定のAPI Levelを必要とすることを lint に伝えます。AndroidX Material Components はUIコンポーネントの下位互換性も提供します。チェックがないと、アプリは NoSuchMethodError でクラッシュします。
ライブラリの minSdkVersion がアプリより高い場合、Android Studio はビルドエラーを表示します:Manifest merger failed。解決策は、アプリの minSdk をライブラリのレベルまで引き上げるか、より低い minSdk の代替品を見つけるか、ラッパーを使用することです。ほとんどの Jetpack ライブラリは minSdk 21 または 26 です。Firebase ML Kit は minSdk 21、CameraX は minSdk 21 を必要とします。
公開後に minSdkVersion を引き上げることは可能ですが、古いデバイスのユーザーを失う可能性があります。一度に1〜2 API Level ずつ minSdk を引き上げ、Google Play Console でアクティブデバイスの統計を分析することをお勧めします。minSdkVersion を下げることは技術的に可能ですが、新しい minSdk より上のAPI呼び出しがないかコードを確認する必要があり、コードの一部を書き直す必要がある場合があります。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。