能访问Andoriod的简单脚本

2020-06-20 09:02
主页 > 资讯 > 专题片文章

今天,软件开发中最有趣的工作发生在两个极端:巨型云服务器和微型移动设备。这些区域解决了完全不同的问题,因此具有不同的工具支持。服务器开发通常使用脚本语言将不同的组件绑定在一起并完成复杂的自动化任务,而移动开发则侧重于特定设备和用户的特定功能和需求。

然而,这两个极端有一个共同的语言:Java。不管是Android还是Spring框架,当今许多最流行的技术都采用了一种被世界广泛理解和支持的语言。这种常用的语言可能会导致你认为有巨大差异的领域之间惊人的交集。Java编程打开了许多跨平台选项的大门,例如轻松地将服务器代码移植到Android设备,或者从现有组件绑定本机平台功能。

本文将探讨Ruboto项目,该项目旨在搭建脚本语言和Android之间的桥梁。您将了解到Ruby和Android,它们如何在Dalvik虚拟机中协同工作,如何构建和部署您的脚本,以及这项技术在提高程序员生产力和应用程序灵活性方面的潜力。

红宝石背景

许多脚本语言都希望受到程序员的青睐,但是Ruby目前处于有利地位。最著名的是,它支持Rails web框架,但是许多开发人员也喜欢Ruby的简单和优雅。Ruby是一种面向对象的脚本语言,具有鸭子类型和元编程等现代功能,它不仅强大到足以支持各种复杂的体系结构;而且还很简单,可以执行各种特殊任务。

Ruby有几个衍生版本,包括流行的JRuby。JRuby是用Java语言编写的全功能Ruby解释器,可以在Java虚拟机(JVM)中运行。与官方的Ruby不同,JRuby支持从Java代码中调用Ruby脚本,并从Ruby脚本中调用Java API。

安卓背景知识

安卓由开放手机联盟开发,但通常被认为是谷歌的项目。如今,安卓驱动了几乎四分之一的新智能手机,其市场份额持续增长。

在内部,安卓系统运行在经过修改的Linux内核上。大多数应用程序运行在达尔维克虚拟机上,这些虚拟机完全由谷歌设计和开发,旨在优化移动设备的性能。了解更多关于达尔维克的信息。

许多新的安卓开发者忽略的是,他们编写的Java源代码并不作为Java字节码运行。相反,安卓工具包将Java字节码转换成Dalvik字节码。这些转换后的文件(扩展名。dex)打包到部署在设备上的应用程序中。当设备运行您的程序时,不会留下任何Java字节码。

安卓+鲁比=鲁比托

有一天,JRuby团队成员查尔斯·纳特突然意识到,既然安卓工具包可以将编译后的Java代码转换成达尔维克文件,而且JRuby在编译后的Java字节码中有一个Ruby解释器,那么它应该可以在安卓上运行Ruby。在很短的时间内,他完成了这项任务,鲁本诞生了。在其他几个开发者的共同努力下,Ruboto已经成为一个活跃的项目,Android和Ruby开发者对这个项目越来越感兴趣。

如今,Ruboto有两个版本:ruboto-irb和ruboto-core。Ruboto-irb是一个运行在安卓系统上的交互式Ruby外壳。这个项目允许运行任何可以访问安卓应用编程接口的红宝石脚本。该工具对于希望在设备上运行测试或执行任务的开发人员非常有用,但可能不适合编写应用程序以供将来分发。

相比之下,Ruboto-core提供了一个允许创建Ruboto项目的框架。Ruboto-core使您能够为项目添加强大而灵活的脚本支持,同时保持对安卓应用编程接口的访问。图1显示了ruboto核心构建过程:自动生成的Java源文件和定制的Ruby脚本被打包到一个Android APK系统中,并在设备上运行。

图1。构建Ruboto应用程序

本文的其余部分侧重于创建一个基于Ruboto的定制项目。Ruboto仍然是一个早期的软件。在撰写本文时,它的版本号是0.0.2。这个项目发展很快。当你读到这篇文章的时候,它可能已经稍微改变了。

写短信

通过将Ruby和Android结合起来,你可以创建简单的脚本来访问Android的强大功能。我们将编写一个Ruboto脚本,允许用户从快递服务公司订购海鲜。这个简单的应用程序将利用每个平台。在安卓方面,你有一个简单的方法来创建一个包含你的订单的短信,应用程序甚至不需要请求服务器就可以下订单。在Ruby方面,您将重用现有的语言处理库,将您的订单规范化为可读的格式。

开始

要构建Ruby脚本并将其部署到Android,需要几个组件。您可能已经安装了一些组件,如果是这样,您可以继续使用它们。

由于安卓和鲁比是多平台的,所以鲁比托可以在Linux、苹果OS X或Windows上运行。本文完全使用命令行。

如果在Windows上使用cygwin,在运行一些JRuby命令时可能会遇到问题。出于安全原因,如果您运行的是Windows,请务必严格遵守标准的Windows CMD外壳。

爪哇岛

