2013-06-12 19 views
0

我正在開發一個Android庫,我想盡可能多地支持API版本。我偶然發現了AsyncTask的一個問題,並在SO上發現了一個answer。建議的代碼使用方法是:如何支持儘可能低的API版本?

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { 
    task.execute(params); 
} else { 
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 
} 

我的問題是,我該如何把擬議的代碼和支持最低的API級別?我應該參考哪些API版本?我應該在uses-sdk標籤中寫入什麼內容?

由於AsyncTask中的字段THREAD_POOL_EXECUTOR只能從API級別11獲得。此代碼是否可以編譯爲較低級別?

謝謝!

回答

3

假設你線下存在於你表現

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/> 

這意味着,您使用的API-17功能但爲了確保向後兼容,您的應用程序可以從最低的API-8(Froyo)開始。

根據您的示例,對API-17或更低版​​本使用THREAD_POOL_EXECUTOR即可。並且使用Froyo設備運行代碼也可以。因爲在這種情況下不會使用THREAD_POOL_EXECUTOR字段。

+0

很好的解釋! –

1

除非您可以找到一個可在提供THREAD_POOL_EXECUTOR實現的較早API級別上工作的庫,否則必須使用API​​級別11或更高級別。此外,請檢查Google是否提供了允許此API在API 11之前工作的任何後端或支持庫。

3

在清單集android:minSdkVersion="minimumApiYouNeed"中,這是您希望支持的最低api以及android:targetSdkVersion="maximumApi"。這是將用於編譯代碼的api。通過這種方式,你將能夠完成像你在那裏寫的東西,如果你寫了一些不受最低api支持的東西,編輯會通知你,但如果你檢查它會很好地工作,它會工作得很好

+0

targetSdkVersion沒有指定構建SDK。它在項目的屬性文件中指定。 – laalto

+0

是的,真的:),我忘了那 – bogdan

0

這支持Android回到2.1(sdk版本7),但是針對sdk版本17(HoneyComb)編譯代碼。當然,您必須將該標籤添加到清單中。

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

你project.properties應該包括這樣一行:

# Project target. 
target=Google Inc.:Google APIs:17 
+0

targetSdkVersion沒有指定構建SDK。它在項目的屬性文件中指定。 – laalto

+0

@laalto你說的對,先生 – mdelolmo