【发布时间】:2019-02-28 17:45:49
【问题描述】:
我知道的
我对@987654326@中的常见设置非常熟悉
minSdkVersion 21 - 表示 Android 设备至少需要 Android API 级别 21 或更高才能安装我的应用
(这应该尽可能低,以便在保留所有关键任务应用程序功能的同时达到最大用户数)
targetSdkVersion 26 - 表示我的应用是为此版本的 Android API “设计”的,因此设备知道是否以兼容模式等运行。
(应该尽可能高,以便开发人员随任何已弃用的 API 调用一起更新)
我对什么感到困惑
但是指定要使用的 JDK 版本的 sourceCompatibility 和 targetCompatibility 呢?我似乎收到了相互矛盾的消息。
例如,当我在 Android Studio 中查看我的项目结构设置时,我似乎得到了使用 Android Studio 附带的默认 JDK - version 1.8 的建议。
但是,当我阅读以下其他在线资源时:
https://www.christopherprice.net/which-jdk-do-i-use-with-android-studio-3686.html
Which JDK version (Language Level) is required for Android Studio?
我似乎得到了这样的消息,即 Android 主要在 version 1.7 上运行,并且只支持 version 1.8 的一小部分 - 这表明 version 1.7 是合乎逻辑的选择。
总结
问题 1)
我应该使用哪个版本来最大程度地兼容新旧 Android 设备? version 1.7 还是 version 1.8? (这有关系吗?请参阅问题 #2)
问题 2)
sourceCompatibility 和 targetCompatibility(和 JDK 版本)是否仅在从 .java 文件编译到 .class 文件期间使用?因此,在生成 java 字节码之后,任何版本(version 1.7 与 version 1.8)都不再重要——因为无论如何字节码都是相同的且可互操作的。
或者这会一直持续到最终用户(例如,如果他们的 Android 手机的 JVM 不知道如何读取 version 1.8 字节码,它就会崩溃)
问题 3)
如果我将minSdkVersion 设置为非常低的值(例如10),同时将sourceCompatibility 和targetCompatibility 设置为非常高的值(例如version 1.8),会发生什么?
我可以盲目地依赖 Android Studio 来捕获所有可能的不兼容问题吗?比如,如果它成功构建了一个 APK,我保证它会工作吗?
或者它仍然会构建并让API >= 10 的用户安装它,但如果用户设备 JVM 无法运行version 1.8,它只会在运行时崩溃?
【问题讨论】:
-
你看到developer.android.com/studio/write/java8-support了吗?它解释了较低 API 级别不支持的 Java 1.8 功能。