AndroidManifest.xml中的Android兼容性设置

AndroidManifest.xml中的Android兼容性设置,android,android-manifest,google-play,screen-size,Android,Android Manifest,Google Play,Screen Size,我有一个应用程序要发布,它适用于所有android屏幕尺寸(更小的除外)和SDK 2.0版以上的密度 它还将在超大屏幕上运行。 目前我添加了以下内容: <supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="false" android:anyDensity="true" />

我有一个应用程序要发布,它适用于所有android屏幕尺寸(更小的除外)和SDK 2.0版以上的密度

它还将在超大屏幕上运行。 目前我添加了以下内容:

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

但我还需要添加
android:xlargescreenses=“true”
,以允许它在超大屏幕设备上在android市场上可见,因为默认情况下它是假的

但是要添加
android:xlargeScreens
,我需要将eclipse targetsettings更改为2.3,因为该属性是从API级别9添加的


那么,对于这个场景,我应该如何处理我的目标编译设置呢?编译时它应该是2.3吗?如果是,那么在2.0版本的设备上运行时,应用程序不会出现任何问题吗?

我还没有尝试过2.3,但我使用2.2就是这么做的

我为2.2版编译,并在1.6版上测试,以确保一切按我预期的方式运行。我没有遇到任何问题


若要仔细检查,请将目标设置为2.3,然后为较低版本设置仿真器,以确保一切正常。

是的,您需要将uses sdk更改为2.3,但请确保您没有使用任何不在2.0中的较新API或支持的最低sdk版本。或者,如果你想使用它们,你必须使用反射

但是和

我在我的应用程序中也这样做,并确保在发布之前在两个[所有]版本中测试应用程序

最好的,
阿奇

我将此从评论中删除,以使其他人在将来看到这个问题时更加清楚

当支持旧版本和新版本的Android时,可能会混淆应用程序是如何运行的,尽管在每一个新版本中框架中的许多东西都发生了变化,我将尝试在这里澄清这一点

为1.5 sdk编写的应用程序只能调用该API级别的函数,因此,例如,multi-touch API在1.5中不存在,也永远不会存在。现在,你说“好吧,但我不需要调用任何更新的API,我只想让我的应用程序在2.3中工作并支持a2sd”,我说“好吧,只要在清单中更改你的targetApi,设置minSDK并根据2.3编译,就可以了。”

为什么会这样?如果在2.2中更改了
ListView
的onMeasure()方法,现在在onMeasure()中调用betterCalculateFunction(),会怎么样?为什么我的应用程序仍然有效

这就是Java中后期绑定的优点。您知道,Java在到达设备并运行之前是不会被编译的,您在Eclipse中所做的是将其转换为字节码,其中包含一组字节码指令,这些指令稍后由设备解释。但字节码永远不会包含对betterCalculateFunction()的引用(除非直接调用它。调用onMeasure()是间接的)。这可能是因为当您的代码在设备上运行时,它会与设备上的Android框架相链接,并且您的代码会直接调用onMeasure(),因为它是一个面向外部的公共API。然后,执行路径将进入框架并调用它需要的任何东西,然后一旦完成,就返回到代码中

所以在1.5你可能会看到

doStuff(您的代码)->onMeasure (公共API)->完成

和2.2

doStuff(您的代码)->onMeasure (公共API)-> betterCalculateFunction(专用) 函数)->完成

现在,如果您需要调用函数,这些函数可能存在,也可能不存在,这取决于API级别,那么我建议您在这里查看我的相关答案


希望这能澄清一些问题。

android:XLargeScreenses的默认值为true,因此您无需更改任何内容-默认情况下,只要您的minSdkVersion或targetSdkVersion高于4,它就会打开。

以下是Android开发者的官方博客,解释了它的工作原理:

总而言之:您可以使用最新的XML,同时仍然以向后兼容的方式支持较旧的操作系统版本。

在阅读博客文章时,我想我对我的老问题有了答案。下面的摘录(用于从3.2引入的另一个清单属性“requiresMallestWidthDP”):


“关键是,为了使用requiresSmallestWidthDp属性,您必须针对Android 3.2或更高版本编译应用程序。旧版本不理解此属性,将引发编译时错误。最安全的做法是根据与您为minSdkVersion设置的API级别相匹配的平台开发应用程序。当您为构建候选版本做最后准备时,将构建目标更改为Android 3.2,并添加requiresMallestWidthDP属性。早于3.2的Android版本只需忽略该XML属性,因此没有运行时失败的风险。”

对于不同的屏幕,您必须创建多个apk,然后它会减小应用程序的大小。在每个应用程序的清单中,您必须根据以下链接定义。

如果我们将目标设置为2.3并进行编译,在运行配置中我们将无法看到avd(模拟器)这在eclipse中低于2.3。@Pritam:使用AVD管理器启动所需的仿真器。然后设置运行配置以手动选择部署目标,并在出现提示时选择正在运行的仿真器。这就是如何在项目设置为2.3的2.1仿真器上运行的方法。Pritam需要使用uses sdk标记并定义minSdkVers您想要支持的离子。请查看我答案中的链接。@Ted Hopp谢谢。实际上,我在实际设备上测试的不是这个,而是下面对@achie的评论。@Ted Hopp谢谢您这么快就回答了!@Pritam-检查Archie的答案,这应该会让您达到您需要的目的!是的,我们可以这样做,但不会补偿使用较新的API会在较旧设备上的某个地方破坏应用程序,这意味着——虽然较旧版本支持该API,但其实现在较新版本2中被覆盖(可能会被优化)