Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
233
Help us understand the problem. What is going on with this article?
@takahirom

基本をおさえる!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

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

終わりに

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

233
Help us understand the problem. What is going on with this article?
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
takahirom
Google Developers Expert for Android
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
233
Help us understand the problem. What is going on with this article?