Android 有没有条件编译?
我必须为 Android 3 (API 11) 制作我的项目,只是因为 ExifInterface 在 Android 2.3 (API 10) 中几乎没有有用的属性,尽管它出现在 API 5 (!!??) 中。我不想将我的应用程序限制为 ICS 用户。
您可以动态检查设备当前的 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();
}
import android.annotation.TargetApi;
然后使用注释:
@TargetApi(11)
public void methodUsesAPI11()
{
...
使用这个技巧做了一件非常简单的事情:它允许编译一些包含 API 级别 11 调用(类、方法等)的代码,并且仍然在清单中设置
android:minSdkVersion="8"
。仅此而已,仅此而已。
剩下的就看你的了。在调用
methodUsesAPI11()
或处理异常之前,您必须检查平台版本,以防止应用程序崩溃并在旧平台上执行其他操作。
检查 Build.VERSION.SDK_INT 或使用注释就足够了,但是,我添加书签的此链接可能与您的情况相关: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html?m=1
您可以使用他们在那里描述的内容来获得可能不兼容但永远不会加载的类。它不是条件编译,但它可能是您所需要的,但是,它有点复杂。