Swift语言迈出侵蚀Androidd第一步
来源:互联网 发布:docker swarm 网络 编辑:程序博客网 时间:2024/05/19 19:55
“作为一款编程语言,Swift与Java其实非常相近,与C#也拥有大量类似的特性,而且将Swift代码编译为Android可运行形式并不是非常困难,”Shapiro表示。虽然目前尚不清楚Swift是否真的胜过Java,不过Shapiro指出,Swift是一种新型语言且拥有大量更为现代的结构,而Java在这些方面则需要经过持续改进方能与之匹敌。
尽管最初以开发面向iOS与OS X系统平台的应用程序作为设计目标,但如今苹果公司的Swift语言即将把面向Android系统的开发能力作为其开源Swift发展方向当中的重要组成部分。而且开发根据开发者Romain Goyet在其最近的一篇博文中所言,开发人员现在已经可以开始利用Swift进行面向Android的开发工作。
Goyet指出,Swift语言采用LLVM编译器——顺带一提,Goyet最广为人知的事迹就是对苹果Siri进行了逆向工程。“目前的Swift编译器会接入到LLVM当中,从而生成二进制文件,”他写道。“同时值得指出的是,LLVM与Swift都是由Chris Lattner设计而成。”相较于针对特定架构生成代码,LLVM能够面向设想中的设备生成汇编代码,而后将其转换为能够切实与目标架构相对接的实际代码。Goyet这样描述整个处理流程:Swift编译器首先根据要求生成LLVM-IR(即中间表示);LLVM则根据中间表示同时生成ARM ELF文件格式。接下来能够直接使用Android系统之上原生代码语言的Android NDK则生成二进制链接,直接指向以上生成的对象文件。该文件最终被打包成Android应用。
不过实际编码过程当中并不一定会涉及上述全部步骤,Goyet指出。“其中的最大问题在于SwiftCore库的缺失。……就目前而言,苹果公司已经发布了一套面向iOS、OS X以及WatchOS的SwiftCore库。但很明显,其还没有发布任何Android版本。”不过并非所有Swift代码都需要依托于SwiftCore库。“因此只要我们使用的Swift子集不涉及SwiftCore,则不会出现任何问题,”Goyet解释道。
不过Goyet目前还没有看到任何利用Swift语言开发而成的Android,“这是因为Swift语言本身仅仅是问题中的一个侧面。另一大侧面或者说最难解决的因素在于,其对于Android UI框架的支持非常有限。另外,目前Android系统上也还没有任何可用的Swift UI框架。”Goyet预计苹果公司为Swift制定的开源计划肯定会将SwiftCore囊括于其中。“接下来在Android平台上实现SwiftCore库应该会成为Swift语言开源重组工作中的重要一环。”
Goyet并不是惟一一位冒险利用Swift语言在Android平台上进行应用开发的尝试者。移动开发工作室ArcTouch早在去年就发布了一款概念验证性计算器应用,且同时面向Android与iOS平台。ArcTouch采用的是一款定制化编译器,其能够对Swift代码进行解析并输出为Java源代码。作为基础素材的Swift代码由苹果Xcode IDE进行编写,并最终在谷歌的Android Studio IDE当中完成构建流程并生成Android APK。
当Swift最终以开源面貌正式亮相之后,各开发工具厂商将能够编写出与之相适应的IDE,开发人员则可以利用这些IDE在Swift中进行代码编写并直接将其编译至Android系统平台,ArcTouch CEO Eric Shapiro在接受采访时解释称。扣丁学堂最新开设课程Swift语言,同时开设android课程。
- Swift语言迈出侵蚀Androidd第一步
- 迈出学习C语言的第一步
- 迈出第一步
- 迈出第一步
- 迈出第一步
- 迈出第一步
- 迈出第一步
- 迈出第一步
- 迈出自己的第一步
- 终于迈出FLEX 第一步
- 终于迈出了第一步!
- 今天,开始迈出第一步!
- 终于迈出了第一步
- 我迈出了第一步
- 迈出第一步,博客开张
- 迈出第一步erlang
- 迈出你的第一步
- 编程迈出了第一步
- Eclipse中修改作者变量${user}
- python发送email
- 网页设计中常用的20个Web安全字体
- (转)如何在Eclipse中查看JDK类库的源代码
- Sping Security-授权
- Swift语言迈出侵蚀Androidd第一步
- 《秘密》卷一:秘密-秘密的发现
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 编码转换函数
- 代码插入测试
- MYSQL: Cannot delete or update a parent row: a foreign key constraint fails
- codelity刷题---MinAvgTwoSlice
- Nginx-openresty+mysql+redis使用篇(一)
- Package manager has died at android.app.ApplicationPackageManager.getInstalledPackages