Edited at

基本をおさえる!Androidアプリで指定するバージョンについて(compileSdk,buildToolsVersion,....)

なんとなく動けばとりあえずOKみたいな感じでいつも何とかしてしまうことが多いです

ですが、基本的なことですし、ちゃんと理解したいです。

バージョンを上げてトラブルにあったときも、どこを見ればいいのかなどがわかりやすいはず!

間違っているところや補足などがあったらコメントお願いします。

ぱっと並べるだけでこれぐらいありますね



  • モジュールのbuild.gradle(app/build.gradle)


    • compileSdkVersion 22

    • buildToolsVersion "19.1.0"

    • minSdkVersion 14
      targetSdkVersion 22




  • プロジェクトルートのbuild.gradle


    • classpath 'com.android.tools.build:gradle:1.3.0'




  • gradle/wrapper/gradle-wrapper.propertiesのdistributionUrl


    • distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip




compileSdkVersion

例:compileSdkVersion 22

コンパイル時に使うAndroid SDKのバージョンです。実際に実装として使われるのは端末内にある実装です。

そのバージョンにないメソッドを使おうとするとビルドできなかったりします。

例えば

compileSdkVersion 19

にして、Lollipop(API Level 21)のメソッドを使おうとすると以下のようにエラーが出てビルドできません

image

ちなみにcompileSdkVersionは、SDK ManagerでそのバージョンのSDK Platformがインストールされている必要があります

image


buildToolsVersion

例:buildToolsVersion "19.1.0"

aapt, dex, jarsignerなどのコンパイラのバージョンで、これが低いとmultidexなどの機能が利用できないなどがあるようです。(未検証)

image

ここのバージョンと対応するようです

image

https://developer.android.com/tools/revisions/build-tools.html


minSdkVersion

例:minSdkVersion 14

このアプリをインストールできる最低のAPIレベルを指定します。

ここで14を指定していた場合、APIレベル10のAndorid 2.3の端末の場合Google Playからアプリをインストールして起動する事はできません。


maxSdkVersion

例:maxSdkVersion 22

minSdkの上限が決まっている版です。

端末にアプリがインストールしている状態で端末がOSアップデートすると自動でアンインストールされるみたいな話を聞きました(未検証)


targetSdkVersion

例:targetSdkVersion 22

一番ちゃんと動く対象の端末を指定するようです。

以下の様な動きになるようです。(テーマにはandroid:Themeを指定)

targetSdk < 端末のAPIレベル
targetSdk > 端末のAPIレベル

targetSdkVersionバージョンのテーマを使う
端末のAPIレベルのテーマを使う

またメニューキーが表示されたりなどします。

Androidの内部のコードでif文などで利用しているだけのようです。

詳細はこちらで、、

targetSdkVersionでUIが切り替わる理由

targetSdkVersion 8に設定した4.4.4端末の動きです。古いUIになっていることがわかると思います。

image


Android Gradle Pluginのバージョン

例 /build.gradle

    dependencies {

classpath 'com.android.tools.build:gradle:1.3.0-beta4'
}

/app/build.gradle 以下の記述で適用しています。

apply plugin: 'com.android.application'

GradleというビルドシステムのAndroid用のプラグインとなっており、Gradleがこのプラグインを利用して、プラグインがbuildToolsやcompileSdkを利用してビルドを行うようになっているようです。

最近のバージョンだとDataBindingも含まれるようになったようです。

ProductFlavorsとかもこのプラグインの機能だと思います。

ここで指定するバージョンはここから選べるようです

https://jcenter.bintray.com/com/android/tools/build/gradle/


Gradleのバージョン

Gradleというビルドシステムにもバージョンがありそのバージョンの指定となります。

例 gradle/wrapper/gradle-wrapper.propertiesのdistributionUrl

distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip


終わりに

まだまだわかっていないことやバージョンが多いので、随時調べ更新していきたいです。

詳しい方や詳しいページなどがありましたら教えくてください。