依赖于Android版本的编译

时间:2014-10-21 03:34:03

标签: android conditional-compilation android-version build-time

Android有任何类型的条件编译吗?我正在尝试使用android.webkit.WebView.onPause(),同时还支持Android API 8.

我尝试了Fiddler和Andrey Voitenkov在Conditional compiling in Android?建议的解决方案:

public void pause()
{
    int version = android.os.Build.VERSION.SDK_INT;
    if(version >= 11)
    {
        webViewOnPause(_webView);
    }
    super.onPause();
}

@TargetApi(11)
void webViewOnPause(final android.webkit.WebView webview)
{
    new Runnable() {
        public void run() {
            new PauseStuffAvailableOnHC(webview);
        }
    }.run();
}

class PauseStuffAvailableOnHC
{
    @TargetApi(11)
    public PauseStuffAvailableOnHC(android.webkit.WebView webview)
    {
        webview.onPause();
    }
}

...但我仍然无法编译/运行应用程序:

“对于WebView”

类型,未定义onPause()方法

“您的项目包含错误,请在运行您的应用程序之前修复它们。”

我做错了什么,或者根本不可能做到这一点?

1 个答案:

答案 0 :(得分:1)

您的代码看起来很好,它会在使用仅在该版本上提供的功能之前检查最小的SDK版本。 因此,如果您在版本低于API 11的Android设备上运行应用程序,则不会执行该代码。 但如果它在具有API 11或更高版本的Android设备上运行,则会执行它。

这意味着,您的应用程序应该至少针对API 11进行编译,因为它包含API 11中引入的功能。根据运行的版本,该功能是否启用。

要执行此操作,请调整 AndroidManifest.xml

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />

这将针对API 11构建您的Android应用,但仍允许它在运行API 8或更高版本的Android设备上使用。