Gradleを使って構築するために documentation を見てきましたが、compileSdkVersion
とtargetSdkVersion
の違いが何なのかまだわかりません。
それが言うのはすべてです:
compileSdkVersion
プロパティはコンパイルターゲットを指定します。
さて、「コンパイル対象」とは何ですか?
これを解釈する方法は2つ考えられます。
compileSdkVersion
はアプリのビルドに使用されたコンパイラのバージョンですが、targetSdkVersion
は "アプリケーションがターゲットとするAPIレベル" です。 (もしそうなら、私はcompileSdkVersion
はtargetSdkVersion
以上でなければならないと思いますか?この質問 は以前に質問されたことがありますが、1つの答えはドキュメントを引用しているだけなので、私にはわかりません。
compileSdkVersion
は、アプリケーションがコンパイルされているAPIのバージョンです。つまり、そのバージョンのAPIに含まれているAndroid API機能(および以前のすべてのバージョン)を使用できます。 API 16の機能を使用してcompileSdkVersion
を15に設定しようとすると、コンパイルエラーが発生します。 compileSdkVersion
を16に設定した場合でも、アプリの実行パスがAPI 16に固有のAPIを呼び出そうとしない限り、API 15デバイス上でアプリを実行できます。
targetSdkVersion
は、アプリケーションのコンパイル方法や利用できるAPIとは関係ありません。 targetSdkVersion
は、あなたがあなたのアプリをあなたが指定したバージョンでテストしたことを示していると思われます。これは、認証やサインオフのようなもので、AndroidのOSをOSの機能の観点からどのように扱うべきかについてのヒントとしてAndroid OSを提供しています。
例えば、 のように
たとえば、この値を「11」以上に設定すると、Android 3.0以上で実行しているときに、システムが新しいデフォルトテーマ(Holo)をアプリに適用できます。
Android OS、 実行時 は、この値に基づいて、OSのコンテキストでアプリケーションのスタイルを設定したり実行したりする方法を変更することがあります。この値によって影響を受ける他のいくつかの既知の例があり、そのリストは時間が経つにつれて増加する可能性があります。
すべての実用的な目的のために、ほとんどのアプリはtargetSdkVersion
を最新リリース版のAPIに設定したいと考えています。これにより、最新のAndroidデバイスであなたのアプリができるだけ良く見えるようになります。 targetSdkVersion
を指定しないと、デフォルトのminSdkVersion
になります。
onelinerガイドとして:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
理想的には:
minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)
compileSdkVersion
は最新の安定版です。 targetSdkVersion
は完全にテストされ、compileSdkVersion
以下でなければなりません。
compileSdkVersion
はアプリがテストされたバージョンを示すのに対し、targetSdkVersion
はアプリがコンパイルされるAPIのバージョンです。
これらの答えを以下のメモで補足します。
targetSdkVersion
はパーミッションの要求方法に影響します :
targetSdkVersion
が23以上である場合、アプリは実行時にユーザーに権限を要求します。targetSdkVersion
が22以下の場合、システムはユーザーがアプリをインストールするときにアクセス許可を付与するようにユーザーに求めます。compileSdkVersion
がアプリケーションのtargetSdkVersion
で宣言されているバージョンよりも高い場合、システムは互換性動作を有効にして、アプリケーションが期待どおりに機能し続けることを保証します。 ( ref )
それぞれの新しいAndroidのリリースでは...
targetSdkVersion
をインクリメントしてから、対応するプラットフォームバージョンでアプリケーションを徹底的にテストする必要があります。compileSdkVersion
は、新しいプラットフォームバージョン専用の機能を追加しない限り、変更する必要はありません。targetSdkVersion
は(当初)compileSdkVersion
より少ないことが多くありますが、targetSdkVersion > compileSdkVersion
を使用して手入れの行き届いた確立されたアプリを見ることは珍しいことではありません。The CompileSdkVersion
は、あなたのアプリケーションがコンパイルなどのために動作するSDKプラットフォームのバージョンです(開発プロセス中は常に最新のものを使用するべきです)。
これはbuild.gradle
ファイルにあります。
targetSdkVersion:
には、開発プロセスからTARGET the SPECIFIED version of the Android platform
を可能にするアプリケーションストアまでの間に、アプリに付属する情報が含まれています。アプリの機能によっては、現在のバージョンより低いAPIバージョンをターゲットにすることができます。インスタンスの場合、現在のバージョンが23であってもAPI 18をターゲットにできます。
この公式のGoogle ページ をよく見てください。
前回の回答では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機能を使用することはできません。
私の2セント:SDKのどのバージョンに対してもコンパイルしますが、あなたの「最小SDKバージョン」がサポートしていないAPIを呼び出さないように注意してください。つまり、最新バージョンのSDKに対して "コンパイル"できるということです。
「ターゲットバージョン」に関しては、それは単にあなたが最初にターゲットにすることを計画し、そしておそらくそれに対してテストしたものを指す。あなたがデューデリジェンスをしていないのであれば、これはそれがそれを展開する前にいくつかの追加のチェックを実行する必要があることをAndroidに知らせる方法です。
したがって、「ターゲットバージョン」は明らかに「最小SDKバージョン」より低くはありませんが、「コンパイル済みバージョン」より高くすることはできません。
compileSdkVersion ==>どのバージョンのSDKがあなたの code を bytecode にコンパイルすべきか(それは開発環境で使う)要:それは最後のバージョンのSDKを使うほうがよい。
minSdkVersion ==>これらの項目はAPKのインストールに使用します(本番環境で使用します)。例えば:
if(client-sdk-version < min-sdk-versoin )
client-can-not-install-apk;
else
client-can-install-apk;
簡単な要約:
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リリースで実行しないようにアプリを制限したくないため、これを設定しないことです。