Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

なんとなく動けばとりあえず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

終わりに

まだまだわかっていないことやバージョンが多いので、随時調べ更新していきたいです。
詳しい方や詳しいページなどがありましたら教えくてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした