簡體   English   中英

compileSdkVersion 和 targetSdkVersion 有什么區別?

[英]What is the difference between compileSdkVersion and targetSdkVersion?

我已經查看了使用 Gradle 構建的文檔,但我仍然不確定compileSdkVersiontargetSdkVersion之間的區別是什么。

它所說的只是:

compileSdkVersion屬性指定編譯目標。

那么,“編譯目標”是什么?

我看到了兩種可能的解釋方式:

  1. compileSdkVersion是用於構建應用程序的編譯器版本,而targetSdkVersion“應用程序目標的 API 級別” (如果是這種情況,我認為compileSdkVersion必須大於或等於targetSdkVersion
  2. 他們的意思是一樣的。 “編譯目標” == “應用程序目標的 API 級別”
  3. 還有什么?

我看到之前有人問過這個問題,但一個答案只是引用了文檔,這對我來說還不清楚。

編譯SDK版本

compileSdkVersion是應用編譯所針對的 API 版本。 這意味着您可以使用該 API 版本中包含的 Android API 功能(顯然也可以使用所有以前的版本)。 如果您嘗試使用 API 16 功能但將compileSdkVersion設置為 15,則會出現編譯錯誤。 如果您將compileSdkVersion設置為 16,只要您的應用程序的執行路徑不嘗試調用任何特定於 API 16 的 API,您仍然可以在 API 15 設備上運行該應用程序。

目標SDK版本

targetSdkVersion與您的應用程序的編譯方式或您可以使用的 API 無關。 targetSdkVersion應該表明您已經在您指定的版本上(大概直到並包括)測試了您的應用程序。 這更像是一種認證或簽署,您向 Android 操作系統提供了一個關於它應該如何在操作系統功能方面處理您的應用程序的提示。

例如,正如文檔所述:

例如,將此值設置為“11”或更高允許系統在 Android 3.0 或更高版本上運行時將新的默認主題 (Holo) 應用於您的應用...

在運行時,Android 操作系統可能會根據此值更改您的應用程序在操作系統上下文中的風格化或以其他方式執行的方式。 還有一些其他已知示例受此值影響,並且該列表可能只會隨着時間的推移而增加。

出於所有實際目的,大多數應用程序都希望將targetSdkVersion設置為最新發布的 API 版本。 這將確保您的應用在最新的 Android 設備上看起來盡可能好。 如果不指定targetSdkVersion ,則默認為minSdkVersion

作為單行指南:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

理想情況下:

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

從 Ian Lake 的這篇精彩文章中閱讀更多內容

游戲晚了……上面有幾個很好的答案——本質上, compileSdkVersion是應用程序編譯所針對的 API 的版本,而targetSdkVersion表示應用程序測試所針對的版本。

我想用以下注釋補充這些答案:

  1. targetSdkVersion影響請求權限的方式
  • 如果設備運行的是 Android 6.0(API 級別 23)或更高版本,並且應用程序的targetSdkVersion為 23 或更高版本,則應用程序會在運行時向用戶請求權限。
  • 如果設備運行的是Android 5.1(API級別22)更低版本,或者應用的targetSdkVersion為22或更低,系統會在用戶安裝應用時要求用戶授予權限。
  1. 如果compileSdkVersion高於您應用的targetSdkVersion聲明的版本,系統可能會啟用兼容性行為以確保您的應用繼續按您期望的方式工作。 參考

  2. 隨着每個新的 Android 版本...

  • targetSdkVersion應該遞增以匹配最新的 API 級別,然后在相應的平台版本上徹底測試您的應用程序
  • 另一方面, compileSdkVersion不需要更改,除非您要添加新平台版本獨有的功能
  • 因此,雖然targetSdkVersion通常(最初)小於compileSdkVersion ,但使用targetSdkVersion > compileSdkVersion看到維護良好/建立良好的應用程序並不少見

compileSdkVersion應該是最新的穩定版本。 targetSdkVersion應該經過全面測試並且小於或等於compileSdkVersion

The CompileSdkVersion是您的應用程序在開發過程中用於編譯等的 SDK 平台的版本(您應該始終使用最新版本)這與您正在使用的 API 版本一起提供

在此處輸入圖片說明

您將在build.gradle文件中看到:

在此處輸入圖片說明

targetSdkVersion:包含您的應用程序在開發過程到應用程序商店后隨附的信息,該信息允許它以TARGET the SPECIFIED version of the Android platformTARGET the SPECIFIED version of the Android platform 根據您的應用程序的功能,它可以針對低於當前版本的 API。例如,即使當前版本是 23,您也可以針對 API 18。

好好看看這個官方谷歌頁面

我在之前的答案中看到了關於compiledSdkVersion的很多差異,所以我會嘗試在這里澄清一下,遵循android 的網頁。

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。您將在編碼時獲得有關您使用的功能的提示。 只要確保你永遠不會使用比 minSdkVersion 更新的 API 功能而不在運行時檢查用戶 API 級別,否則你的應用程序將崩潰。 這種方法還具有在編碼時學習新事物和舊事物的好處。

如果您已經知道什么是新的或舊的,並且您正在開發一個肯定永遠不會更新的一次性應用程序,或者您確定您不會有條件地提供新的 API 功能,那么使用選項 A。您不會被打擾使用已棄用的提示,即使您很想這樣做,您也永遠無法使用更新的 API 功能。

我的 2 美分:針對任何版本的 SDK 進行編譯,但注意不要調用您的“最低 SDK 版本”不支持的任何 API。 這意味着您“可以”針對最新版本的 SDK 進行編譯。

至於“目標版本”,它只是指您最初計划的目標並且可能已經進行了測試。 如果您還沒有進行盡職調查,那么這是通知 Android 它需要執行一些額外檢查的方法,然后才能在“Oreo”上部署您的“Lollipop”目標應用程序。

所以“目標版本”顯然不低於你的“最低SDK版本”,但不能高於你的“編譯版本”。

不直接回答你的問題,因為已經有很多詳細的答案,但值得一提的是,與 Android 文檔相反,Android Studio 建議對compileSDKVersiontargetSDKVersion使用相同的版本。

在此處輸入圖片說明

compiledSdkVersion ==> 哪個版本的 SDK 應該將您的代碼編譯為字節碼(它在開發環境中使用)要點:最好使用最新版本的 SDK。

minSdkVersion ==> 這些項目用於安裝 APK(在生產環境中使用)。 例如:

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

Visual Studio 2017 (15.8.5) 中 Android 項目屬性的應用程序設置將它們組合在一起:

在此處輸入圖片說明

快速總結:

對於 minSDKversion,請參閱 Twitter 句柄中的最新條目: https ://twitter.com/minSdkVersion

TargetSDKversion:查看 Twitter 句柄中的最新條目: https ://twitter.com/targtSdkVersion 或使用 devel https://developer.android.com/guide/topics/manifest/uses-sdk-element 中指示的最新 API 級別。 html

編譯版本:與TargetSDKversion相同

maxSdkVersion:來自 Android 的建議是不要設置它,因為您不想限制您的應用程序在未來的 android 版本上不執行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM