Androidアプリの開発中、Android Studioの画面に突如現れる赤文字の警告。
その中でも頻出するのが「Call requires API level XX (current min is YY)」というエラーです。
この記事では、このエラーが発生する根本的な原因と、プロジェクトの状況に合わせた3つの解決策を解説します。
なぜ「Call requires API level」エラーが発生するのか?
このエラーは、一言で言うと「アプリがサポートしている最低バージョン(minSdkVersion)よりも、新しいバージョンの機能を使おうとしている」ために発生します。
- 機能が必要なレベル: API 30
- アプリの最低設定: API 24(Android 7.0以降)
- 結果: Android 7.0の端末でその機能が動くとクラッシュするため、ビルド前にIDEが警告してくれる。
これを無視して実行すると、特定の端末でアプリが強制終了する原因となります。
解決策1:プロジェクト全体の最小サポートバージョンを引き上げる
もし、エラーが出ている機能がアプリの核となるもので、それ以下の古いOSをサポートする必要がない場合は、build.gradleの設定を変更するのが最もシンプルです。
手順
- build.gradle (Module :app) を開く
defaultConfig内のminSdkVersionをエラーメッセージに表示された数値(例: 24)以上に書き換える- Sync Now をクリックして同期する
注意点minSdkVersion を上げると、それより古いOSを搭載したスマートフォンにはアプリをインストールできなくなります。ターゲットとするユーザー層のシェアを確認してから行いましょう。
解決策2:バージョンチェック処理を追加する(推奨)
特定の機能だけ最新のAPIを使いたいが、古い端末も切り捨てたくない場合に最も一般的に使われる手法です。Java/Kotlinのコード内で「OSのバージョンを確認する分岐」を記述します。
実装例(Kotlin)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// APIレベル24(Android 7.0)以上で実行したい処理
someAdvancedFunction()
} else {
// それ未満のバージョンでの代替処理、または何もしない
}
この方法は「後方互換性」を保つために必須のテクニックです。
古い端末ではシンプルな機能を、新しい端末ではリッチな体験を提供することができます。
3. アノテーションで警告を回避する
「このメソッドを呼び出す場所ですでにバージョンチェックは済んでいる」あるいは
「特定のクラス全体で特定のAPIレベルを前提とする」場合に有効な方法です。
@RequiresApi
特定のAPIレベルが必要であることを明示します。
@RequiresApi(Build.VERSION_CODES.N)
fun myMethod() {
// 処理
}
@TargetApi
特定のAPIレベルをターゲットにしていることを伝え、警告を抑制します。
注意
アノテーションは「警告を消す」だけであり、実行時のクラッシュを防ぐものではありません。
呼び出し元で必ずバージョンチェックを行う必要があります。
まとめ:エラーを正しく理解して堅牢なアプリへ
「Call requires API level」は、ユーザーの端末でクラッシュが発生するのを未然に防いでくれる親切な警告です。
- 全体を底上げするなら →
build.gradleを修正 - 互換性を維持するなら →
if (Build.VERSION.SDK_INT >= ...)で分岐 - 構造的に整理するなら → アノテーションを活用
自分のアプリがどの範囲のユーザーをターゲットにしているかを考え、最適な手法を選択しましょう。
