此情可待成追忆:Java Mac 版的黄金时代
来源:http://www.tudoupe.com时间:2022-06-26
作者:史蒂夫·汉娜
翻译者 | Sambodhi
策划 | Tina
在App Store之前,Java桌面应用程序是OS X的第一个公民,它摧毁了所有的乐趣。
在本文中,我将以简略的校记,描述了MacJava开发的黄金时代,经常被公众遗忘,那是千年的第一个十年,从2001年的OS X发布到2011年的Mac App Store。HTML5的出现可能扰乱了Java商业社区,然而,开发Mac桌面应用程序的Java开发者不受影响。直到苹果宣布其MacApp Store计划,只有当事情发生时,它们才会成为现实。
大约在2006年,我用Java开发了一个工具,使用OCR转换PDF文档为文本文档.起初,我只在Mac上发布,苹果的下载区是一个巨大的流量来源.它远远超出了其MacApp Store的最终替代。彼时,Mac仍装有Java,因此,使用Java开发的Mac应用程序之间没有“大小”差异。它的外观和使用看起来像一个本地应用程序,关键在于在这个非常有限的网络宽带时代,应用的大小非常小。
1Windows市场
我打算把这个应用程序放在Windows上,但因为我是Mac用户,我决定在解决这些问题之前把它搁置一边。因为它是用Java写的,所以移植到Windows并不难。我一直在使用一些Mac源库来增强图像,我需要为他们开发一个Windows友好的替代方案.我还要修改一些UI项目(例如,用退出代替退出,还有一些小修改到文件关联。
在将它移植到Windows的过程中,最困难的事情是为它开发安装程序。一开始,我用 Launch4J创建了一个Windows启动程序。我把它作为 zip压缩包发布,让用户将其复制到他们需要的计算机上的位置。但是,被要求提供“适当”的安装程序后,我使用Install4J创建安装程序。因为安装程序本身是Java应用程序,因此,我用 Launch4J创建了这个安装的发射器。
对Windows的影响并不好,因为它并非完全原创,但Windows用户并不像Mac用户那样选择性,所以它已经“足够好”。
当我第一次发布该工具的Windows版本时,由于 Windows市场远大于 Mac 市场,因此,我预计销售将大幅上升。但我很失望地发现,尽管Windows的市场规模更大,但它的分布也更为广泛。在 Mac 上,你只需要把应用程序放在苹果网站的下载区,几乎所有的用户都可以得到。所有Mac用户在寻找软件时都会到这里。
但是,在Windows上,没有地方宣传我的申请.有数百个下载网站,每个网站都有类似于我的应用程序的软件。在我的首次发布中,我把它提交到几十个下载网站。我甚至可能支付了一份提交服务,广告说,他们将自动在数百个网站上发布您的应用程序。但是,第一次发行之后,工作变得过于繁重,但好处是微不足道的。Windows版本没有帮助我的销售。每个Windows版本的销售,我可以卖出100台Mac版本。所以,对于大多数版本,我把Windows版本上传到CNET.com上并下载(com),然后就不再发布了。
在随后的数年中,我逐渐建立了一个相当稳定的模型,每两三个星期都会有一些更新。我将在Mac更新中发布Mac版本,Windows版本在CNET上发布。每个更新包含了错误修正和新功能,这些新发布将吸引一些游客,以维持下载量。
2App Store:我们不会服务像你这样的人
2006年至2010年间,桌面电脑领域最大的发展是:
这是很重要的,因为它是另一个流行的新平台,在这个平台上没有Java。
2.JavaFX.这很重要,因为它将大量需要的青年元素注入了Java的老化的UI工具包。
这两个东西与我和我的工具没什么关系,至少没有直接影响。我的应用程序在iPhone上并不重要,因为这是为了处理你通常在桌面电脑上使用的文件。我的用户界面非常简单,我不需要JavaFX提供的任何奢华的新图形。尽管如此,我仍然对他们感兴趣。因为我的野心超出了我的谦卑的OCR应用程序,现代的图形和现代的平台对我来说是很有吸引力的,以至于我无法忽视。
2010 年,苹果公司宣布了MacAppStore,引发了极大的轰动。苹果给了我一个承诺,但在一次记者招待会上,我把那个承诺从我身上夺走了。他们宣称,他们将把Mac应用程序放在新的应用程序商店里.这是好的方面。不好的方面是,他们不再推荐自己的Java版本,而且,未來的OSX不會包含Java。此外,为了给Java一个致命的打击,他们也明确在App Store指南中规定,App Store应用程序不允许使用任何过时的图书馆。
我并非一名律师,我生来是个乐观主义者,因此,我还抱有一种想法,那就是,我还有办法把我的应用程序放在App Store上。我是说,声明并不明确表示Java应用程序不允许进入。它只是说Java已经被放弃了,而且,应用程序不再使用任何废物存储器.你必须把这两个东西结合起来。这就是要得出的结论。就像拍电影一样。你不会看到那些坏人死的。也许他从50楼倒下来时还活着!很遗憾,苹果技术支持部门证实,我的应用程序不能满足App Store的要求,因为它依赖Java。
3Mac上的Java的未来是阴暗的
在记者会之后的几个月里,人们质疑Mac上的Java的未来。Sun(现在是Oracle)在Linux和Windows上维护Java,苹果维护和开发Mac版本。现在,苹果表示,他们再也不会这么做。几个月后,Oracle宣布他们将接管Mac JDK的开发,并将其纳入OpenJDK7中,但要花点时间,在2011年1月的MacAppStore大开店之前,它是不可能实现的。
4替代 JVM
我从心底里感到,MacApp Store是无限财富的钥匙。考虑到当时的情况,我被排除在外。那时,我还可以到苹果网站的下载区域,但是,从现实的角度来看,苹果有了App Store之后,还能坚持多久。我记得,App Store刚刚推出几天前,苹果关闭下载区域.
在我看来,我有三个选择:
1.Objective-C将我的应用程序重新写入本地Mac应用程序。
2.等待Oracle的新JDK7Mac版本并试图将其与我的应用程序捆绑。
3.使用另一种JVM并将其绑定到我的Mac上。
我是一个“无保留”的人,所以我基本上尝试了所有三个选项,但最终选择2(Oracle's JDK7)赢了。
在那一年里,我花了大量的时间测试其他Java虚拟机。我看到所有充满希望的东西,但是我最记得的是GCJ(The GNU Compiler for Java),Avian和IKVM+Mono。所有这些都有同样的局限性: 没有旋转支持.如果我能重新构造代码,使UI完全模块化,这样我就可以在这些替换编译器中编译业务逻辑,它与另一个UI工具箱(如 SWT 、 QT 或 Cocoa)相配。
我发现GCJ的输出很难处理,我无法想出任何具体的细节,我只是记得我花了几个星期与它战斗,最后我整个身体受伤了,但是我找不到任何切实的办法。
我喜欢使用Avian,但是它的运行时库不包括所有的标准JavaSE类,因此需要太多的改变才能成为现实。也许我太懒了。我不想做这些改变。我和Avian做了一些测试,使用 SWT 作为用户界面,效果相当好。他们很快就开始了,而且可执行文件的大小也相当小,因此,虽然它不适合这个项目,我心里想起了,以备将来之需。
到目前为止,另一个工具链的最好经验是 IKVM+Mono。IKVM是一个Java to DotNet编译器。Mono(英语:Mono)是DottNet的一个开放源代码、跨平台版本。我可以删除我的Swing代码,并只为我的应用程序生成一个商业逻辑瓶子,然后使用IKVM将其转换为 one.DLL文件。MonoMac项目使用椰子绑定,因此,我可以在接口构建器中创建一个用户界面,然后用C#写一些粘贴代码,将它连接到我的应用程序的业务逻辑。
自从Oracle's JDK7有一个早期访问版本的时候,我从来都没有发布一个单一版本的应用程序,这让我在发布时基本上没有修改,因此大大减少了长期维护工作。
5为App Store捆绑应用程序
JDK7诞生了,唯一的困难是捆绑原始应用程序。我使用旧的绑定和苹果的Java绑定,JRE对应用程序没有约束力,相反,它与系统中的Java安装有关。在 JDK7 中,你需要将整个JRE结合到应用程序包中。这将使您的应用程序更大,但与此同时,您不再需要依赖过时的API。这个应用程序将独立。
Oracle提供了工具 javafxpackager,这应该帮助您将应用程序捆绑成原始应用程序,然而,它缺乏部署App Store所需的一些重要功能。我只是在记忆力上工作,但是我还记得,除其他之外,在新的应用沙盒中,这个工具不太好。所有MacApp Store应用程序都运行在它们的沙盒中。它们在~/Library/Containers/YOUR_APP_ID目录中都有自己的“游戏场地”。他们所有的文件都存储在那里。只是需要一点额外的小心和准备。但这确实是一个很麻烦的事情!)
我正在准备写自己的包,这就是开放源代码社区来救我的时候。一个名为 InfiniteKind的善意开发者开发或复制了应用程序绑定,它可以与新的JDK7一起使用,它还包括一些调整以满足苹果App Store的要求。谷歌搜索结果表明,这个应用程序包项目仍在运行,我还对README文档做了一些贡献。
终于,它第一次出版了近一年后,我可向MacAppStore提交我的申请。由于捆绑的Java运行时间,我的应用程序增加了50MB(压缩),但这并不重要,只要能增加销售量。结果是,这不会对销售产生实质性影响。我猜想,如果没有这种渠道,那些从App Store购买的,也会在我的网站上购买,因此,这实际上是我的销售来源的转移。应用商店的销售额每年都会以某种方式增长,但与此同时,网站的销量也将下降。现在,我的大部分销售来自App Store。
6最后还是成功了……
对于我来说,作为一个Java开发者,在Mac上放弃Java是一个痛苦的事情。但是回顾过去,我认为这样做是正确的。也是无法避免的。如果他们没有扳机,因此,他们更有可能最终被迫做出改变,而他们等得越久,就会越痛苦。
通过将Mac移植到标准的OpenJDK,可以确保Mac用户能够遵循Java的开发,他们不再需要等待一个不愿的第三方管理员更新他们的版本。
尽管如此,在那个时候,当运行时,Java必须与每个应用程序结合,那时这是一种不必要的负担,现在仍然如此。史蒂夫·乔布斯曾经说过:“没有人会使用Java,这是一个巨大的链子。没有人再使用Java了,它是一个巨大的重型球和链子,因为JRE是与每个Java应用程序结合的,所以每次你下载应用程序更新,用户都会收到提示。当然,在不同的应用中,还有一些方式来分享这个锁链。我总是对这个问题感到沮丧。这也是jDeploy开发的重要原因。
下次,我们将讨论在桌面上Java的衰落和衰落.具体来说,如何处理桌面上的HTML5巨人(JavaFX),它如何静静地定位自己为当今跨平台桌面开发的最佳平台。
Tencent所有业务集团继续削减员工;词汇跳到更新价值;阿里宣布终止甲壳虫集团业务|问讯
云 Computing的全球变化与中国的故事
操作系统关闭, 后部保持, 为什么前端仍能一直运行?
软件架构如何“不变到可变”
活动推荐
新的重量 | Kubernetes室内战斗课程
Kubernetes现在具有Linux的地位,作为一名资讯科技人员, 不再是一个没有学习的问题.问题在于什么时候开始学习, 如何学习, 以及到何种程度.二十年技术老兵,通过4个主要项目+5个示范视频,为了给你一套深入的,逐步学习的路径,真正认识到快速手K8s!
检查一下几个错误 ?
下一篇:没有了
相关新闻
- 2022-06-26 微软 Win11 发布一周年,现在能打几
- 2022-06-26 此情可待成追忆:Java Mac 版的黄金
- 2022-06-26 美国最高法院取消堕胎权;宁德时
- 2022-06-26 微软Edge浏览器IE模式标签页现卡死
- 2022-06-26 美国“裂开”了?抗议者围堵州议
- 2022-06-26 win7安装office出现错误1719解决步骤
- 2022-06-26 美国“裂开”了?抗议者围堵州议
- 2022-06-26 微软 Edge 浏览器 IE 模式标签页出现
- 2022-06-26 微软修复 Win11 Wi-Fi 热点问题
- 2022-06-26 曾坐拥4亿铁粉,如今无人问津!微
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