您的开发机器上需要一个Java开发工具包(JDK)。要检查套件是否已安装,请输入以下命令:

如果此命令找到了JDK版本,您可以继续使用它。否则,请参见参考资料中的链接,安装最新版本的JDK。安装完成后,将JDK的bin文件夹添加到您的PATH中,并重复上述命令。

蚂蚁

安卓有自己版本的蚂蚁,但鲁本也需要从自己的脚本中访问蚂蚁。如果您没有安装独立版本的Ant。同样,将其bin文件夹添加到您的PATH中。确保你能运行蚂蚁命令。

机器人

访问安卓开发者网站,为你的操作系统安装安卓软件开发工具包(见参考资料)。安装完成后,在安卓工具文件夹中运行安卓命令。这将启动SDK管理器,如图2所示。您可能需要安装下列软件包,这些软件包列在可用软件包下面。

平台安卓2.2,API 8

安卓软件开发工具包工具(第8版)

安卓SDK平台-工具(第1版)

Android sdks和avdmanager

打开安卓系统的虚拟设备部分,创建一个用于开发的安卓系统映像。如图3所示,为Android 2.2 API级别8创建一个虚拟设备Froyo。如果你愿意,你也可以创建一个虚拟的SD卡。

图3。创建模拟器

Ruboto将在你的设备上运行,但是如果你有对任何文件夹的写权限,开发工作将会容易得多,这需要使用模拟器或根设备。本文的其余部分将讨论如何使用模拟器。当这个项目完成后,它将在运行软件版本2.2或更高版本的安卓设备上同样运行良好。

将安卓的平台工具和工具目录添加到你的路径中。现在,您应该能够在命令提示符下运行清单1中的命令。

清单1。从命令提示符运行命令

JRuby

JRuby提供了一个非常简单的安装方法:只需访问http://jruby.org/getting-started并遵循安装说明。通过运行以下命令验证安装是否成功:

由于Ruboto托管在一个安全的服务器上,需要安装jruby-openssl gem来下载它。为此,请执行以下命令:

你可能还想安装耙子,这是红宝石对应的make或ant。输入以下命令:

最后,是时候安装Ruboto了。Ruboto被包装成一个宝石,所以安装很容易。输入以下命令:

创建Ruboto项目

Ruboto将从头开始为您创建一个Android项目,这将确保您的清单设置正确,脚本放置在正确的集合中,并且您可以访问必要的库。您应该采用这种方法,而不是试图自己创建或修改现有的安卓项目。

若要创建项目,请切换到“项目”文件夹,并输入以下命令:

该命令将执行以下操作:

通用应用告诉Ruboto从头开始创建一个新的Android项目。

-包提供了唯一的安卓包名。

- path告诉Ruboto项目的存储位置;这必须是新的文件夹名。

- name定义用户可见的应用程序名称;这不一定是唯一的。

- target指定为哪个安卓版本编译项目。对于本文,您必须使用android-8。一个可选参数- min_sdk声明你的应用程序可以在早期版本的安卓上运行。此处省略该参数。

- activity是一个可选参数,它告诉Ruboto生成一个新的Android Activity并对其进行初始化。

你可以浏览鱼贩目录的内容。Ruboto已经自动生成了构建和运行基本活动所需的所有安卓文件。由于该应用程序将发送短消息,您需要在AndroidManifest.xml文件中进行更改。在此文件中,插入以下标记作为元素的第一个子元素:

如果忽略此权限,您仍然可以构建和加载脚本,并且当您的应用程序尝试发送短信时,您将遇到运行时错误。

运行默认项目

Ruboto会立即生成一个活动和脚本,并在设备或模拟器上安装和运行。如果您的模拟器尚未运行,您可以使用以下命令启动它:

等待模拟器进入主屏幕。为了确保所有的Ruboto文件都被正确地构建和部署,cd到fishmonger目录并运行以下命令:

如果遇到错误,请尝试再次运行此命令;有时在构建过程中连接会超时。初始构建需要一些时间,但后续更新要快得多。安装完成后,在你的模拟器中寻找标有鱼贩的图标。开始吧,等一会儿。在撰写本文时,Ruboto引擎需要一段时间才能加载。最后,您将看到一个类似于图4的屏幕。

4.模板Ruboto活动

自定义项目

现在让我们设置鱼贩应用程序。首先,您将添加自然语言支持。Ruby有一个极好的宝石叫语言学,它提供了许多英语语言功能。在撰写本文时,Ruboto无法处理指南库的嵌套目录结构,因此请下载本文的指南zip文件,并将其内容提取到fishmonger\assets\scripts中(请参见下载部分的链接)。这是一个库存指南gem,修改后使目录结构变平。将来,你应该只能绑定这个宝石和你的Ruboto脚本。

脚本

现在你已经准备好处理项目的核心部分了。Ruboto框架处理所有的Java代码和Android基础设施,所以你所有的工作都可以在鱼贩里完成。首先添加清单2中的文本。

清单2。脚本依赖关系

前两行加载ruboto和linguisitics库。include命令将使英语语法在您的模块中可用。

