心血来潮
早就听说 Haxe 可以使用一种语言,开发多种平台的原生项目,今天尝试一下
安装开发环境
- haxe
一开始下载的压缩包,解压之后运行 haxelib 时提示找不到 neko.dll,又下了 neko 的压缩包,运行时直接报错,原因不明,所以最后老老实实下载了安装程序,这才运行正常
- openfl
安装 openfl 时又出问题,报 Httperror 503
,lime-7.5.0 包下载不下来,手动下载这个包,然后继续安装,一切正常
编译 Apk
测试项目就是最简单的显示一张图片的官方示例
一开始用的 NDK 是 r18b,编译时报 typeinfo.h
找不到,我电脑上还有 r12b 的版本,搜了一下,发现在这个版本的头文件目录中有这个文件,然后回头看官方的说明,支持到 r13b,更新的版本理论上可以,但没有测试过,想了想可能是 NDK 版本的原因,改成使用 r12b 版本,编译运行成功
后记
Java 跨平台是一次编译,到处运行,由运行时屏蔽平台差异性
Haxe 则是将源码翻译成平台原生代码,比如 C/C++,AS3 等,这样理论上可以避免运行时这个中间层带来的性能下降
但是有些平台差异是无法屏蔽的,即使在这样的平台和环境中,要保证你的代码真的可以跨平台,那你只能使用所有平台功能的最大子集,这不免要牺牲有些平台的关键特性了,这在项目初期就要评估取舍
另一方面,像 Haxe 这种,虽然系统提供了代码翻译功能,还要提供一套各平台的库和相应的胶水代码,而这些代码有些由社区提供,稳定性和质量参差不齐,反而要求开发人员要有较高的能力把控这中间的各个环节舍。
补注
-
haxe
是一门静态
中间
编程语言,同时包含相应的平台和工具集,提供把代码翻译成各平台原生代码的能力 -
neko
是一门类似 lua 的脚本语言,包含对应的虚拟机
-
lime
是基于 Haxe 的一套中间层,提供跨平台的窗口和应用程序生命周期管理的功能,同时包含其它功能,如操控渲染,声音等有用的功能
-
openfl
基于 Haxe 和 lime 的一套框架库,提供了类似 Flash 的 API 和库工具(可以沿用 Adobe Animate 的资源流程,使用 swf 格式资源),方便进行图形开发
转载于:https://www.jianshu.com/p/ac0fa6f39477