Android 有条件地为不同的目标构建

Android 有条件地为不同的目标构建,android,Android,到目前为止,我一直在为API 14进行构建。我现在正在准备,所以我下载并指定了API7作为我的目标。我有一些编译错误,因为我在API14中使用的一些api在API7中不可用 我想知道我怎样才能把它们放在条件句中。关于以下内容: if (API_14) { if (mTextEdit.isEmpty()) { // Do Something } } else if (API_7){ if (mTextEdit.matches("")) { /

到目前为止,我一直在为API 14进行构建。我现在正在准备,所以我下载并指定了API7作为我的目标。我有一些编译错误,因为我在API14中使用的一些api在API7中不可用

我想知道我怎样才能把它们放在条件句中。关于以下内容:

if (API_14)
{
    if (mTextEdit.isEmpty()) {
        // Do Something
    }
} else if (API_7){
    if (mTextEdit.matches("")) {
        // Do the same thing
    }
}
这必须是一个编译时条件开关,否则我的代码甚至无法编译

我以前听说Java不支持预处理器,所以我欢迎关于如何最好地管理我的源代码的建议,我的目标是多个版本

编辑: 我的州列表也有问题:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:state_pressed="true"
        android:drawable="@android:color/holo_orange_dark" />

    <item android:drawable="@android:color/transparent" />

</selector>


当然,hold_orange_dark在API7中不可用。我也希望能够管理这些功能。

您不能执行ifs,否则您将在旧设备上崩溃

您必须使用Java反射来有条件地使用来自较新API的方法


例如:

对于您的资源,您可以为不同的平台版本提供支持。因此,您将创建一个Values-v14目录,以拥有使用该API版本中任何内容的任何资源的副本,并创建一个Values目录,以便在默认情况下使用Values,并且仅当设备是版本14时才使用Values-v14

至于以编程方式进行,您可以尝试这样的尝试-

try {
      //Insert ICS stuff here
    } catch(NoSuchMethodError e){
    }
或者你可以试试这个-

public static boolean isHoneycomb() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}