[英]creating on app for different Android version - available on lower versions with imports only in higher version
我知道以前曾問過這種問題,例如在這里: Android:如何根據API版本進行編碼?
還提到了必須將其編譯到最新的Android級別。 我的基本應用程序版本應從7開始提供,而更高級的版本應從12級開始。
這是否意味着項目的目標設置應該與清單中的min-sdk一樣為12。
但是,只有12級設備可以使用Android市場中的應用嗎? 即使該應用程序應從7開始運行-功能也有限。
同樣在12級中,我將需要導入僅從12開始可用的某些軟件包。因此,我什至無法設置較低的Android目標,否則會出現編譯器錯誤。
因此,總而言之:
非常感謝!
如果我正確閱讀了您的問題,則可以將應用程序安裝在7級級別的設備上
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="12" />
對於開發,您可以將其設置為所需的任何目標,即項目目標可以是SDK 4.0,但清單目標可以是1.5(android:targetSdkVersion =“ 3”),反之亦然。 Eclipse會警告您,但是您可以針對任何目標進行開發,並且只要考慮到后果,就可以將清單設置為任何目標。
您可能已經知道代碼中需要做一些工作,以確保應用程序在嘗試調用7級不存在的方法時不會崩潰。如果您需要一些代碼,我已經編寫了代碼來處理例子。
編輯:
一個對我有用的例子。
/**
* Get the current SDK version as an integer. If we are using 1.5 the SDK is
* returned as a String so using the Build.VERSION.SDK_INT method will cause
* the application to crash. This method will return 3 if the version is 1.5
* and will return the proper result for Build.VERSION.SDK_INT if that
* method is available.
*
* @return
*/
public static int getSdkInt() {
if (Build.VERSION.RELEASE.startsWith("1.5"))
return 3;
try {
return YourInternalClass.getSdkIntInternal();
} catch (VerifyError e) {
Log.e(TAG, e.toString());
return 3;
}
}
您應該調用內部類中可能不存在的任何方法,這樣在調用該方法之前,它不會加載。
private static class YourInternalClass {
private static int getSdkIntInternal() {
return Build.VERSION.SDK_INT;
}
}
現在,您可以檢查SDK版本。 如果有任何方法僅存在於大於7的程序包中,請將這些方法放在內部類中。 那你就可以
if(TheClassYouPutThisMethodIn.getSDKInt() >= 12)
YourInternalClass.yourLevel12Method();
我確信可能有更好的方法可以做到這一點(我希望有人可以發布它),但對我來說很好。 我的應用程序使用SDK 13中的方法在3級手機上安全運行。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.