写点什么

前 Sun 开发人员为 Android,iOS 等其他移动平台提供 JAVA 的 WORA 支持

  • 2012-09-24
  • 本文字数:2702 字

    阅读完需:约 9 分钟

2012 年,在以色列出现了一个名为 Codename one 的公司,该公司旨在生成一种新的 Java SDK,该 SDK 将允许 Java 开发人员通过一个单一的代码库就能为包括 iOS,Android,BlackBerry 和 Windows Phone 等一系列的移动设备编写本地应用。对于 iOS,Codename one 通过自己的云服务器先将 Java 代码转换成 C 或者 Objective C 代码,然后再将转换后的源代码编译成本地应用程序。这使得利用 Java 来编写 iTunes 兼容应用成为可能。

Codename one 的两大创始人分别是 Chen Fishbein 和 Shai Almog。Fishbein 是 Java ME 标准用户界面工具——Lightweight User Interface ToolKit(LWUIT)的创始人和首席架构师,并且他还开发了当下最成功的 Java ME 开发工具之一的 Sprint Wireless ToolKit。

该平台现正处于 Beta 测试阶段,InfoQ 下载后进行了测试。这个过程花费了很长的时间。为了构建代码,需要将他们基于云服务的网址添加到代码库中。代码将被上传到该服务器并进行编译,然后生成一个二维码(QR code),通过该二维码你可以下载并安装最终的程序到设备中。出于好奇,为了更多的了解该公司,我们采访到了该公司的联合创始人兼 CEO Shai Almog 先生,询问了一些关于他们最新发布对 Windows Phone 提供支持的事宜。

InfoQ:你好 Shai,这个想法由来已久了。这真的是一个全平台通用的 Java 环境吗?

Almog:Java 不仅仅是一个虚拟机,它也是一个统一的堆栈,一系列的工具集,实际上更是一个完整的 Java 生态圈。Java 的意义在于它的一触即发。即便是 Android,也需要一套不同的流程,一套不同的工具集以及一个针对不同配置的的模拟器。这样以来,我们反而失去了“一处编译,到处运行(WORA,Write Once Run Anywhere)”的优势。

InfoQ:对于不同的环境需要不同的修改吗?

Almog:不完全是,Codename one 为不同的平台提供统一的 API 支持,并将它们直接集成到 Java 环境中,通过一个统一的环境来解决所有不同的细节问题。

InfoQ:是否为每一个平台都配置了相应的 JVM?

Almog:不,这取决于平台。对于 Android,我们主要还是使用 Dalvik 虚拟机。但是对于没有 Java 环境的 iOS 平台,我们就将 classes 文件翻译成 Objective C 的代码,并且使用 Boehm 的垃圾回收器。该回收器能运行 Java 代码,但他并不是真正意义上的 Java 虚拟机。在 RIM 和其他平台上,我们通过平台上现有的有限 Java 子集特性来进行编译。这样就可以获得跟 Java 一样的 WORA 体验了。

InfoQ:你们试图在每个版本的发布中都对所有平台的所有特性都进行支持吗?

Almog:我们在尽力,但由于底层设备的变化,通常情况下很难达到。SQL 就是一个很好的例子,开发者都想使用它,但是一些低端的设备并不支持。开发者可以查看每个特定环境下的支持情况。我们的策略是提供一个尽量通用的集合,并尽可能地完善它。

InfoQ:我需要一些真实的设备来进行开发吗?

Almog:理论上是不需要,但是你不能仅仅通过鼠标来体验应用程序;你需要真实的拿着你的手机并且感受它来获得准确而真实的性能和使用感受。我们就因为一些版本上的细微变化而使用不同的 iPad。

InfoQ:对于这么多不同的 Android 版本,它实现起来应该比较困难吧?

Almog:实际上 iPhone 更困难。Apple 在不断的变化,在 4.2 上运行的方式可能在 4.3 上就是另外一种完全不同的做法。此时你会发现一切都运行不起来了。Android 虽然有很多的版本,但是他们通常很少会有破坏性的改变,所以,差异并不是很大。

InfoQ:应用程序的使用者需要安装什么特定的程序吗?

Almog:不需要,一切均包含在应用中。这可以帮助我们保持稳定性我们保持的很稳定的原因是因为我们不支持一些移动的虚拟机目标。不同版本的设备差异化很大,但是我们只关注各个版本之间的兼容性问题,如此一来,开发者们也不需要去关注它了。

InfoQ:对于 Java 开发者来说,学习曲线是怎样的?

Almog:这其实相当的简单。对于大部分的 Swing 开发者来说,跟基于 XML 的 Android 比起来,他更像是 Swing 的开发方式。你可以使用内置的调试器,这里没有 APK 文件,你也不需要等待模拟器启动,我们的模拟器在每次运行的时候就能立刻启动起来。

InfoQ:有些人说 Swing 有点呆滞,并没有原生 Windows 应用的那种用户体验。你们的平台有什么好的做法来使他们看起来跟时尚一些吗?

Almog:Swing 的界面是很难定制的,由于它是和 JDK 的版本进行绑定的,所以不能在外观和体验上跟操作系统保持一致。Codename One 允许在组件模型上做深度的风格和主题定制,而且因为我们是 SaaS 和 OpenSource 的成员,我们可以不通过 Sun/Oracle 缓慢的升级流程,而独自在应用程序的体验上保持不断更新。这样就能保证一个时尚的用户体验。

