LoginSignup
90
64

More than 3 years have passed since last update.

Androidの各種SdkVersionについての備忘録

Last updated at Posted at 2018-07-02

新規アプリのリリースは2018年8月から、既存アプリのアップデートは2018年10月からtargetSdkVersionを26以上にする必要がある(*1)とのことでその対応の際に調べたことの備忘録。
今までbuild.gradle周りの理解がふんわりし過ぎていたので、一歩前進した。

調べたこと

minSdkVersion

アプリを実行することができる最小のAPIレベルの指定。
このSdkVersionより上のAndroidでは動きますよ、ということ。
端末のSdkVersionがこれより低い場合、アプリはそもそもインストールできない。

targetSdkVersion

アプリがターゲットとするAPIレベルの指定。設定しない場合は、minSdkVersionとイコールになる。
targetSdkVersionの指定が必要な理由は、AndroidがAPIレベルごとに動作や外観を変更される可能性があるためである。
targetSdkVersionを指定することで、仮にAndroidのAPIレベルがtargetSdkVersionよりも大きい場合でも、開発者が想定した動作・外観でアプリが動く。
AndroidのAPIレベルがtargetSdkVersionよりも低い場合は、AndroidのAPIレベルでの動作・外観が優先される。

buildToolsVersion

SDKビルドツールのバージョンの指定。アプリビルドの際のコンパイラのバージョンのこと。
コンパイラのバージョンなので、後述のcompileSdkVersionを上げた時は一緒に上げる必要がある。
Android Studio 3.0.0以降は必須ではなくなっていて、指定しない場合は使用しているpluginが必要とする内で一番高いバージョンが使われる。

compileSdkVersion

アプリをコンパイルする際のAPIバージョン。このAPIバージョンまでの機能をアプリ内で利用することができる。
例えばcompileSdkVersionを20に設定した上で、APIレベル21の機能を使おうとするとコンパイルエラーが起きる。
ちなみにcompileSdkVersionを21に設定していたとしても、APIレベル21の機能を使わない限りはAPIレベルが21未満の端末上でもアプリは動作する。
なのでminSdkVersin <= compileSdkVersionかつcompileSdkVersionの機能をアプリ内で使う場合は下記のように条件分岐で対応すると良いっぽい。

Fragment.java

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.L) {
  // ここはLollipop(Android 5.0)以降で実行される。
} else {
  // こっちはKitKat(Android 4.4)以前。
}

終わりに

以上の関係を踏まえると、

minSdkVersion <= targetSdkVersion <= compileSdkVersion <= buildToolsVersion

ということになる?

90
64
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
90
64