【问题标题】:Compiled version vs. Minimum required version Android编译版本与最低要求版本 Android
【发布时间】:2013-04-05 20:56:04
【问题描述】:
在我的自定义视图中,我使用的是 drawTextOnPath(...) 方法,直到 4.1 才支持硬件加速。
所以我想添加一个if 语句,它会在运行时检查当前的 Android 版本,并在此版本大于或等于 4.1 时打开硬件加速。
我的问题是我使用 Android 4.0 SDK(这是我的最低版本)编译我的项目,所以我没有适用于 Android 4.1 的 Build.VERSION_CODES。
我应该用 4.1 编译我的项目,尽管我的最低版本是 4.0 吗?
【问题讨论】:
标签:
android
android-custom-view
android-version
【解决方案1】:
我写过一次:Android targeting system
重要部分:
使用 Java 7 编译器编译 Java 应用程序时,您不能
将它与 Java 6 解释器一起使用。口译员会告诉你,
它无法解释生成的字节码,即使你不是
使用任何 Java 7 语言功能。如果你想编译
最新的编译器,但使您的字节码可在较旧的 JVM 上运行
实例,你需要告诉编译器这样做(使用
-目标标志)。
在 Android 中,您可以声明您支持的平台版本
清单文件,使用<uses-sdk>-元素,它是
android:minSdkVersion 和 android:targetSdkVersion-属性。
这些“定位机制”之间的区别在于,Android 确实
不关心应用程序是针对哪个平台版本编译的。
如果您声明您的应用程序与 API 级别 4 兼容,
Android 会很高兴地安装它,即使你编译它是针对
Android 4.1(API 级别 16)。
简而言之:
- 如果您希望您的应用程序与最新的 Android 平台一起工作,请针对它进行构建。
- 使用 minSdkVersion 声明您的应用程序支持的最低 API 级别。
- 作为您的 targetSdkVersion,使用您编译应用程序时所针对的 API 级别。
- 使用 [Android] Lint 检查(可能)不受支持的 API 调用。
- 使用条件执行和@TargetApi-annotation 在可用时使用更新的 API。
当您使用最新的 SDK 构建应用程序时,您将拥有所有可用的 Build.VERSION_CODES。
【解决方案2】:
是的,如果您使用 4.1 的功能,则必须针对 4.1 进行编译,即使您有条件地这样做,否则编译器将无法构建您的应用程序,因为它会将所有 4.1 功能视为无效(不存在) .