好的,我刚刚浏览了一下源代码(您可以在这里找到: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 都在做同样的事情的原因