簡體   English   中英

在應用程序上針對不同的Android版本創建-在較低版本中可用,僅在較高版本中導入

[英]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目標,否則會出現編譯器錯誤。

因此,總而言之:

  1. 應用應該從7級開始可用
  2. 如果用戶的級別為12+,則應用程序應導入某些級別12+的軟件包並提供這些功能
  3. 如果用戶只有<12,則不應導入軟件包

非常感謝!

如果我正確閱讀了您的問題,則可以將應用程序安裝在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM