Компиляция, зависящая от версии Android

Есть ли какая-нибудь условная компиляция для Android? Я пытаюсь использовать android.webkit.WebView.onPause(), в то же время поддерживая Android API 8.

Я пробовал решения, предложенные Фиддлером и Андреем Войтенковым при условной компиляции в 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();
    }
}

... но я все еще не могу скомпилировать / запустить приложение:

"Метод onPause () не определен для типа WebView"

а также

"Ваш проект содержит ошибки, исправьте их перед запуском приложения".

Я делаю что-то не так, или это просто невозможно?

1 ответ

Решение

Ваш код выглядит хорошо, он проверяет минимальную версию SDK перед использованием функции, которая доступна только с этой версии. Поэтому, если вы запустите свое приложение на устройстве Android с версией ниже API 11, этот код не будет выполнен. Но если он запущен на устройстве Android с API 11 или выше, он будет выполнен.

Таким образом, это означает, что ваше приложение должно быть скомпилировано как минимум с API 11, потому что оно содержит функцию, которая представлена ​​в API 11. В зависимости от версии, на которой оно запущено, эта функция будет включена или нет.

Для этого настройте свой AndroidManifest.xml:

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

Это создаст ваше Android-приложение на основе API 11, но все же позволяет использовать его на устройстве Android с API 8 или более поздней версии.

Другие вопросы по тегам