7

是否有任何适用于 Android 的条件编译?

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

谢谢!

4

3 回答 3

10

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

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

但是请注意,如果您需要实例化并非对所有 API 都可用的类,那么您应该在可运行或单独的包装类中进行,例如:

    if(Build.VERSION.SDK_INT < 14) {
        // Crappy stuff for old devices
    }
    else {
        // Do awesome stuff on ICS
        new Runnable() {
            new AmazingClassAvailableOnICS();
            (...)
        }.run();
    }
于 2012-11-14T14:02:11.607 回答
9

import android.annotation.TargetApi;

然后使用注释:

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

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

剩下的就看你了。您必须在调用methodUsesAPI11()或处理异常之前检查平台版本,以防止应用程序崩溃并在旧平台上执行其他操作。

于 2012-11-14T14:03:40.447 回答
2

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

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

于 2012-11-14T14:04:55.343 回答