第一个导入对JRuby用户来说很熟悉:您正在添加对另一个库的支持。请注意,在本例中,您实际上使用的是安卓达尔维克库,而不是标准Java库的一部分。Ruboto将在运行时使用反射来加载这个类,并使它对您可用。

Ruboto_import_widgets具有类似的导入功能。在这个例子中,您添加了一些特定于安卓的用户界面部件。这些小部件通常用于安卓活动。Ruboto添加了一些方便的方法,使您可以轻松配置用户界面。

接下来,定义脚本的handle_create方法,如清单3所示。

清单3。配置屏幕

当用户启动应用程序时调用Handle_create。在安卓系统中,这是你处理必要设置的地方。标准的安卓应用程序通常使用XML来定义布局,但是在Ruboto中,您需要通过脚本来定义布局。

Ruboto的功能在你的脚本和Android之间搭建了一座桥梁。无论你有红宝石背景还是安卓背景,你都应该能够理解setup_content中发生了什么。您正在创建一个将几个小部件堆叠在一起的垂直布局。这些小部件包括文本、几个用于选择订购鱼类的单选按钮、一个用于输入数量的可编辑文本字段以及一个用于下订单的按钮。您可以使用Ruby语法来配置您的小部件,而不是Android中通常使用的更加繁琐的Java语法。

在每个单选按钮上设置id属性的好处是为您提供了一种简单的方法来查看以后选择哪个按钮。

安卓将自动处理所有用户与单选按钮和可编辑文本字段的交互。剩下的唯一工作是定义如何处理“下单”按钮,如清单4所示。

清单4。下订单

如果你以前写过安卓应用程序,你可能会注意到你正在使用一个不同的范例来处理选择。安卓开发者倾向于为每个可选项目编写一些独特的点击处理器。然而,在Ruboto中,更简单的方法是为您的活动创建一个全局点击处理程序,在这里您可以测试用户点击了哪个项目。

您可以选择用户选择的鱼的数量和类型。如果用户没有选择单选按钮,Ruboto将在内部优雅地处理这个运行时错误。否则,您将把文本传递给指南库,并请求它为您创建合适的名词形式。这个库可以处理不同的复杂规则,因此它将生成值,如1条鲑鱼,2条鲑鱼,1只螃蟹,2只螃蟹,等等。它甚至可以识别手写的数字,所以它也能产生像一只龙虾和三只龙虾这样的短语。对于一行代码来说,这是一个非常令人印象深刻的行为,展示了它使用现有脚本轻松地向应用程序添加功能的能力。

类似地,发送短信只需要一行呼叫,调用一个方便的安卓方法。Ruboto允许您使用Ruby语法调用此方法;等效的Java代码将是短信管理器。发送文本消息()。您提供接收者的电话号码和要发送的消息,并为可选参数传递零。如果你在一个设备上运行,并且想要发送一条短信,你可以用一个实际的电话号码来代替它。如果您想在模拟器中进行测试,您可以用模拟器的端口号替换它,如“5554”。

运行脚本

Ruboto最强大的一个方面是允许通过简单地加载一个更新的脚本来改变功能。即使您已经完全改变了该应用程序的功能,也没有必要重建该应用程序或重新加载APK。相反,只需在命令行输入以下命令:

该命令将把指南脚本和您的新鱼贩脚本复制到模拟器或连接的设备上。当您重新启动应用程序时,您将看到新的屏幕,如图5所示。

5.安卓预订页面

如果您正在运行一个非根设备或更改一个Java文件或Android清单文件,您可以通过再次输入rake安装命令来加载更新。请注意,即使是非根设备也可以实时更新它们的脚本;例如,您可以从互联网下载新的脚本,并在运行时生成它们。固件限制仅适用于通过您的USB连接推送文件。

继续测试此应用程序。当您做出有效选择并按下预订按钮时,屏幕将自动关闭。如果您使用有效的收件人地址,他们将很快收到您的邮件。图6显示了一家非常繁忙的海鲜餐厅的最新订单。

6.Ruboto脚本的标准化订单

结束语

Ruboto仍然是一个早期项目,但是即使在目前的状态下,它已经可以提供一种非常灵活和有用的方式来编写和分发Android软件。Ruboto的成功归功于JRuby和Android的优势:JRuby已经完成了用Java语言编写一个功能齐全的Ruby解释器的艰巨工作。安卓的达尔维克工具集提供了从标准的Java字节码到定制的达尔维克字节码的令人印象深刻的转换。

如你所见,Ruboto脚本可能很短,但是它们提供了Ruby和Android的强大功能。混合和匹配Ruby脚本、Ruby和Java语法以及Android API的能力为您提供了许多提高工作效率的选项。

Ruboto是客户端和服务器端开发人员之间的有用桥梁。安卓开发者会欣赏它的反射功能,这为他们提供了实时更新应用程序功能的能力。Ruby开发人员将有一个相当方便的方法来结合他们的脚本技术和移动平台,使用现有的Ruby代码创建新的应用程序。这两种类型的开发人员都会以极大的兴趣密切关注这个项目的进展。