2011-02-01 104 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

希望能够清除一些问题。