Android中的条件编译?

时间:2012-11-14 13:56:35

标签: android compiler-construction conditional exif

Android有任何类型的条件编译吗?

我必须为Android 3(API 11)制作我的项目,因为 ExifInterface 在Android 2.3(API 10)中几乎没有任何有用的属性,尽管它出现在API 5中(! !??)。我不想将我的应用限制为ICS用户。

谢谢!

3 个答案:

答案 0 :(得分:9)

您可以动态检查设备的当前API版本,并根据具体情况执行不同的操作:

    if(Build.VERSION.SDK_INT < 14) {
        // Crappy stuff for old devices
    }
    else {
        // Do awesome stuff on ICS
    }

但是要小心,如果你需要实例化所有API不可用的类,那么你应该在runnable或单独的包装类中进行,例如:

    if(Build.VERSION.SDK_INT < 14) {
        // Crappy stuff for old devices
    }
    else {
        // Do awesome stuff on ICS
        new Runnable() {
            new AmazingClassAvailableOnICS();
            (...)
        }.run();
    }

答案 1 :(得分:8)

import android.annotation.TargetApi;

然后使用注释:

@TargetApi(11)
public void methodUsesAPI11()
{
...

使用这个技巧非常简单:它允许编译包含API级别11调用(类,方法等)的一些代码,并且仍然在清单中设置android:minSdkVersion="8"。没有别的,没有别的。

剩下的由你决定。您必须先检查平台版本,然后才能调用methodUsesAPI11()或处理异常,以防止应用程序崩溃并在旧平台上执行其他操作。

答案 2 :(得分:2)

检查Build.VERSION.SDK_INT或使用注释应该足够了,但是,我收藏的这个链接可能与您的案例有关: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html?m=1

您可以使用他们在那里描述的内容来创建可能不兼容但永远不会加载的类。它不是条件编译,但它可能是你需要的,但是,它有点复杂。