2011-02-01 110 views
4

我有一個應用程序可以發佈適用於所有android屏幕尺寸(除了較小)和SDK 2.0版以上的密度的應用程序。AndroidManifest.xml中的Android兼容性設置

它也可以在超大屏幕上運行。 目前,我已經加入這個:

<supports-screens 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="false" 
     android:anyDensity="true" 
    /> 

但我還需要添加android:xlargeScreens="true",允許它在Android Market上可見超大屏幕設備,因爲默認情況下它是假的。

但要加android:xlargeScreens我需要改變我的日食targetsettings以2.3爲這個屬性是從API級別增加9

所以,我應該怎麼做這個方案我的目標編譯設置?編譯時應該是2.3嗎?如果是的話,那麼在2.0版本的設備上運行應用程序時,應用程序是否會出現問題?

+0

總結下面的討論,似乎只是在清單中添加android:xlargeScreens =「true」,我將不得不將屬性中的整個項目目標更改爲API級別9並編譯和分發?這對於在所有較低版本上運行構建都不會有什麼壞處?我已經在清單中設置了目前,我已經在其屬性中將eclipse項目目標平臺設置爲2.0,如這是我需要支持的最低級別。 – Pritam 2011-02-01 07:57:46

回答

0

在閱讀時this博客文章我想我對我的老問題有一個答案。下面的摘錄(用於從3.2引入的另一個清單屬性「requiresSmallestWidthDp」):

「問題在於,您必須針對Android 3.2或更高版本編譯應用程序才能使用requiresSmallestWidthDp屬性。舊版本不理解這個屬性會引發一個編譯時錯誤,最安全的做法是針對平臺開發你的應用程序,該平臺與你爲minSdkVersion設置的API級別相匹配當你爲編譯你的候選版本做最後的準備時,構建Android 3.2的目標並添加requiresSmallestWidthDp屬性,Android版本比3.2更簡單地忽略該XML屬性,因此不存在運行時失敗的風險。

0

我還沒有試過2.3,但這就是我用2.2做的。

我編譯爲2.2和1.6測試,以確保一切工作如何我期待。我沒有遇到任何問題。

要仔細檢查,設定目標爲2.3,然後設置爲較低的轉速版本的模擬器,以確保所有的工作。

+0

如果我們將目標設置爲2.3並編譯,在運行配置中我們看不到eclipse中低於2.3的avd(emulators)。 – Pritam 2011-02-01 05:49:50

+0

@Pritam:使用AVD管理器啓動您想要的模擬器。然後設置您的運行配置以手動選擇部署目標,並在提示時選擇正在運行的模擬器。這就是你如何運行2。1個仿真器,項目設置爲2.3。 – 2011-02-01 05:55:20

+0

Pritam,您需要使用uses-sdk標記並定義您想要支持的minSdkVersion。看看我的答案中的鏈接。 – achie 2011-02-01 05:56:37

2

是的,你需要改變用途的SDK 2.3,但要確保您不使用任何更新的API這不是2.0或任何你支持的最低SDK版本是。或者如果你想使用它們,你必須使用反射。

more about how to use the sdk versions is heremore about uses-sdk is here

我做同樣的在我的應用程序,並確保在兩個[全部]版本你發佈之前測試您的應用程序。

最好, 完成。

2

我正在從評論中提出這個問題,以使其他人在未來看到這個問題更加清晰。

當支持安卓的新,舊版本中,它可能會造成混淆的應用程序是如何管理運行,儘管很多事情每個新版本中與框架改變,我要去嘗試,並在這裏澄清這一點。

爲1.5 SDK編寫只能調用存在該API級的功能,因此例如多點觸摸的API並沒有在1.5存在,永遠也不會知道的應用程序。現在你說「好吧,但我不需要調用任何更新的API,我只想讓我的應用程序在2.3中工作,並擁有a2sd支持」並且我說「好吧,只需在清單中更改targetApi,設置minSDK並編譯對2.3,你很好走。「

現在爲什麼這樣工作?如果ListView的onMeasure()方法在2.2中更改,現在在onMeasure()中調用betterCalculateFunction()會怎麼樣?爲什麼我的應用程序仍然工作?

這是Java中後期綁定的優點。您會發現,Java從未編譯,直到它到達設備並且正在運行,您在Eclipse中正在將其轉換爲包含一串字節代碼指令的字節代碼,該指令稍後將由設備解釋。字節碼永遠不會包含對betterCalculateFunction()的引用,除非你直接調用它,調用onMeasure()是間接的)。發生這種情況的原因是,當您的代碼在設備上運行時,它會與設備上的Android框架鏈接,並且您的代碼會直接調用onMeasure(),因爲它是公共外向API。然後執行的路徑將進入框架並調用它所需的任何內容,然後一旦完成就返回到您的代碼。因此,對1.5

,你可能會看到

doStuff(代碼) - > onMeasure (公共API) - >完成

和2.2

doStuff(代碼) - > onMeasure (公共API) - > betterCalculateFunction(私人 功能) - >完成

現在,如果您需要根據API級別調用可能存在或可能不存在的函數,那麼我建議您查看我的相關答案stackoverflow: gracefully downgrade your app

希望能夠清除一些問題。