热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

使用Swift语言编写Android应用入门

Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。本文解释了如何在你的安卓手机上运行一个简单的

Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。本文解释了如何在你的安卓手机上运行一个简单的“hello,world”程序。

常见问题解答

让我们来回答如下经常被问及的问题吧:

这是否以为着我能够用Swift快速的开发安卓应用?

做梦,虽然Swift编译器可以胜任在安卓设备上编译Swift代码并运行。这需要的不仅仅是用Swift标准库编写一个APP,更多的是你需要一些框架来搭建你的应用用户界面,以上这些Swift标准库不能提供。

另一方面,一个理论上可以从Swift调用Java应用程序接口,但是不同于Objective-C,Swift编译器对Swift-to-Java桥接毫无作用。

预备知识

为了能顺利使用这份向导,你需要:

1. 可以编译Swift源码的Linux环境。stdlib目前只能在Linux环境下编译成安卓可用版本。在尝试为安卓构建之前,确保你能够参考Swift项目的README为Linux做编译。

2. 安卓NDK,高于或等于21版本,在以下链接提供下载:

http://developer.android.com/ndk/downloads/index.html.

3. 一台可以远程调试的安卓设备。我们需要通过远程调试来讲stdlib结果部署到安卓设备上。你可以按以下官方向导来远程调试:https://developer.chrome.com/devtools/docs/remote-debugging.

安卓上的”Hello, world" 1. 构建Swift Android stdlib 依赖

你可能注意到了,为了构建Linux下的Swift stdlib,你需要apt-get install libicu-dev icu-devtools。 简单来说,构建在安卓设备上使用的Swift stdlib需要libiconv和libicu。然而,你需要这些库的安卓设备版本。

为安卓设备构建libiconv和libicu:

1. 确定你安装了 curl, antoconf, antomake, libtook 和git。

2. 克隆SwiftAndroid/libiconv-libicu-android项目。通过命令行执行以下命令:git clone git@github.com:SwiftAndroid/libiconv-libicu-android.git。

3. 在命令行执行 which ndk-build。确定在你下载的安卓NDK里ndk-build能显示可执行路径。如果不能显示,你需要将安卓NDK的目录加到你的PATH里。

4. 在命令行输入libiconv-libicu-android 目录,然后执行 build.sh。

5. 确定构建脚本在你的libiconv-libicu-android目录构建了 armeabi-v7a/icu/source/i18n和armeabi-v7a/icu/source/common目录。

2. 构建安卓使用的Switf stdlib

输入你的Swift目录,然后运行构建脚本,将路径传递给安卓NDK和libicu/libiconv目录:

$utils/build-script\-R\#BuildinReleaseAssertmode.--android\#BuildforAndroid.--android-ndk~/android-ndk-r10e\#PathtoanAndroidNDK.--android-ndk-version21\#TheNDKversiontouse.Mustbe21orgreater.--android-icu-uc~/libicu-android/armeabi-v7a/libicuuc.so\--android-icu-uc-include~/libicu-android/armeabi-v7a/icu/source/common\--android-icu-i18n~/libicu-android/armeabi-v7a/libicui18n.so\--android-icu-i18n-include~/libicu-android/armeabi-v7a/icu/source/i18n/[/code]
3. 编译hello.swift并在安卓设备上运行

创建一个简单的Swift文件,命名为 hello.swift:

print("Hello,Android")[/code]

使用步骤2中构建好的Swift编译器来编译Swift源码,目标设定为安卓:

$build/Ninja/ReleaseAssert/swift-linux-x86_64/swiftc\#TheSwiftcompilerbuiltinthepreviousstep.-targetarmv7-none-linux-androideabi\#Targetingandroid-armv7.-sdk~/android-ndk-r10e/platforms/android-21/arch-arm\#UsethesameNDKpathandversionasyouusedtobuildthestdlibinthepreviousstep.-L~/android-ndk-r10e/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a\#LinktheAndroidNDK'slibc++andlibgcc.-L~/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.8\hello.swift[/code]

这样应该会在你执行命令的目录下生成一个hello可执行文件。如果你试图在你的Linux环境下执行这个可执行文件,你会看到如下错误:

代码如下:
cannotexecutebinaryfile:Execformaterror

这正是我们想要的错误:因为这是为执行在安卓设备上构建的可执行文件--它不应该能在Linux上执行。下一步,让我们将它部署到安卓设备上来执行它。

4. 将构建好的产品部署到设备

你可以使用adb push 命令来将构建好的产品从Linux环境拷贝到安卓设备。当你执行adb devices命令前确定你的设备连接好并且可以被列出,然后执行以下命令来拷贝Swift Android stdlib:

$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftCore.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftGlibc.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftOnoneSupport.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftRemoteMirror.so/data/local/tmp$adbpushbuild/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftExperimental.so/data/local/tmp[/code]

另外,你也需要拷贝安卓NDK的libc++:

$adbpush~/android-ndk-r10e/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so/data/local/tmp[/code]

最后,你需要拷贝你前一步构建好的hello可执行文件:

$adbpushhello/data/local/tmp[/code] 5. 在安卓设备上执行“Hello, World"

你可以在安卓设备上使用 adb shell 命令来执行hello可执行文件:

$adbshellLD_LIBRARY_PATH=/data/local/tmphello[/code]

你可以看到以下输出:

代码如下:
Hello,Android

祝贺你!你刚刚在安卓上运行了你的第一个Swift程序。


推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
author-avatar
0o可人儿o0_962
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有