Android中的#ifdef

问题描述 投票:2回答:3

我正在编写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;
}

我无法编写这样的代码,因为编译器会给出错误。

您可以建议我做什么?

java android conditional-compilation
3个回答
4
投票

您可以建议我做什么?

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

相反,您应该使用:

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

1
投票

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

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

我已经利用反射来访问事物,否则它们只能在较新的Android系统上使用,并且运行良好。不过,有一个秘诀是,如果合理的话,安排在应用程序中尽早执行反射/ API位置,否则,至少安排每个调用仅执行一次。


1
投票

您可以简单地检查Api Level并调用Build.VERSION.SDK_INT

© www.soinside.com 2019 - 2024. All rights reserved.