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


525

私が見てきたドキュメントのGradleを構築するため、私はまだわからないの違いは何だcompileSdkVersionとはtargetSdkVersionあります。

それが言うすべては:

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

さて、「コンパイル対象」とは?

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

  1. compileSdkVersionはアプリのビルドに使用されるコンパイラのバージョンでtargetSdkVersionあり、「アプリケーションが対象とするAPIレベル」です。(これが当てはまった場合、私compileSdkVersiontargetSdkVersion?以上でなければならないことを想定しますか?
  2. 彼らは同じことを意味します。"コンパイルターゲット" == "アプリケーションがターゲットとするAPIレベル"
  3. 他に何か?

この質問は以前に尋ねられたことがわかりますが、1つの回答はドキュメントを引用するだけであり、これは私には不明確です。



2
targetSdkVersionは、デバイスが実行しているものです。したがって、デバイスがOreoよりも低い速度で実行されている場合は、27をターゲットにしないでください
。– IgorGanapolsky

回答:


546

compileSdkVersion

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

targetSdkVersion

targetSdkVersionあなたが利用することができますどのようにあなたのアプリケーションがコンパイルされているか、どのようなAPIとは何の関係もありません。targetSdkVersion指定したバージョン(おそらくまでを含む)上のアプリケーションをテストしたことを示すことになっています。これは、OSの機能に関してアプリをどのように処理するべきかについてのヒントとしてAndroid OSを与えている認定または承認のようなものです。

たとえば、ドキュメントには次のように記載さています

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

Android OSは、実行時に、この値に基づいて、アプリのスタイルやOSのコンテキストでの実行方法を変更する場合があります。この値の影響を受ける他のいくつかの既知の例があり、そのリストは時間の経過とともに増加するだけです。

すべての実用的な目的のために、ほとんどのアプリはtargetSdkVersionAPIの最新リリースバージョンに設定する必要があります。これにより、最新のAndroidデバイスでアプリが可能な限り美しく表示されます。を指定しない場合targetSdkVersion、デフォルトでになりminSdkVersionます。


14
いいえ、targetSdkVersion可能性が高くcompileSdkVersion、当然のように高くなります。つまり、たとえばAPI 16をターゲットとするアプリを設計したとしても、API 21(Lollipop)targetSdkVersionでは問題なく動作するため、21にバンプして、Android OSがLollipopスタイルを適用してもよいことを示す必要があります。アプリに存在します。
Jeff Mixon、2014年

24
基本的に、コンパイルしたSDKよりも高いSDKをどのようにターゲットにすることができるかわかりません。
coder123 2014年

55
compileSdkVersionより高いバージョンに変更することは、その特定のリリースにのみ含まれるいくつかの新しいAPIを使用することを意味します。アプリでLollipop固有の機能を使用する予定がない場合は、(通常は)compileSdkVersion21に設定する理由はありません。ただし、アプリはAPI 21でそのまま正常に実行される可能性が高いため、API 21で期待どおり(ターゲット)にtargetSdkVersionアプリが実行されることを示しますが、21(コンパイル)に固有のAPIを使用していないためcompileSdkVersion、この例では15のままにしておくことができます。
Jeff Mixon、2014年

19
Androidスタジオで警告メッセージが表示されます。「compileSdkVersion 17」と「targetSdkVersion 22」がありますが、「targetSdkVersionはcompileSdkVersionよりも高くしてはいけません」と表示されます。ああ、それを変更しただけで、targetSdkVersionが最新の22ではなく、互換性モードが作動する可能性があることがわかりました。ため息。
Pelpotronic 2015

18
この答えは、Android Studioの発言と矛盾します。targetSdkVersionが重要であり、compileSdkVersion以下である必要があります
ARK

152

ワンライナーガイドとして:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

理想的には:

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

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


minSdkVersion な手段最低のデバイスAPIレベルのアプリがcan上で実行しますか?おそらくそれminSdkVersion以降から利用可能な特定のAPIを使用しているためでしょうか?
Nitin Bansal 2018

1
@NitinBansalはい。たとえば、minSdkVersionが15(ICS 4.0.3)の場合、API 14(ICS 4.0)のデバイスはアプリをインストールできません。そして、少なくとも今のところ、アプリは15、16、17、18、19(20ですが、これは古いウェアOSの場合です)、21、22、23、24、25、26、27、28などで実行されます。将来的に(おそらく)
Louis Tsai

33

compileSdkVersion最新の安定版である必要があります。targetSdkVersion完全にテストされ、少ないかと同じでなければなりません compileSdkVersion


14
targetSdkVersionがcompileSdkVersionよりも小さいと言う具体的な理由は?私はそれが間違った発言だと信じています
スーフィアン

6
ポイントは、最後のバージョンは下位互換性があるため、最新のAPIバージョンは、古いバージョンに設定するtargetSdkVersionと、古いバージョンと同じように「動作」できることです。したがって、targetSdkVersionはテストして正確な動作を知っている必要があり、最新の安定版とすることができます。
Dielson販売2015

compileSdkVersion最新の安定版である必要があります」という文には、「API機能を使用する」という接尾辞を付ける必要があると思います。APIバージョンの低い機能のみを使用する場合は、API 27(今日の最新の安定したAPI)に対してコンパイルしても意味がありません。ただし、最新の安定バージョンには、セキュリティの強化や下位互換性を備えた効率的なコンパイルなど、自動的に改善されるいくつかの機能が含まれる可能性があります。したがって、最新または少なくとも最新の安定したバージョンを使用することをお勧めしますが、それ自体が最新バージョンである必要があります。
エリック

27

ゲームに遅れて..上記のいくつかの素晴らしい答えがあります-基本的に、compileSdkVersionはアプリがコンパイルされたAPI targetSdkVersionのバージョンであり、はアプリがテストされたバージョンを示します。

これらの回答を以下のメモで補足したいと思います。

  1. これtargetSdkVersionは、権限が要求される方法に影響します。

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

  3. Androidの新しいリリースごとに...

    • targetSdkVersion 最新のAPIレベルに一致するように増分し、対応するプラットフォームバージョンでアプリケーションを完全にテストする必要があります
    • compileSdkVersion一方、新しいプラットフォームバージョン専用の機能を追加するのでない限り、変更する必要はありません。
    • その結果、targetSdkVersion多くの場合(最初は)よりも小さいですが、compileSdkVersion十分に保守され、確立されたアプリを表示することは珍しいことではありませんtargetSdkVersion > compileSdkVersion

5
再:あなたの2番目のポイント、私はリファレンスドキュメントがそれを明示的に言っているとは思いません。「ただし、プラットフォームのAPIレベルがアプリのtargetSdkVersionで宣言されたバージョンよりも高い場合、システムは互換性動作を有効にして、アプリが期待どおりに動作し続けることを保証する場合があります。」これは、実行しているデバイスのAPIレベルが、targetSdkVersion互換性の動作が見られるよりも新しい場合に意味があると思います。とは関係ないと思いますcompileSdkVersion
ジェレミー

20

The CompileSdkVersion コンパイルなどのためにアプリが動作するSDKプラットフォームのバージョンです(開発プロセス中は常に最新のものを使用する必要があります)これは、使用しているAPIバージョンに同梱されています

ここに画像の説明を入力してください

これはbuild.gradleファイルに表示されます。

ここに画像の説明を入力してください

targetSdkVersion:アプリストアへの開発プロセスの後、それを可能にするアプリに同梱されている情報が含まれていますTARGET the SPECIFIED version of the Android platform。アプリの機能によっては、現在よりも古いAPIバージョンをターゲットにすることができます。たとえば、現在のバージョンが23であっても、API 18をターゲットにすることができます。

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


9

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

A-Androidの発言

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

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

したがって、これはAndroidによると正しい順序になります。

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B-他の人も言う

一部の人々は常に利用可能な最高のcompiledSkdVersionを使用することを好みます。これは、minSdkVersionよりも新しいAPI機能を使用しているかどうかを確認するためにコードヒントに依存するため、コードを変更して使用しないか、実行時にユーザーAPIバージョンを確認して、古いAPIバージョンのフォールバックで条件付きで使用するためです。

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

したがって、これは他の人によると正しい順序になります:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

何をすべきか?

それはあなたとあなたのアプリに依存します。

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

新機能や新機能が既にわかっていて、更新されないことが確実な1回限りのアプリを開発している場合、または条件付きで新しいAPI機能を提供しないことが確実な場合は、オプションAを使用してください。廃止されたヒントを使用して、たとえそれを実行したくても、新しいAPI機能を使用することはできません。


2
Androidのアドバイスが違うとは思いません。「アプリケーションできるだけ低いバージョンでコンパイルする」と、特定のSDKバージョンでコンパイルすることには違いがあります。通常、最新バージョンでコンパイル(compileSdkVersion)し、min(minSdkVersion)をできるだけ低く設定し、テスト(またはその他の互換性の問題)を考慮して、ターゲット(targetSdkVersion)をできるだけ高く設定する必要があります。
Caltor 2017

良い点@Caltor。そのドキュメントを更新して違いを明確にしてほしい。<uses-sdk>ドキュメントには、非常に曖昧かつ曖昧です。
ジェレミー

2

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

「対象バージョン」については、最初に対象とする予定であり、テストした可能性のあるものを指します。デューデリジェンスを行っていない場合、これはAndroidに、「Leo」のターゲットアプリ「Oreo」をデプロイする前に、追加のチェックを実行する必要があることを通知する方法です。

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


1

詳細な回答の多くは、すでに存在しているので、自分の直接の質問に答えるが、それは言及する価値がある、Androidのドキュメントのそれとは反対に、Androidのメーカーがために、同じバージョンを使用することが示唆されていることではないcompileSDKVersiontargetSDKVersion

ここに画像の説明を入力してください


0

compiledSdkVersion ==>どのバージョンのSDKがコードバイトコードにコンパイルする必要があるか(開発環境で使用)ポイント:SDKの最後のバージョンを使用する方が良いです。

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

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

0

簡単な要約:

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

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

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.