使Android 2.2应用程序在1.6上运行

时间:2010-11-12 14:07:16

标签: android versioning

我为Android编写了一个简单的应用程序,当我第一次创建项目时,我为构建目标选择了v2.2。我发现我的应用程序在v1.6上不起作用,它会运行几秒钟然后崩溃。 所以我想我正在使用1.6中未实现的一些命令。所以我需要找出这些命令是什么,并找到1.6等效。我猜不应该太难。

我真正的问题是;制作1.6v是唯一的方法来创建一个新项目并将构建目标设置为1.6然后复制并粘贴源代码并重新编译?或者有更简单的方法吗?即我可以采用我现有的2.2版本,然后告诉它编译为1.6?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您所要做的就是在清单中设置minsdk值。这会将1.5设置为您的minsdk,将1.6设置为您的目标,例如:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>.

Versioning your app.

  

android:minSdkVersion - 运行应用程序的Android平台的最低版本,由平台的API级别标识符指定。

因此,您将此设置为1.5或1.6的API#,并且您的应用将在这些旧版本的Android上运行。但是你必须检查对较新版Android的API调用。您不能在1.5等中使用2.2功能

因此,您可以将目标设置为Android 2.2,并将您的minsdk设置为Android 1.5。然后,您可以使用Build.VERSION来确定用户使用的Android版本,以避免在较旧版本的Android中使用较新的API调用。

答案 1 :(得分:1)

规则是您始终使用最新的SDK构建,但使用<uses-sdk>属性的android:minSdkVersion值来指示您的应用可以支持的最低API级别。

请注意,此属性只是安装程序和市场的一个线索...将其设置为4(对于1.6)并不意味着您的应用可以在1.6上神奇地运行。如果更多的现代API不可用,那么你应该设计出好的后备(或者如果应用程序无法在没有它们的情况下正常运行,则适当地提高你的minSdkVersion)。

假设你的应用程序可以在没有2.x API的1.6上运行,那么你需要确保你的2.x API使用是从一个不会在2.x上加载的类完成的。这是一个例子:

import android.view.Display;

// Class for wrapping APIs only available in 
// API level 8 and up. (i.e. 2.2, a.k.a. Froyo)    
class ApiLevel8Only {
    public static int getDisplayRotation(Display display) {
        return display.getRotation();
    }

}

getRotation()调用将导致1.6的强制关闭。为避免这种情况,请在引用API包装类之前检查当前版本

if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
    ApiLevel8Only.getDisplayRotation(...);
}

希望这是有道理的。