InfoQ:对 3D 图像的支持如何?

Almog:很遗憾,对于这一点,我们目前还不支持游戏类的开发。但是相信在未来可能有所改观。

InfoQ:那对于那些设备特定特性的支持呢,比如 I/O,GPS,摄像头,音频等等?

Almog:我们都支持这些基本的 API,我们正在开发手势操作,并且现在有些已经可以支持了,但是如果你需要一些我们并不支持的特性,那么我们可以给你提供本地集成。你可以定义接口,然后我们的插件会为你的设备生成本地代码,这样你就可以调用那些本地功能了。

InfoQ:产品是如何收费的?

Almog:基本版是免费的,而且我们会一直这么做下去。回报社区是非常重要的。每个月我们会为除了 iOS 以外的其他平台提供 100 次的构建服务。如果你是本地构建的话,你可以随意构建,但是我们的构建服务器限制你只能进行 100 次构建。iOS 平台被我们限制成一个月只能进行 5 次构建,因为对于我们来说,每一次的构建代价都是相当昂贵的。你还可以每个月花费 9 美元,以获得不限次数的构建。我们还为一些额外的特性提供了更多的定价方案,比如宕机保护。

InfoQ:你们的文档和支持做的怎么样?

Almog:《开发指南》是我们邀请社区帮忙编写的一个 100 多页的 Google 文档。我们也维护了一份详细的 JavaDoc 并且花费了大量的时间在维护 Google Group 邮件列表。

InfoQ:看起来你们好像在做一件伟大的事情啊。那你们下一步有什么打算呢?

Almog:马上就会有很多好消息了。到九月下旬的时候,对 Windows 设备的支持将会开放。届时我们将添加应用内的支付功能,以及针对客户端和模拟器开放更高级的 API,提供给开发者更多的模版。而且我们刚刚公布了同 Vserv 的合伙计划,这样开发者在不改变任何代码的情况就能添加广告进自己的程序。

随着支持多移动平台的公司越来越多,Codename One 可以帮助那些开发更多新应用的公司提高市场占有率和利润。该 SDK 可以在其官网上进行下载。

查看英文原文: Ex Sun Developers Bring WORA Java Support to Android, iOS, and Other Mobile Platforms

2012-09-24 05:022682
用户头像

发布了 31 篇内容, 共 96653 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

Java中的内部类与匿名内部类详解

共饮一杯无

Java 内部类 11月月更 匿名内部类

Grafana 最新开源项目 Phlare 速体验

Grafana 爱好者

云原生 可观测性 Grafana 11月月更

去哪儿的常态化容量保障是怎么做的?

TakinTalks稳定性社区

【愚公系列】2022年11月 微信小程序-Request网络请求的封装

愚公搬代码

11月月更

随机森林-概述

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

图片懒加载

源字节1号

软件开发

云原生系列四:Yelp 如何在 Kubernetes 上运行 Kafka

叶秋学长

kafka Kubernetes 云原生 11月月更

超全!前端面试题大汇总

肥晨

前端面试题 11月月更 超全前端面试题

微服务架构组件总结篇

邱学喆

负载均衡 Spring Cloud 注册中心 配置中心 熔断服务

Java中的static关键字详解

共饮一杯无

Java 关键字 11月月更

【LeetCode】爱生气的书店老板Java题解

Albert

算法 LeetCode 11月月更

SQL Sever提供的字符串类型

乔乔

11月月更

易观千帆 | 2022年9月银行APP月活跃用户规模盘点

易观分析

金融 手机银行

还担心接口乱糟糟?快来试试“斯瓦格”在线文档管理平台!

wljslmz

华为云 接口管理 swagger 11月月更

Vue组合式函数(二)封装一个请求

Augus

Vue3 11月月更

Go语言入门13—并发

良猿

Go golang 后端 开发 11月月更

不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?

汪子熙

sdk SAP Fiori SAP UI5 11月月更

pyside6 qml 支持更新液位的伪3D圆柱

Mr_No爱学习

学生管理系统考试试卷存储方案设计

乖乖IvyShine

SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(2)

百里丶落云

数据库 后端 11月月更

从零到一带你构建可靠的大型分布式系统,不愧是IT领域又一神作!

Java永远的神

Java 分布式 程序人生 后端 架构师

美图是如何搭建压测监控一体化平台的?

TakinTalks稳定性社区

压测平台

架构实战营模块 4 作业

陌生流云

#架构实战营

Redis 的 Sentinel 系统

月明风清

redis Sentinel 系统 哨兵机制

QUIC不是TCP的替代品

俞凡

TCP 网络 QUIC

从3开始,在业务系统中增加分页功能

闫同学

go语言 11月月更 后端系统

HTML学习笔记(二)

lxmoe

html 前端 学习笔记 11月月更

【kafka运维】TopicCommand运维脚本

石臻臻的杂货铺

kafka Kafka实战 kafka运维 11月月更

JavaScript基本数据类型和引用数据类型详解

肥晨

js 11月月更 数据结构js

下一代TCP: 网络演进的平台

俞凡

TCP 网络

简单剖析开发:区块链杠杆合约交易所的核心优势

W13902449729

区块链交易所 合约交易所开发

前Sun开发人员为Android,iOS等其他移动平台提供JAVA的WORA支持_Java_Victor Grazi_InfoQ精选文章