android - 在应用程序上为不同的 Android 版本创建 - 在较低版本上可用,仅在较高版本中导入

标签 android android-version

我知道以前有人问过这种问题,例如这里:Android: how to code depending on the version of the API?

其中还提到必须编译到最新的 Android 级别。 我的基本应用程序版本应该从 7 开始可用,更高级的版本从 12 级开始。

那是不是意味着项目的目标设置应该是12以及 list 中的min-sdk。

但是 Android 市场中的应用程序将仅适用于 12 级设备?即使应用程序应该从 7 开始运行 - 只是功能有限。

同样在第 12 级,我需要导入某些仅从 12 级开始可用的包。所以我什至不能设置较低的 Android 目标,否则我会收到编译器错误。

总结一下:

  1. 应用应从 7 级开始可用
  2. 如果用户的级别超过 12 级,则该应用应导入某些 12 级以上的程序包并提供这些功能
  3. 如果用户只有 < 12,则不应导入包

非常感谢!

最佳答案

如果我没看错你的问题,那么这将允许你的应用程序安装在 7 级设备上

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="12" />

对于开发,您可以将其设置为您想要的任何目标,即您的项目目标可以是 SDK 4.0,但您的 list 目标可以是 1.5 (android:targetSdkVersion="3"),反之亦然。 Eclipse 会给您一个警告,但您可以针对任何目标进行开发,并将 list 设置为任何目标,只要您考虑到后果即可。

您可能知道在您的代码中有一些工作要做,以确保应用程序在尝试调用第 7 级不存在的方法时不会崩溃。我已经编写了代码来处理如果你想要一些例子。

编辑:

一个对我有用的例子。

/**
 * Get the current SDK version as an integer. If we are using 1.5 the SDK is
 * returned as a String so using the Build.VERSION.SDK_INT method will cause
 * the application to crash. This method will return 3 if the version is 1.5
 * and will return the proper result for Build.VERSION.SDK_INT if that
 * method is available.
 * 
 * @return
 */
public static int getSdkInt() {
    if (Build.VERSION.RELEASE.startsWith("1.5"))
        return 3;

    try {
        return YourInternalClass.getSdkIntInternal();
    } catch (VerifyError e) {
            Log.e(TAG, e.toString());
        return 3;
    }
}

您应该调用内部类中可能不存在的任何方法,以便在调用该方法之前不会加载。

private static class YourInternalClass {
    private static int getSdkIntInternal() {
        return Build.VERSION.SDK_INT;
    }
}

现在您可以查看SDK版本了。如果您有任何方法只存在于大于 7 的包中,请将这些方法放在内部类中。那么你可以做

if(TheClassYouPutThisMethodIn.getSDKInt() >= 12)
YourInternalClass.yourLevel12Method();

我确信可能有更好的方法来执行此操作(我希望有人可以发布它)但它对我来说非常有用。我的应用程序使用 SDK 13 中的方法,可以在级别 3 的手机上安全运行。

希望这对您有所帮助。

关于android - 在应用程序上为不同的 Android 版本创建 - 在较低版本上可用,仅在较高版本中导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547806/

相关文章:

Android - 如何获取 TextView 中字符的坐标

java - Android 6.0 以上版本无法通过广播接收器获取通知

android - 在高于 4.4 的 Android 操作系统版本中,无法使用 Canvas 绘制线条

Android Library 目标编译和后续 Android 版本中的对象

java - 如何从表中检索行并将该值设置为 json 数组并获取该 json 数组作为返回值

java - 如何将 String[] 字符串转换为单独的字符串?

android - JaCoCo 使用 Kotlin 和 Android 3.0 返回 0% 覆盖率

android - 在 Android 上获取 OAuth2 token 时 UNREGISTERED_ON_API_CONSOLE

angular - ionic 2 : Why does alert box look like old Android?

android - 无法创建特定于版本的值文件夹