当前位置: 首页 > 面试题库 >

“为什么要使用Apache Harmony”或“如何在Android上使用Java 8”

晋奕
2023-03-14
问题内容

到目前为止,我们大多数人都已经听说过Java 8将带来的超酷功能,但Android将不支持它。这是因为Google使用了适用于Android的Apache
Harmony
。这就是使我们(Android应用程序开发人员)无法使用lambda,接口中的默认实现,打开String以及其他更多功能来改进代码的原因。当然,我们会处理一段时间,但是如果我们在应用程序中使用的某些库开始使用Java
8功能该怎么办?据我所知,这是行不通的(如果有误,请纠正我)。这会在 Standard -Java和 Android -Java
之间造成不兼容。这可能不是Google的意图,或者至少我无法想到为什么一家公司在开发被广泛采用的操作系统的情况下不会永久留在Google的原因。 旧的
Java版本。

问题:

  • 他们为什么使用Apache Harmony?
  • 他们为什么不能采用Java的较新版本?
  • 如果他们不想要Oracle的Java,为什么不能使用OpenJDK的子集(此处许可Noob)?
  • 您是否知道有计划更新使用的Java版本?
  • 您知道在当前的Android系统上使用Java 8类的任何方式吗?

问题答案:

他们为什么使用Apache Harmony?

因为Sun拒绝按照可接受的条款向Google提供Sun(现在的Oracle)Java许可。Google和Sun进行了谈判,但最终他们放弃了这笔交易。

Nitpick:实际上,Android库不是Apache
Harmony。它们最初是基于Harmony的,但是两个代码库却有所不同。此外,2011年11月,Apache Harmony项目正式“退休”。

他们为什么不能采用Java的较新版本?

首先,Android不运行Java(tm)。它运行一种语言,是相同的与Java类库在功能上相当于一个 子集 Java类库(+
Android的特定的库)的,在虚拟机上用 不同的 指令集。

从技术角度来看,他们可以……但是只有在为Android平台实现Java 7和Java 8语言功能,库功能等方面付出大量工作的情况下。

更新 -从Android 19(KitKat)和Eclipse ADT 22.6开始,Android现在确实支持Java
7语言扩展。参见http://tools.android.com/recent/eclipseadt226preview

如果他们不想要Oracle的Java,为什么不能使用OpenJDK的子集?

我认为切换到OpenJDK不会改变任何事情。Oracle Java和OpenJDK的相同率是99.9%。

无论如何,可能会有许可和相关的法律问题。(要对此有所了解,请阅读有关Oracle与Google的诉讼……这很有吸引力。)

Google更有可能没有足够的商业价值来抵消改变所要付出的(巨大)努力,以及对Android生态系统的破坏……该生态系统已经遭受了碎片化问题的困扰。

您是否知道有计划更新使用的Java版本?

不,我不知道。这并不意味着没有计划,但是如果有计划,它们就不会公开。

您知道在当前的Android系统上使用Java 8类的任何方式吗?

您可以html" target="_blank">移植它们。或者至少,您可以 尝试 移植它们。(某些Java API与JVM的本机代码端有着密切的关系……这可能导致移植出现问题。)



 类似资料:
  • 问题内容: 这里有人使用Spring Android吗?如果是这样,您为什么认为值得? 谢谢 问题答案: 如果您需要从Android应用程序访问RESTful Web服务,则Spring Android非常有用。这在实时数据应用程序中很常见,例如新闻和天气行情,股票行情等。 目前,使用Spring Android项目有两个好处:Commons logging和RestTemplate。 http:

  • 问题内容: 我在网上研究过immutablejs的好处,但是没有发现任何令人满意的东西! 我的问题是,当我可以冻结一个普通的旧javascript对象时,为什么我应该使用该库并使用非本机数据结构? 问题答案: 我认为您不了解immutablejs提供的功能。这不是一个使您的对象变得不可变的库,而是一个使用不可变值的库。 在不简单重复他们的文档和任务说明的情况下,我将说明它提供的两件事: 类型。他们

  • 问题内容: 为什么要在上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:丢失的文件,没有)上传到PyPI,则pip和都会失败。除了外观上的差异外,为什么Python的人(如上述推文中)似乎强烈青睐pip而不是? (假设我们正在谈论由社区维护的Distribute软件包中的) 问题答案: 这里的许多答案在2015年已经过时了(尽管丹尼尔·罗斯曼最初接受的

  • 问题内容: 我的用例需要一个数据结构。我应该能够将项目推送到数据结构中,而我只想从堆栈中检索最后一个项目。该堆栈的JavaDoc说: Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先使用此类。例如: 我绝对不希望这里出现同步行为,因为我将使用方法本地的数据结构。除了这个,我为什么还要在这里呢? PS:Deque的Javadoc说: 双端队列也可以用作LIFO(后进先出)堆栈。

  • 问题内容: 我一定会丢失一些东西,但是我已经看了几天了,但是到底为什么您会使用log4j2而不是log4j(而不是性能)? 从目前为止我所看到的,log4j2被宣传为更易于配置,但实际上却要复杂得多(现在已经三天了,我仍然无法在我的主目录中写日志)。自动配置对我根本不起作用(或者至少我无法使其工作),配置文件本身的结构实质上更复杂,在运行时添加东西以帮助诊断似乎更加困难。 因此,除了性能之外,还有

  • 我需要一个数据结构用于我的用例。我应该能够将项目推入数据结构,并且我只想从堆栈中检索最后一个项目。JavaDoc for Stack表示: