#安卓系统中的ifdef



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

代码示例

安卓4.0.3

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

安卓2.2

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

我不能写这样的代码,因为编译器会出错。

你能建议我做什么

你能建议我做什么?

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

相反,您应该使用:

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

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

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

我利用反射来访问只有在更新的安卓系统上才能使用的东西,效果很好。不过,一个技巧是,如果合理的话,安排在应用程序的早期执行反射/API定位,如果不合理,至少安排每次调用只执行一次。

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

我最近才发现productFlavors是实现这一目标的方法。使用它们,您可以创建仅为风味构建的文件夹,从而有条件地编译内容。这不一样,但可以解决类似的情况。

最新更新