Android中的条件编译?

Lui*_*rit 6 compiler-construction conditional android exif

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

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

谢谢!

sda*_*bet 9

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

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

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

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


And*_*kov 8

import android.annotation.TargetApi;

然后使用注释:

@TargetApi(11)
public void methodUsesAPI11()
{
...
Run Code Online (Sandbox Code Playgroud)

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

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