1

我們有一個適用於Android的SDK,需要Support Library v4和targetSdk 23(意思是支持庫也應該是23)。由於商業原因,我必須升級SDK,因此即使應用程序編譯爲API 21,它也應該可以工作。如何在運行時檢查Support Library/AppCompat庫版本?

這意味着某些對支持庫的調用應根據當前支持庫版本應用程序(不是當前API級別),所以我這裏有3個選項(按排名最好到最差):

1 - 該方法調用之前檢查支持庫的版本(這是我還沒有想出如何(如果可能的話))。
2 - 使用反射。
3 - 使用Try Catch塊。

因此對於第一個選項,是否可以在運行時檢查支持庫版本?

+0

支持庫不公開任何用於獲取版本信息的API,並且一般來說,不支持您試圖完成的任務。如果您使用的是targetSdk 23,那麼也沒有理由需要使用支持庫的v23。 – alanv

+0

@alanv此代碼適用於SDK,不適用於更改規則的應用程序。如果您有AppCompatV4修訂版21或修訂版23,則應該運行此代碼。有些方法在修訂版21中不可用,因爲它們是在修訂版23中引入的,所以我需要確保代碼運行時避開哪個版本崩潰。 – tomacco

回答

1

我會回答我的問題與我最終選擇的辦法:

這是不可能在運行時檢查支持庫/程序兼容性庫修訂。
通常,您已經知道要使用哪個版本的支持庫/ AppCompat庫版本,因爲它在應用程序依賴項中明確聲明。 - 檢查方法可用性

1:然而,由於在這種情況下的SDK代碼應該(或至少一個最小版本的庫),一些不同的事情是在爲了解決上述問題完成的任何條件下運行使用Java反射。
2 - 使用反射和try-catch塊的調用方法(以確保App穩定性)
3 - 使用catch塊提供的信息確定AppCompat版本。
4 - 隨後的調用不使用反射,因爲方法的存在已被檢查,並且已經找到最小版本。