web-dev-qa-db-ja.com

CompileSdkVersionとtargetSdkVersionの違いは何ですか?

Gradleを使って構築するために documentation を見てきましたが、compileSdkVersiontargetSdkVersionの違いが何なのかまだわかりません。

それが言うのはすべてです:

compileSdkVersionプロパティはコンパイルターゲットを指定します。

さて、「コンパイル対象」とは何ですか?

これを解釈する方法は2つ考えられます。

  1. compileSdkVersionはアプリのビルドに使用されたコンパイラのバージョンですが、targetSdkVersion"アプリケーションがターゲットとするAPIレベル" です。 (もしそうなら、私はcompileSdkVersiontargetSdkVersion以上でなければならないと思いますか?
  2. 彼らは同じことを意味します。 "compilation target" == "アプリケーションがターゲットとするAPIレベル"
  3. 他に何か?

この質問 は以前に質問されたことがありますが、1つの答えはドキュメントを引用しているだけなので、私にはわかりません。

456
coder123

compileSdkVersion

compileSdkVersionは、アプリケーションがコンパイルされているAPIのバージョンです。つまり、そのバージョンのAPIに含まれているAndroid API機能(および以前のすべてのバージョン)を使用できます。 API 16の機能を使用してcompileSdkVersionを15に設定しようとすると、コンパイルエラーが発生します。 compileSdkVersionを16に設定した場合でも、アプリの実行パスがAPI 16に固有のAPIを呼び出そうとしない限り、API 15デバイス上でアプリを実行できます。

targetSdkVersion

targetSdkVersionは、アプリケーションのコンパイル方法や利用できるAPIとは関係ありません。 targetSdkVersionは、あなたがあなたのアプリをあなたが指定したバージョンでテストしたことを示していると思われます。これは、認証やサインオフのようなもので、AndroidのOSをOSの機能の観点からどのように扱うべきかについてのヒントとしてAndroid OSを提供しています。

例えば、 のように

たとえば、この値を「11」以上に設定すると、Android 3.0以上で実行しているときに、システムが新しいデフォルトテーマ(Holo)をアプリに適用できます。

Android OS、 実行時 は、この値に基づいて、OSのコンテキストでアプリケーションのスタイルを設定したり実行したりする方法を変更することがあります。この値によって影響を受ける他のいくつかの既知の例があり、そのリストは時間が経つにつれて増加する可能性があります。

すべての実用的な目的のために、ほとんどのアプリはtargetSdkVersionを最新リリース版のAPIに設定したいと考えています。これにより、最新のAndroidデバイスであなたのアプリができるだけ良く見えるようになります。 targetSdkVersionを指定しないと、デフォルトのminSdkVersionになります。

489
Jeff Mixon

onelinerガイドとして:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

理想的には:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

Ian Lakeによるこの素晴らしい投稿の記事をもっと読む

132
Jimmy Kane

compileSdkVersionは最新の安定版です。 targetSdkVersionは完全にテストされ、compileSdkVersion以下でなければなりません。

29
androidwifi

compileSdkVersionはアプリがテストされたバージョンを示すのに対し、targetSdkVersionはアプリがコンパイルされるAPIのバージョンです。

これらの答えを以下のメモで補足します。

  1. targetSdkVersionはパーミッションの要求方法に影響します

    • デバイスがAndroid 6.0(APIレベル23)以上、 および を実行している場合、アプリのtargetSdkVersionが23以上である場合、アプリは実行時にユーザーに権限を要求します。
    • デバイスがAndroid 5.1(APIレベル22) または lowerを実行している場合、またはアプリのtargetSdkVersionが22以下の場合、システムはユーザーがアプリをインストールするときにアクセス許可を付与するようにユーザーに求めます。
  2. compileSdkVersionがアプリケーションのtargetSdkVersionで宣言されているバージョンよりも高い場合、システムは互換性動作を有効にして、アプリケーションが期待どおりに機能し続けることを保証します。 ( ref

  3. それぞれの新しいAndroidのリリースでは...

    • 最新のAPIレベルに合わせてtargetSdkVersionをインクリメントしてから、対応するプラットフォームバージョンでアプリケーションを徹底的にテストする必要があります。
    • 一方、compileSdkVersionは、新しいプラットフォームバージョン専用の機能を追加しない限り、変更する必要はありません。
    • その結果、targetSdkVersionは(当初)compileSdkVersionより少ないことが多くありますが、targetSdkVersion > compileSdkVersionを使用して手入れの行き届いた確立されたアプリを見ることは珍しいことではありません。
24
Austin D

The CompileSdkVersionは、あなたのアプリケーションがコンパイルなどのために動作するSDKプラットフォームのバージョンです(開発プロセス中は常に最新のものを使用するべきです)。

enter image description here

これはbuild.gradleファイルにあります。

enter image description here

targetSdkVersion:には、開発プロセスからTARGET the SPECIFIED version of the Android platformを可能にするアプリケーションストアまでの間に、アプリに付属する情報が含まれています。アプリの機能によっては、現在のバージョンより低いAPIバージョンをターゲットにすることができます。インスタンスの場合、現在のバージョンが23であってもAPI 18をターゲットにできます。

この公式のGoogle ページ をよく見てください。

18

前回の回答ではcompiledSdkVersionについて多くの違いがありますので、ここではAndroidのWebページに従って少し明確にします。

A - Androidの言っていること

によると https://developer.Android.com/guide/topics/manifest/uses-sdk-element.html

プラットフォームのバージョンとAPIレベルの選択アプリケーションを開発しているときは、アプリケーションをコンパイルするプラットフォームのバージョンを選択する必要があります。 一般的には、アプリケーションがサポートできるプラットフォームの最低限のバージョンに対してアプリケーションをコンパイルする必要があります。

だから、これはAndroidによると正しい順序になります:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - 他の人が言うこともあります

何人かの人々は常に利用可能な最高のコンパイルされたSkdVersionを使うのを好む。これは、minSdkVersionよりも新しいAPI機能を使用しているかどうかをチェックするためにコードヒントに依存するためです。したがって、それらを使用しないようにコードを変更するか.

廃止予定の使用に関するヒントもコードに表示され、新しいAPIレベルでは廃止予定のものがあることがわかりますので、必要に応じてそれに対応することができます。

だから、これは他の人によると正しい順序になります:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

何をすべきか?

それはあなたとあなたのアプリによります。

実行時のユーザーのAPIレベルに従って異なるAPI機能を提供する予定の場合は、オプションBを使用してください。コーディング中に使用する機能についてのヒントが得られます。実行時にユーザーAPIレベルをチェックせずに、minSdkVersionよりも新しいAPI機能を使用しないでください。そうしないと、アプリケーションがクラッシュします。このアプローチには、コーディング中に新機能と新機能を学習するという利点もあります。

新旧を知っていて、確実に更新されないワンタイムアプリを開発している場合、または条件付きで新しいAPI機能を提供する予定がない場合は、オプションAを使用してください。非推奨のヒントを使用すると、たとえあなたがやろうと思っていても、新しいAPI機能を使用することはできません。

7
CGodo

私の2セント:SDKのどのバージョンに対してもコンパイルしますが、あなたの「最小SDKバージョン」がサポートしていないAPIを呼び出さないように注意してください。つまり、最新バージョンのSDKに対して "コンパイル"できるということです。

「ターゲットバージョン」に関しては、それは単にあなたが最初にターゲットにすることを計画し、そしておそらくそれに対してテストしたものを指す。あなたがデューデリジェンスをしていないのであれば、これはそれがそれを展開する前にいくつかの追加のチェックを実行する必要があることをAndroidに知らせる方法です。

したがって、「ターゲットバージョン」は明らかに「最小SDKバージョン」より低くはありませんが、「コンパイル済みバージョン」より高くすることはできません。

2
Prabhu M

直接の質問には答えないでください。すでに詳細な回答はたくさんありますが、Androidのドキュメントとは反対に、Android StudioではcompileSDKVersiontargetSDKVersionに同じバージョンを使用することをお勧めします。

enter image description here

1
sshturma

Visual Studio 2017(15.8.5)のAndroidプロジェクトのプロパティのアプリケーション設定には、それらが組み合わさっているか、または何かがあります。

enter image description here

0
samis

compileSdkVersion ==>どのバージョンのSDKがあなたの code bytecode にコンパイルすべきか(それは開発環境で使う)要:それは最後のバージョンのSDKを使うほうがよい。

minSdkVersion ==>これらの項目はAPKのインストールに使用します(本番環境で使用します)。例えば:

if(client-sdk-version   <   min-sdk-versoin )
    client-can-not-install-apk;
else
    client-can-install-apk;
0
M.Namjo

簡単な要約:

MinSDKversionについては、Twitterハンドルの最新のエントリを参照してください: https://Twitter.com/minSdkVersion

TargetSDKversion:Twitterハンドルの最新のエントリを参照してください: https://Twitter.com/targtSdkVersion またはdevelで示されている最新のAPIレベルを使用します https://developer.Android.com/guide /topics/manifest/uses-sdk-element.html

コンパイル済みバージョン:TargetSDKversionと同じにする

maxSdkVersion:Androidからのアドバイスは、今後のAndroidリリースで実行しないようにアプリを制限したくないため、これを設定しないことです。

0
kush