compileSdkVersion, minSdkVersionをピックします。 and targetSdkVersion

イアン・レイク

Follow

Jan 6, 2016 – 5 min read

時期によっては、Androidの新バージョンが発表されるのはアプリをリリースしてから数ヶ月後ということもありますね。 ユーザーが Android の新しいバージョンに更新したときに、以前の SDK に対して構築された既存のアプリが壊れないようにするためです。 それぞれ、どの API が利用可能か、必要な API レベルは何か、どの互換性モードが適用されるかを制御します。

compileSdkVersion は、Android SDK のどのバージョンでアプリをコンパイルするかを Gradle に指示する方法です。 新しい Android SDK を使用することは、そのレベルで追加された新しい API のいずれかを使用するための要件です。

強調すべきは、compileSdkVersion を変更しても、実行時の動作は変更されないということです。 compileSdkVersion を変更すると、新しいコンパイラー警告/エラーが表示されるかもしれませんが、compileSdkVersion は APK に含まれません (コンパイル時に純粋に使用されます)。 (これらの警告は本当に修正すべきです – これらは理由のために追加されました!)

したがって、常に最新の SDK でコンパイルすることを強くお勧めします。 既存のコードの新しいコンパイル チェックのすべての利点を得ることができ、新しく廃止された API を回避し、新しい API を使用する準備ができます。

サポート ライブラリを使用する場合、最新の SDK でコンパイルすることは、最新のサポート ライブラリ リリースを使用するための必要条件であることに注意してください。 たとえば、23.1.1 サポート ライブラリを使用するには、compileSdkVersion が 23 以上である必要があります (これらの最初の数字は一致する必要があります!)。 一般に、サポート ライブラリの新バージョンは新しいプラットフォーム バージョンと同時にリリースされ、新しく追加された API や新機能への互換性シムを提供します。

minSdkVersion

compileSdkVersion が使用できる最新の API を設定する場合、minSdkVersion はアプリケーションの下限となります。 minSdkVersion は、Google Play ストアが、ユーザーのデバイスのどれにアプリをインストールできるかを決定するために使用するシグナルの 1 つです。 サポート ライブラリや Google Play サービスなど、使用するライブラリが独自の minSdkVersion を持っている可能性があることに留意してください。 まれに、アプリよりも高いminSdkVersionのライブラリを引き続き使用したい場合(そして、すべてのエッジケースに対処し、ライブラリがより新しいプラットフォームのバージョンでのみ使用されることを保証する)、tools:overrideLibraryマーカーを使用できますが、徹底的にテストすることを確認してください!(訳注:このマーカーを使用した場合、アプリのminSdkVersionが高くなります。

Gradle と SDK のバージョン

したがって、正しい compileSdkVersion、minSdkVersion、および targetSdkVersion を設定することが重要です。 Gradle と Android Studio がある世界で想像できるように、これらの値は、モジュールの build.gradle ファイル (Android Studio のプロジェクト構造オプションからも利用可能) に含めることにより、ツール システムに統合されます:

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.example.checkyourtargetsdk"
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
}

コンパイルSdkVersion は、コンパイル時のもので、構築ツール バージョンと並ぶ Android の設定の 1 つです (誰が予想したでしょう!?)。 他の 2 つは、ビルド バリアント レベルで宣言されるという点で少し異なります。defaultConfig はすべてのビルド バリアントのベースであり、これらのデフォルト値を置く場所ですが、たとえば、アプリの特定のバージョンに異なる minSdkVersion があるなど、より複雑なシステムを想像することができます。

minSdkVersion と targetSdkVersion は、最終的な APK に含まれるという点で compileSdkVersion とは異なります。生成された AndroidManifest.xml を見てみると、次のようなタグがあります:

<uses-sdk android:targetSdkVersion="23" android:minSdkVersion="7" />

これを手動でマニフェストに記述すると、Gradle で構築するときに無視されます (とはいえ、他の構築システムは確かにこの値を頼りにするかもしれません)。

Putting it all together

If you made it through the bolded notes, you can notice a relationship between the three values:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

This intuitively makes sense – if compileSdkVersion is your ‘maximum’ and minSdkVersion is your ‘minimum’ then your maximum must be least as high as your minimum and the target must be somewhere in between the middle of.

理想的には、定常状態ではこのような関係になります。

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

低い minSdkVersion で最大の視聴者にヒットし、最新の SDK でターゲットおよびコンパイルすることで最高の外観と動作を実現します。

Google+ の投稿で議論に参加し、Android Development Patterns Collection をフォローして詳細を確認してください!

コメントを残す

メールアドレスが公開されることはありません。