为什么 Android 的 Java 源代码实现与相同 类 的常规 Java 实现不同?

Why is the Java source code implementation for Android different from the regular Java implementation for the same classes?

我决定开始为 Android 编码。在做出决定之前,我花了很多时间来提高我的 Java 技能,希望这对我的 Android 发展也有帮助。

今天打开一些classes(比如HashMap),发现Android的实现和"regular"的实现不一样

有人可以向我解释为什么 class 与 GUI 和触摸无关的元素需要在 Android 中以不同方式实现吗?为什么不使用已经存在的 class?

我搜索了答案,但没有找到。如果这个问题已经被问到,我会很高兴得到 link 并锁定 post.

不同的 SDK(即使来自同一发布者)可以有不同的 class 实现,但是大多数情况下标准 classes 的行为应该是相同的。几年前差异更大。

这一切都是关于版权、许可和大公司试图保护他们的 "turf"。

背景是 Java 最初是 Sun Microsystems 开发的专有代码库。向开发人员提供的 Java class 库源代码包含在专有许可中。

2007 年,OpenJDK 6 以开源形式发布。 Google 查看了 OpenJDK,还与 Sun 就许可问题进行了谈判,但他们决定最好根据已发布的 Java 语言规范和 Java SE 进行洁净室重新实现javadocs。除此之外,这让 Google 可以重新审视用户界面框架,以及对移动平台至关重要的其他 API。最终结果远远优于 Sun 的 Java ME 产品。

但 Sun 与 Google 的关系仍然融洽。

然后甲骨文与Sun合并,企业文化发生了变化。 Oracle 和 Google 之间发生了一场大官司,这使 Oracle 和 Google 在 Java 生态系统中任何重要合作的机会都破灭了。

有关更多背景信息,请阅读这些维基百科文章: