Android中的#ifdef

时间:2012-03-16 19:50:14

标签: java android conditional-compilation

我正在为Android编写应用程序,我的应用程序必须在Android 2.2和Android 4.0.3下启动,我想在Android中使用类似#ifdef的东西,但我仍然无法找到我能做到的方式。

代码示例

Android 4.0.3

if( android.os.Build.VERSION.SDK == 4.0.3)
{
    String str = "foo";
    boolean b = str.isEmpty();
}

Android 2.2

else {
    String str = "foo";
    boolean b = str.length() == 0;
}

我不能写这样的代码,因为compilator会给出错误。

你可以建议我做什么?

3 个答案:

答案 0 :(得分:3)

  

你可以建议我做什么?

Java的新手应该在开始Android开发之前花时间学习Java。 4.0.3不是Java中的有效整数。

相反,你应该使用:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
 // do something
}

答案 1 :(得分:1)

您只需检查Api Level并调用Build.VERSION.SDK_INT

答案 2 :(得分:1)

#ifdef用于编译时处理,即使这通常是Java中公认的惯例(但不是,但确实存在支持该概念的第三方工具),它不太可能对您有所帮助,因为您需要对正在运行的环境做出运行时决定(除非您想生成多个包吗?)。

正如链接fabricemarcelin所提供的(http://stackoverflow.com/questions/3506792/android-api-version-programmatically)所述,您可以轻松地确定运行时系统的版本。您需要将应用程序编写到您知道将在运行时存在的API(2.2系统,如果这是您的下限),并且您需要做出关于调用4.0函数的运行时决定。对于4.0功能,您可能需要使用反射来查找API。

我已经利用反射来访问其他东西,只有在较新的Android系统上才能访问,而且效果很好。一个提示是安排在您的应用程序的早期执行反射/ API位置,如果合理,如果没有,至少安排每次调用只执行一次。