gpt4 book ai didi

java - sourceCompatibility 和 targetCompatibility 如何影响受支持设备的数量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:46 54 4
gpt4 key购买 nike

我所知道的

我对 build.gradle 中的常见设置非常熟悉

minSdkVersion 21 - 意味着 Android 设备至少需要 Android API 级别 21 或更高级别才能安装我的应用

(这应该尽可能低,以便在保留所有关键任务应用程序功能的同时达到最大数量的用户)

targetSdkVersion 26 - 表示我的应用程序是为这个版本的 Android API “设计”的,因此设备知道是否以兼容模式等运行。

(这应该尽可能高,并且开发人员可以随任何已弃用的 API 调用一起更新)

我有什么困惑

但是指定要使用的 JDK 版本的 sourceCompatibilitytargetCompatibility 呢?我似乎收到相互矛盾的消息。

例如,当我查看 Android Studio 中的项目结构设置时,我似乎得到了使用 Android Studio 附带的默认 JDK - 1.8 版 的建议。

enter image description here

但是,当我阅读其他在线资源时,例如:

我似乎得到这样的消息:Android 主要运行在 1.7 版 上并且只支持 1.8 版 的一小部分 - 建议 1.7 版 才是合乎逻辑的选择。

总结

问题 1)

我应该使用哪个版本才能最大程度地兼容新旧 Android 设备? 1.7 版 还是 1.8 版? (这有关系吗?请参阅问题 #2)

问题 2)

sourceCompatibilitytargetCompatibility(和 JDK 版本)仅在从 .java 文件编译到 .class 期间使用的东西 文件?因此,在生成 java 字节码之后,无论版本是什么(version 1.7 vs version 1.8)都不再重要了——因为字节码将是相同的并且可以互操作。

或者这是否会一直持续到最终用户(例如,如果他们的 Android 手机的 JVM 不知道如何读取 version 1.8 字节码,它就会崩溃)

问题 3)

如果我在设置 sourceCompatibilitytargetCompatibility 时将 minSdkVersion 设置为非常低的值(例如 10)会发生什么到非常高的东西(例如 version 1.8)?

我可以盲目地依赖 Android Studio 来捕获所有可能的不兼容性吗?比如,如果它成功构建了一个 APK,我保证它会工作?

或者它仍然会构建并让 API >= 10 的用户安装它,但如果用户设备 JVM 无法运行 1.8 版,它只会在运行时崩溃>?

最佳答案

在您的设备上运行代码之前,android 工具链会执行一些额外的步骤:

.java -> .class -> .class(脱糖) -> .dex

这在此处描述:https://developer.android.com/studio/write/java8-support

脱糖步骤负责将您的现代字节码转换为适用于旧 VM 的代码。

脱糖使您的代码向后兼容的程度取决于 minSdkVersion。如果您的项目组合了 sourceCompatibility/targetCompatibilityminSdkVersion 是不可能的,编译器会告诉您。

这也适用于来自第 3 方库的字节码。错误看起来像这样:

Error: Static interface methods are only supported starting with Android N (--min-api 24): okhttp3.Request

(此特定问题来自使用 1.7 源代码与 okhttp3 4.0.1 的兼容性,并通过使用目标 1.8 消失)

关于java - sourceCompatibility 和 targetCompatibility 如何影响受支持设备的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52492459/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com