gpt4 book ai didi

android - 每个 Android 设备都包含所有以前的 SDK 版本吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:07 25 4
gpt4 key购买 nike

我只是想知道,是否安装在设备上的最新 Android SDK 也包含所有以前版本的代码?

因此,如果我在我的应用程序中以 API 级别 10 为目标并将其安装在带有 Lollipop 的设备上,它是否会像 3 年前一样采用和使用 Gingerbread SDK?

或者是否只有一个代码库适用于所有版本并进行大量检查和切换,然后由某种兼容模式运行,选择正确的代码并启用我目标 SDK 版本的方法?

我阅读了关于 android:targetSdkVersion specified in Manifest 的文章但仍然想知道它在内部是如何工作的。

最佳答案

好的,我只是浏览了一下源代码(您可以在这里找到:https://github.com/android/platform_frameworks_base)。我不是 Android 框架的工程师,我只是对你的问题感到好奇,这是我的发现。

它不包含所有不同版本的源代码。您可以想象,如果越来越多的版本可用,这将导致一场噩梦。最重要的是,如果不修复它们只是为了保持它们相同,您将拥有相同方法的不同(错误)版本。

在源代码中,您可以找到这样的地方:(参见 https://github.com/android/platform_frameworks_base/blob/59701b9ba5c453e327bc0e6873a9f6ff87a10391/core/java/com/android/internal/view/ActionBarPolicy.java#L55 )

public boolean hasEmbeddedTabs() {
final int targetSdk = mContext.getApplicationInfo().targetSdkVersion;
if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN) {
return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs);
}

// ...
return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb);
}

因此,Android 开发人员会在必要时在代码中进行版本检查。但这些检查并没有你想象的那么必要(我猜)。改变方法的原因是什么?

  • 方法有问题:他们所需要做的就是修复错误。测试将确保该方法的一般行为保持不变
  • 方法已弃用:这些人无法删除该方法,他们所能做的就是将其标记为已弃用并希望最好。编译器将完成剩下的工作。
  • 方法行为必须改变:好吧,我想这是他们无法轻易做到的事情。他们可以使用版本代码(这非常丑陋并且成为维护噩梦),或者他们只是引入一个新的 API。这就是为什么您会发现很多 API 只是做同样的事情的原因

关于android - 每个 Android 设备都包含所有以前的 SDK 版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906865/

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