我有一个应用程序可以发布适用于所有Android屏幕尺寸(小型除外)和SDK版本2.0之上的密度。
它也可以在超大屏幕上运行。 目前我添加了这个:
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="false"
android:anyDensity="true"
/>
但我还需要添加android:xlargeScreens="true"
,以允许它在超大屏幕设备的Android市场中可见,因为默认情况下它是假的。
但是要添加android:xlargeScreens
我需要将我的eclipse目标设置更改为2.3,因为此属性是从API级别9添加的。
那么我应该如何处理此方案的目标编译设置?编译时应该是2.3吗?如果是,那么在使用2.0版本的设备上运行时应用程序是否会出现任何问题?
答案 0 :(得分:2)
是的,您需要将使用sdk更改为2.3,但请确保您没有使用任何不在2.0中的新api或任何您支持的最低sdk版本。或者如果你想使用它们,你必须使用反射。
但是more about how to use the sdk versions is here和more about uses-sdk is here。
我在我的应用程序中也这样做,并确保在发布之前在[所有]版本中测试应用程序。
最佳, 的政绩。
答案 1 :(得分:2)
我正在从评论中提出这一点,以便将来对其他人更清楚地了解这个问题。
当支持Android的新版本和新版本时,尽管在每个新版本的框架中发生了许多变化,但是应用程序如何管理运行会让人感到困惑,我将在此尝试澄清这一点。
为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(您的代码) - &gt; onMeasure (公共API) - &gt;完成
和2.2
doStuff(您的代码) - &gt; onMeasure (公共API) - &gt; betterCalculateFunction(私有 功能) - &gt;完成
现在,如果您需要根据API级别调用可能存在或不存在的函数,那么我建议您查看我的相关答案stackoverflow: gracefully downgrade your app
希望清除一些事情。
答案 2 :(得分:0)
我没有尝试过2.3,但这就是我用2.2做的事情。
我为2.2编译并在1.6上测试以确保一切正常我的期望。我没有遇到任何问题。
要仔细检查,请将目标设置为2.3,然后为较低版本设置仿真器,以确保它都能正常工作。
答案 3 :(得分:0)
android:xlargeScreens的默认值为true,因此您不必更改任何内容 - 只要您的minSdkVersion或targetSdkVersion高于4,它就会默认启用。 http://developer.android.com/guide/topics/manifest/supports-screens-element.html
答案 4 :(得分:0)
以下是官方Android开发人员博客解释其工作原理:
http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html
总结:您可以使用最新的XML,同时仍以后向兼容的方式支持较旧的OS版本。
答案 5 :(得分:0)
在阅读this博客文章时,我想我对旧问题有了答案。下面的摘录(用于3.2)引入的另一个清单属性“requiresSmallestWidthDp”:
“问题是您必须针对Android 3.2或更高版本编译应用程序才能使用requiresSmallestWidthDp属性。旧版本不理解此属性并且会引发编译时错误。最安全的做法是开发您的应用程序针对与您为minSdkVersion设置的API级别相匹配的平台。当您为构建候选版本做最后准备时,将构建目标更改为Android 3.2并添加requiresSmallestWidthDp属性。早于3.2的Android版本将忽略那个XML属性,所以没有运行时失败的风险。“
答案 6 :(得分:-1)
对于不同的屏幕,您必须创建多个apk然后它会减小您的应用程序的大小。在每个应用程序的清单中,您必须根据以下链接进行定义。 http://developer.android.com/guide/practices/screens-distribution.html