【问题标题】:Android-version-dependent compilationAndroid-version-dependent编译
【发布时间】:2014-10-21 03:34:03
【问题描述】:

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()方法未定义”

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

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

【问题讨论】:

  • 您编译的 Android 版本是什么? (注意:这与您允许的 minSdkVersion 不同)
  • 你也可以提供你正在工作的课程的包含吗?
  • 我正在针对 Android API 8 进行编译,这也是 minSdkVersion。
  • 导入 java.lang.reflect.InvocationTargetException;导入java.lang.reflect.Method;导入 java.util.ArrayList;导入 java.util.Vector;导入 java.util.concurrent.TimeUnit;导入 android.annotation.SuppressLint;导入android.content.Context;导入android.content.res.Configuration;导入android.content.res.Resources;导入android.graphics.Bitmap;导入android.graphics.Point;导入android.os.Bundle;
  • 导入android.util.Log;导入 android.view.LayoutInflater;导入android.view.View;导入android.view.ViewGroup;导入 android.webkit.WebChromeClient;导入 android.webkit.WebSettings;导入 android.webkit.WebView;导入 android.webkit.WebViewClient;导入 android.widget.ImageButton;

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


【解决方案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 设备上使用它。

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 2011-02-17
    • 2016-01-16
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多