iOS应用可以使用Java开发吗?

5

我是一名网站开发人员,正在考虑进入移动应用程序开发领域。目前我已经掌握了PHP、Python、SQL、Js、HTML和CSS等多种语言。现在我开始学习Java,因为据我所知,它是原生Android应用程序开发的语言。有趣的是,我在这个论坛以及其他文章中看到过一些帖子称Java也可以用于开发iOS兼容应用程序,而其他来源则评论说苹果公司完全反对跨平台开发,因此在选择本地开发和优化用户体验时,你应该使用Swift来开发iOS应用程序。因此,我想知道在这个论坛上是否可以使用Java来开发iOS应用程序。


2
这个回答解决了你的问题吗?如何使用Java开发iPhone应用程序? - Dennis Kozevnikoff
5个回答

7
这篇帖子已经几个月了,但我觉得有类似问题的人可能会通过网络搜索找到这个帖子,所以这个回复是给他们的。为了背景,我在职业上写Java已经五年了,而且我是在Java被认为是未来的时候学习编程的。
如果问题是“你能写Java代码并在iOS上运行吗?”那么答案是“从技术上讲是可以的。”但我会对是否真的想要这样做持谨慎态度。
这需要在幕后进行一定程度的巧妙处理才能使其正常工作。之前的回答中提到的工具Codename One给我留下了相当沉重的框架印象。如果我的项目已经致力于Java代码库,我会考虑使用它,但对于新项目,我的直觉是避免依赖它。
2023年了解Java有一些优势,但在我看来,跨平台移动开发并不是最引人注目的用例。
一些你可能想要在当前时代学习Java的原因包括:
  • 在Android上进行开发。虽然Android现在推荐使用Kotlin作为新项目的首选语言,但Java是该平台上唯一的一流语言已经有10多年了,所以能够阅读、编写和重用Java代码和库是有优势的。
  • 深入了解其他JVM语言,如Kotlin和Scala。在我对Kotlin的简短体验中,我发现它比Java更优雅,但如果没有对JVM模型及其限制的先前了解,很难欣赏Kotlin的设计决策或者它是如何在“底层”工作的。
  • 使用长期存在的大数据工具,如Spark、Hadoop或Neo4j。虽然自2010年代中期以来,这个领域越来越多地转向Python,但仍然有很多生产Java代码需要维护。
  • 与C系列语言的风格相似。Java可以比直接学习C++更直观地介绍C风格的语言。不过,如果你的目标是这样的话,我会考虑学习C#而不是Java。
  • 与某些JavaScript方言的连续性。特别是,React代码体现了受Java实践影响的面向对象设计约定,并且这些设计选择反过来影响了JS规范的变化。熟悉Java约定可以帮助理解这些设计模式。它还可以帮助您确定哪些面向对象实践是不好的想法,以便在JavaScript应用程序中避免使用它们。
在我看来,自2006年以来,人们离开Java的原因有很多好的理由:
  • 它以冗长著称,并且需要对实现细节有很多深奥的了解才能编写高效运行的代码。这是类似Scala和Kotlin这样的语言在各自领域中试图解决的问题,同时保持与JVM平台的兼容性,以便轻松迁移。
  • JVM平台传统上在资源使用和集成复杂性方面引入了大量的开销。随着时间的推移,JVM变得更加高效,并且开发了将Java直接编译为本机代码的工具,但在我看来,集成复杂性仍然是一个重要的瓶颈。尤其是在Android上,常常需要从JVM代码调用本地函数,而这仍然是一个痛点。
  • 自Sun被Oracle收购以来的方法和政策变化。这与许可问题(参见Oracle v Google)以及功能膨胀有关,这导致了跨代码库的兼容性问题。它还导致了专有和开源JVM实现之间的生态系统分裂,可能会影响性能。
  • 在2000年代和2010年代出现了可行的替代语言。
  • 新技术已经出现,用于解决Java设计的兼容性问题。Java和JVM模型的一个重要"卖点"是能够在各种平台上运行相同的代码。但如今,通过在虚拟机中运行代码,在后端系统中使用Docker容器,或者通过Web Assembly在浏览器中运行代码更常见。
这真是讽刺,因为Java的座右铭曾经是“一次编写,到处运行”,但事情就是这样。

1
“JVM平台本身引入了相当大的开销,包括资源使用和集成复杂性。” 这种情况自20世纪以来就不再是真实的了。 - VGR
告诉这个安卓开源项目吧。 - datagram
2
这是一个非常不负责任的回答,显然不是一个Java开发人员。你显然不理解现代Java平台及其覆盖范围。此外,Codename One将Java编译成本地iOS机器代码,就像Swift一样,因此你的大部分论点都是无效的。现代Java版本包括与Scala和Swift相同的功能。后者比Java更加繁琐,并且肯定不能帮助你编写跨平台应用程序。 - Dave
这个答案有好的和不好的部分。但我怀疑这个答案是否对提问者最有用并被接受。关于Apache名称起源的好处,政治问题搁置不谈,我想做出一些事实上的纠正。Apache HTTP服务器是用C语言编写的。它由Apache基金会维护,该基金会还支持许多开源Java项目,但HTTP服务器不是Java编写的。然而,我想知道Java语言的创造者是否真的是爪哇人。 - Luke 10X

5

1

0

IOS使用Objective C,而Android使用Java和Kotlin。我不知道一些转换工具能帮助您实现所有功能的程度。所以在我看来,答案是否定的。 混合应用程序开发可以帮助您。您只需编写一份源代码即可在两个平台上运行。您需要重新开发应用程序。


0

首先,Java被应用于比C#更多的领域。这是需要知道的信息,因为C#无法通过一个UI来覆盖桌面、移动和Web。

顺便说一下,推荐的解决方案是CodenameOne或者——如果你想要使用JavaFX实现你的应用——可以使用Gluonmobile,它使用了GraalVM,这是一个针对IOS的预编译器。

在这两种情况下,由于有一个抽象层帮助你实现这两个平台——Android和IOS——所以你可以访问设备的硬件。在这种情况下只需编写一个应用程序,就可以为两个平台编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接