2017-08-10 73 views
1

我是一位使用Eclipse的有經驗的Android開發人員,但有一件事仍令我感到困惑。即SDK版本規範。特別是,我找到在哪裏SDK版本定義了幾個地方:Eclipse中的SDK版本規範

  1. 項目屬性:安卓:項目建設目標
  2. 清單:的minSdkVersion
  3. 清單:targetSdkVersion
  4. 清單:maxSdkVersion

下面是我對使用的猜測(可能是錯誤的):

項目屬性:項目構建類型
好的,看起來相當簡單。我相信這指定了要使用的API「庫」。

清單:的minSdkVersion
我的猜測是,這是最小電平(如上所述),用於檢查所使用的方法。好吧,但似乎多餘。如果我使用了不受支持的方法,編譯器會不會吠叫我?

清單:targetSdkVersion
無法找出這一個。如果我只調用支持的方法,那麼此設置還有什麼作用?

清單:maxSdkVersion
更神祕。爲什麼你會想限制最大版本?它們不向後兼容嗎?

官方文檔在這些設置的功能上相當稀疏。任何人都可以給我一些見解嗎?

+0

看到這篇文章:https://medium.com/google-developers/picking-your-compilesdkversion-minsdkversion-targetsdkversion-a098a0341ebd –

回答

1

安卓:項目建設目標

當你選擇一個項目構建目標版本就意味着你是APK或者類將根據選擇的SDK進行編譯。例如,如果您選擇了項目構建目標16並嘗試使用註釋@JavaScriptInterface,它將無法找到,因爲此註釋在該目標上方可用。

清單:的minSdkVersion

如果你定義的最低SDK版本,誰使用低於規定的最低SDK版本的Android用戶不能使用你的應用程序。

對於從谷歌文檔的詳細信息:

的整數指定爲 應用程序運行所需的最低API級別。如果系統的API級別低於此屬性中指定的值 ,Android系統將阻止用戶從 安裝應用程序。您應該始終聲明此 屬性。

清單:targetSdkVersion

targetSdkVersion有無關,與你的應用程序是如何編譯,或者你可以利用哪些API。 targetSdkVersion應該表明您已經測試了您的應用程序(可能達到幷包括)您指定的版本。這更像是一個認證或簽名,您將Android操作系統作爲提示,告訴您應該如何根據操作系統功能處理您的應用。

例如,文檔指出:

例如,將該值設置爲「11」或更高版本允許在Android上運行時,系統 應用新的默認主題(全息)到您的應用程序 3.0或更高版本...

Android操作系統,在運行時,可能會改變您的應用程序是如何程式化或基於此值操作系統的情況下,否則執行。還有一些其他已知的例子會受到這個值的影響,而且這個列表可能只會隨着時間的推移而增加。

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

清單:maxSdkVersion

如果你定義誰正在使用運行SDK版本比你maxSdkVersion定義不能使用你的應用程序更重要的是Android手機用戶maxSdkVersion

對於從谷歌文檔的詳細信息:

在其清單宣佈maxSdkVersion = 「5」 的應用程序 在谷歌Play發佈。其設備運行Android 1.6 (API Level 4)的用戶下載並安裝該應用程序。幾周後, 用戶將接收到Android 2.0(API級別 5)的無線系統更新。安裝更新後,系統會檢查應用程序的 maxSdkVersion併成功重新驗證它。應用程序 功能正常。但是,稍後,該設備會收到另一個系統更新 ,這次是Android 2.0.1(API Level 6)。在 更新之後,系統不能再重新驗證應用程序 ,因爲系統自己的API級別(6)現在高於應用程序(5)支持的最大值 。系統防止應用程序 對用戶可見,實際上將其從設備中移除。

+0

非常完整的答案。其他答案也很棒,但我只能接受一個。 – DontPanic

0

項目屬性:項目構建類型 - 是的,這會選擇android.jar和構建工具版本。

清單:minSdkVersion - 這不僅僅是爲了編譯的目的,而且還被google play用來過濾應用程序。其次,如果您有任何功能在特定版本下不可用,但您的應用程序需要。

清單:targetSdkVersion - 隨着Android隨着每個新版本的發展,一些行爲甚至外觀可能會改變。但是,如果平臺的API級別高於應用程序的targetSdkVersion聲明的版本,系統可能會啓用兼容性行爲以確保您的應用程序繼續按照您的預期方式工作。您可以通過指定targetSdkVersion來匹配它所運行的平臺的API級別來禁用這種兼容性行爲。例如,將此值設置爲「11」或更高時,系統可以在Android 3.0或更高版本上運行時將新的默認主題(Holo)應用於您的應用程序,並且在大屏幕上運行時禁用屏幕兼容模式(因爲支持API 11級隱式支持更大的屏幕)。

清單:maxSdkVersion - 不推薦。這將限制你的應用程序到任何高於指定的maxSdkVersion的版本。

在Android 1.5,1.6,2.0和2.0.1中,系統在安裝應用程序時以及在系統更新後重新驗證應用程序時檢查此屬性的值。 但是,未來版本的Android(超越Android 2.0.1)將不再在安裝或重新驗證過程中檢查或強制執行maxSdkVersion屬性

無需將該屬性設置爲阻止應用程序部署的方式新版本的Android平臺發佈。按照設計,新版本的平臺完全向後兼容。您的應用程序應該在新版本上正常工作,前提是它只使用標準API並遵循開發最佳實踐。其次,請注意,在某些情況下,聲明該屬性可能導致您的應用程序在系統更新到更高API級別後從用戶設備中刪除。安裝應用程序的大多數設備都將定期收到系統更新,因此您應在設置此屬性之前考慮它們對應用程序的影響。

https://developer.android.com/guide/topics/manifest/uses-sdk-element.html涵蓋了全部