2014-12-02 80 views
-1

最低版本。當我想創建一個Android應用程序,可以使用Android的最新支持的功能,我使用像庫:確定支持庫

appcompat_v7 
support_v4 

我一直無法確定是什麼是appcompat_xxx或支持庫實際可以支持的Android的最早版本。我在哪裏可以找到這些信息?

回答

2

這一切都在名稱 - appcompat_v7支持API 7及更高版本,support_v4支持API 4及更高版本。

它也明顯地在文檔每個庫表示,例如:

該庫被設計成與Android 1.6(API級別4) 和更高的使用。

http://developer.android.com/tools/support-library/features.html#v4

而且,雖然這並不總是需要,你應該嘗試你的targetSdkVersion與圖書館的各個版本相匹配。例如,如果您的targetSdkVersion爲19,則應該使用com.android.support:appcompat-v7:19.+

要清楚:支持庫由其名稱規定,旨在支持最低API級別。含義 - 它們可以安全地用於運行該API級別的設備,以及任何後續API級別的設備。如果您嘗試在甜甜圈設備(API級別4)上使用appcompat_v7,或者在Jellybean 4.1設備(API級別16)上使用leanback-v17庫,則您的應用可能會崩潰,類似於ClassNotFoundException

這些庫最初應該提供API級別較舊的API級別的功能,以便您可以編寫幾乎相同的代碼並在單個APK中使用最新的平臺範例,以支持舊設備和新設備。

碎片就是一個很好的例子。 Fragment類是在Honeycomb(API級別11)中引入的。 Google隨後發佈了support_v4庫,其中包含Fragment類的後端移植版本,並且它是相應的API。同樣,由其名稱指定,該庫可以安全地用於支持所有返回API 4的應用程序。如果您在API 3設備上使用v4庫安裝應用程序,它將會崩潰。如果您將其安裝在API 8設備上,它將按預期工作。

也許你會因爲依賴文件名指定min sdk版本而看起來很微妙的本質 - 現在這是一個猜測,但是當第一次引入v4庫時,它只是一個.jar文件。也就是說,無論您使用什麼minSdkVersion,都可以將它添加到應用程序的類路徑中,並且可以在不抱怨的情況下進行編譯。 MY我們猜測谷歌希望使用他們最低的SDK版本明確命名這些庫,以避免開發人員試圖在支持早期API版本的應用中使用它們。除了他們的文檔,這些文檔再次非常明確地回答您的問題,文件名可能是一種風險緩解方法,可以幫助那些不閱讀文檔的開發人員。

快進到2014年,這些庫中的很多或者以.aar文件的形式出現(通過Gradle),或者您需要將它們作爲項目導入。這是因爲這些庫現在包含圖像和主題等資源,無法打包到.jar文件中。此處的一個額外好處是,這允許Google將AndroidManifest.xml包含在指定minSdkVersion的庫中。在編譯時,如果您的minSdkVersion低於任何包含的庫項目中指定的minSdkVersion,則構建工具的清單合併將會投訴。

+0

我看到API級別和文件名中指定的版本號之間沒有明確的關聯,特別是考慮到只有少數這些兼容性文件,而有幾個版本的Android。 – AndroidDev 2014-12-02 18:37:27

+1

咦?不太清楚如何才能錯過「v4」和「API Version 4」之間的相關性......公式是「libraryname_minSdkLevel」,其中minSdkLevel表示給定的庫可以被任何API級別使用,大於或等於指定的。 – 2014-12-02 18:41:55

+0

這是一個相當自由的假設。當Google發佈他們的操作系統的新版本以及更新的支持庫時,基本假設是它支持以前的支持庫所做的所有事情。事實上,如果你試圖包含較新和較新的版本,構建工具只會選擇較新的版本。這清楚地表明新版本支持舊版本。問題依然存在。新版本有多遠?所以你錯了。它不支持特定版本或更高版本。它支持它開發和使用的版本。 – AndroidDev 2014-12-03 14:40:56