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

7bsow1i6  于 2023-06-25  发布在  iOS
关注(0)|答案(5)|浏览(162)

我是一名Web开发人员,正在考虑深入研究移动的应用程序开发。到目前为止,我知道的语言是PHP,Python,SQL,Js,HTML和CSS,现在所有这些都很好。目前,我开始深入研究Java,因为就我所知,Java是原生Android App开发所使用的语言。有趣的是,我看到一些帖子(也在这个论坛上)说Java也可以用来开发iOS兼容的应用程序,而其他消息来源评论说苹果完全反对跨开发者,当涉及到原生选择和最佳UX时,你应该使用Swift开发iOS应用程序。所以我在这个论坛上想知道答案;你能用Java开发iOS应用吗?

cnwbcb6i

cnwbcb6i1#

帖子已经有几个月的历史了,但我想有类似问题的人可能会在网络搜索中找到这个,所以这个回复是给他们的。在上下文方面,我专业地编写了大约五年的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的座右铭曾经是“写一次,到处运行”,但这就是事情的发展方式。

  • (编辑,2023年6月:感谢下面的评论者指出了这个答案中的一些缺点,并澄清了我的一些误解。我已经更新了文本,以反映一些反馈,例如删除无关的旁白,并使整体基调更加平易近人。
igetnqfo

igetnqfo2#

你可以的
其中一个工具是Codename One。https://www.codenameone.com/
有关此主题的更多信息,请随时咨询此线程:How can one develop iPhone apps in Java?

vmjh9lq9

vmjh9lq93#

是的,这是可能的。https://github.com/Anuken/Mindustry是一款用Java编写的开源RTS游戏。它有一个iOS端口,通过RoboVM的开源分支编译。

zvms9eto

zvms9eto4#

IOS运行在Objective C上,Android运行在Java和Kotlin上。我不知道有多少转换工具可以帮助你实现所有的功能。所以在我看来答案是否定的。混合应用程序开发可以帮助您。你有一个源代码,可以在两个平台上运行。你必须重新开发应用程序。

ulmd4ohb

ulmd4ohb5#

首先,Java比C#在更多的领域中使用。需要的信息,因为C#没有办法通过一个UI到桌面,移动的和Web。
顺便说一下,推荐的解决方案是CodenameOne,或者-如果你想用JavaFX实现你的应用程序-使用Gluonmobile,它使用GraalVM,一个IOS的提前编译器。
在这两种情况下,您都可以访问Android和IOS设备的硬件,因为有一个抽象可以帮助您实现Android和IOS两个平台。在本例中,编写一个应用程序并为两个世界编译。

相关问题