SL4A 快速指南



SL4A - Android 概述

Android 是一个基于 Linux 的操作系统,主要设计用于便携式设备,如智能手机和平板电脑。Android 不仅仅是一个操作系统,它是一个软件堆栈,为用户、开发者和制造商提供了许多功能。

Android 版本 功能
Android (Alpha) 1.0 Android 的第一个版本
Android 1.5 (Cupcake) 添加了自动旋转选项,在网页浏览器中添加了复制和粘贴功能
Android 1.6 (Donut) 添加了语音搜索和搜索框
Android 2.0/2.1 (Éclair) 支持蓝牙 2.1
Android 2.2/2.2.3(Froyo) 支持 Adobe Flash 10.1
Android 2.3/2.3.7 (Gingerbread) 网络通话,一键式单词选择和复制/粘贴
Android 3.0/3.2.6 (Honeycomb) 此版本仅适用于平板电脑。功能包括支持多核处理器,能够加密所有用户数据
Android 4.0/4.0.4 (Ice Cream Sandwich) UI 中的虚拟按钮,能够关闭后台使用数据的应用程序
Android 4.1/4.3.1 (Jelly Bean) 基于 Linux 内核 3.0.31?更流畅的用户界面,Android Beam 的蓝牙数据传输
Android 4.4/4.4.4,4.4W/4.4W.2 (KitKat) 与云存储集成,内置传感器,锁屏图案
Android 5.0/5.1.1 (Lollipop) 改进的 RAM 和电池管理,修复了应用程序突然关闭、无线连接问题和通知等问题。

它是开源且对商业友好的。用户可以选择用他们选择的应用程序替换内置应用程序。自最初发布以来,已经发布了许多版本的 Android。

SL4A - Android 架构

Android 软件堆栈包含不同的层,每一层都具有明确定义的行为,并为其上层提供特定的服务。下图展示了 Android 及其主要组件的广泛架构。

Android Architecture

Linux 内核

Android 基于修改后的 Linux 内核代码构建,该代码可在嵌入式系统上运行,而不是传统的 Linux 系统。许多常用设备的硬件驱动程序都内置在内核中,从而确保了设备的可移植性。它基于安全的基于用户的权限模型,防止一个应用程序读取另一个应用程序的信息或干扰其执行(例如 CPU、内存、设备等)。

基于组 ID 的对网络和蓝牙功能的访问、日志记录器、警报、电源管理、低内存杀手、Binder IPC 机制是一些值得注意的内核增强功能。

库和运行时

这构成了架构的第二层。它包括一组针对硬件优化的 C、C++ 库,也称为原生层。示例包括媒体库、SQLite、SSL、Bionic、WebKit 等。

Android 运行时包含两个不同的组件——Dalvik VM 和核心库。Dalvik VM 为 Android 平台上的应用程序提供执行环境。核心库提供了 Java API 中的大部分功能。

应用程序框架

此层将库作为服务提供给应用程序。此层中一些最重要的组件包括位置管理器、资源管理器、活动管理器和通知管理器。

应用程序

默认情况下,Android 带有一套丰富的应用程序,包括浏览器、短信程序、日历、联系人管理器、地图等。如果用户需要,Google Play 提供了这些应用程序的替代方案。

构建块

应用程序可以使用四个功能块与系统交互。它们如下所示:

  • 活动 - 活动表示用户看到的或以视觉方式交互的单个屏幕。例如,电子邮件应用程序可能有一个活动显示新电子邮件列表,另一个活动用于撰写电子邮件,另一个活动用于阅读电子邮件。

  • 服务 - 您的应用程序的大部分处理都是由这些服务完成的。它是用户界面的逻辑。例如,服务可以在用户使用其他应用程序时在后台播放音乐,或者它可以在不阻塞用户与活动交互的情况下通过网络获取数据。

  • 广播接收器 - 一个可以注册以侦听系统或应用程序事件并发布关于相同事件的通知的组件。来自系统的广播的一个示例是“低电量通知”,而应用程序级别的广播可能是“下载成功”通知。

  • 内容提供程序 - 内容提供程序管理并帮助您在多个应用程序之间共享数据。例如,可以使用内容提供程序来共享联系人数据。

这些组件通过称为Intent的消息相互交互。

SL4A - Android 脚本层

Android 脚本是用于简单任务(例如自动化和原型设计)的便捷工具,而不是使用 Java 编程语言执行相同任务。Android 脚本层 (SL4A) 为 Android 平台上的多种脚本解决方案提供了一个平台。

什么是 SL4A?

Android 脚本层 (SL4A) 是一个库,它提供了一个平台,可以使用除 JAVA 之外的其他语言编写简单的脚本来自动执行 Android 设备上的任务。

SL4A 最初称为 Android 脚本环境 (ASE),于 2009 年 6 月在 Google 开源博客上首次发布。该项目主要通过 Damon Kohler 的努力而问世,并通过其他开发者的贡献不断发展壮大。

它支持大多数流行的脚本语言。这些包括:

  • Beanshell 2.0b4
  • JRuby 1.4
  • Lua 5.1.4
  • Perl 5.10.1
  • PHP 5.3.3
  • Python
  • Rhino 1.7R2
  • Javascript
  • TCL

为什么选择 SL4A – 脚本语言与 JAVA

人们可能首先会问的问题之一是:“为什么使用 SL4A 而不是 Java?

首先,并非每个人都喜欢 Java。与 Java 相比,脚本语言提供了简单的编程环境。

其次,该语言需要使用编辑/编译/运行设计循环。这意味着每次需要修改时,都需要编辑、重新编译然后运行应用程序。相反,脚本是即时解释和执行的。此外,在许多情况下,SL4A 甚至可以重用为桌面环境编写的代码。

下图分别说明了用 Python 针对 SL4A 和用 Java 编写的脚本。

Python Targeting SL4A

SL4A - 架构

SL4A 有三个主要组件。它们如下所示:

  • 脚本解释器
  • Android RPC 客户端
  • Facades

在本章中,我们将详细讨论这三个组件。

脚本解释器

SL4A 充当脚本主机。它支持多种脚本语言,例如 Python、Ruby、Lua、BeanShell、JavaScript 和 TCL。可以通过为该脚本语言开发新的 SL4A 解释器来动态地扩展 SL4A。

每个脚本都在其自己的解释器实例中运行。因此,多个脚本可以同时运行而不会相互影响。

Android RPC 客户端

在解释器实例中运行的脚本通过 Android 代理 RPC 客户端与 SL4A 应用程序进行通信。客户端建立与 SL4A 的远程过程调用 (RPC)连接,并允许脚本与 Android 框架交互。SL4A facades 促进了这种通信。数据以JSON有效负载的形式发送。

为每种支持的脚本语言都提供了 Android RPC 客户端。客户端模块可从 SL4A 网站获取,网址为 https://code.google.com

Scripting Layer Android

Facades

外观简化了脚本对底层 Android API 的访问。SL4A 通过大量外观(如 AndroidFacade、BluetoothFacade、ActivityManagerFacade、CommonIntentsFacade 等)向脚本公开 Android 框架 API。

SL4A 功能提供了丰富的功能,例如相机、位置、电池管理器、媒体播放器、媒体录音机等等。

使用 SL4A

SL4A 系统适用于以下类型的任务:

  • 快速应用开发 (RAD) 编程 - 使用 SL4A,可以使用快速应用开发 (RAD) 方法快速创建原型应用程序。如果想法的可行性得到确认,您可以创建一个完整的 Android 应用程序。

  • 测试脚本 - 它可用于编写测试脚本。

  • 构建实用程序 - 可以使用 SL4A 构建执行小型任务或自动化某些重复性任务方面的实用程序脚本或工具。

SL4A - Python 库

Python 具有一个标准库,其中包含各种各样的例程,可以帮助您轻松编写和重用这些代码。模块是一个 Python 文件,其中包含变量的定义和一组相关的例程或函数。

Python 库提供的一些核心模块如下所示:

  • 内置函数和异常 - Python 在启动时导入这两个模块,并使其内容可用于所有程序。内置模块定义了内置函数,如len、int、range,而异常模块定义了所有内置异常。

  • 操作系统接口模块 - OS 模块提供了允许通过脚本执行操作系统级操作的函数。

  • 类型支持模块 − 类型支持模块包括字符串模块,用于实现常用的字符串操作;数学模块提供数学运算等等。

  • 正则表达式 − 正则表达式是用特定语法编写的字符串模式,可用于匹配或提取字符串或子字符串。re 模块为 Python 提供正则表达式支持。

  • 语言支持模块 − sys 模块允许访问各种解释器变量,例如模块搜索路径和解释器版本。operator 模块提供许多内置运算符的功能等效项。copy 模块允许复制对象。最后,gc 模块允许更精细地控制 Python 2.0 中的垃圾回收机制。

关于 JSON

JavaScript 对象表示法 (JSON) 是一种数据交换格式。尽管许多编程语言都支持 JSON,但它对于基于 JavaScript 的应用程序(包括网站和浏览器扩展)特别有用。JSON 可以表示数字、布尔值、字符串、null、数组(值的顺序序列)以及由这些值(或其他数组和对象)组成的对象(字符串-值映射)。

SL4A - 开发环境

本章详细介绍了设置开发环境的过程。它还讨论了如何配置设备以使用 SL4A。

开发环境

在开始使用 SL4A 进行开发之前,必须下载并安装几个先决条件。

Java 开发工具包 (JDK)

首先,系统上应该安装最新版本的 JDK(JDK 5 或更高版本)。

要确认环境中安装了兼容版本的 JDK,请在命令行或控制台终端执行以下操作:

$javac –version 
$java –version

注意 − 将 PATH 环境变量设置为 jdk/bin 文件夹

Python

Mac OS X 和 Linux 系统通常默认安装了 Python。Windows 系统默认没有安装 Python。Python 可以从 https://www.pythonlang.cn 下载。

安装完成后,修改 Windows 路径以添加 Python 目录。

要验证系统上是否安装了 Python,请打开终端窗口并输入 Python。

Administrator CMD

android.py 文件

唯一需要下载的附加文件是android.py 文件。将此文件的副本包含在 Python 安装目录下的 /Lib/site-packages 中。此文件包含用于 Android 开发的 Python 模块。

Android.py File

Android SDK

Android SDK 提供了许多工具。第一步是为您的操作系统下载相应的安装文件。Mac OS X、Linux 和 Windows 的安装程序都可用。SDK 安装程序可在 https://developer.android.com.cn/sdk 找到。

Android SDK Tool

此处讨论的开发环境是 Windows。Google 提供 zip 文件和可执行文件以便在 Windows 上安装 SDK。

在开发机器上安装 Eclipse

Eclipse 是用 Java 语言编写的一个可扩展的集成开发环境 (IDE)。它需要安装 Java 才能运行。Eclipse 有很多版本,例如 Classic、Galelio、Luno、Mars、Neon 等。

它以单个 .zip 文件的形式分发。您只需解压缩程序内容即可。解压缩的文件夹中包含一个 Eclipse.exe 文件。双击该文件即可启动程序。

Eclipse.exe File

SL4A - 配置您的设备

安装 SL4A

有时,您可能希望在设备上编写脚本并执行它们。Android 的脚本层有助于实现这一目标。要在设备上安装 SL4A,请按照以下步骤操作:

  • 在设备上下载SL4A.apk 文件。

  • 从通知屏幕启动.apk 文件。

  • 在下一个屏幕上选择安装以实际安装 SL4A。

或者,如果您选择使用模拟器而不是 Android 设备,请使用模拟器内的浏览器安装 SL4A。设备上的 SL4A 安装初始屏幕如下所示。

SL4A Installation Initial Screen

添加 Python 解释器

要在设备上安装 Python 解释器,请按照以下步骤操作:

  • 步骤 1 − 启动 SL4A 应用程序。

  • 步骤 2 − 点击菜单按钮。

  • 步骤 3 − 将显示一个选项列表。选择查看

  • 步骤 4 − 从对话框中选择解释器选项。点击添加

  • 步骤 5 − 将显示可供下载的解释器列表。选择Python 2.62(或更高版本)。

要在模拟器上安装 Python 解释器,请按照以下步骤操作:

  • 步骤 1 − 确保模拟器在后台运行。

  • 步骤 2 − 下载 python_for_android_rx.apk。

  • 步骤 3 − 在终端命令行 shell 中,导航到存储 apk 文件的位置,并在命令行键入以下内容:

adb  install  python_for_android_rx.apk

SL4A 支持多种语言的脚本引擎。下面列出了一些特定语言的 apk 文件:

  • beanshell_for_android_rx.apk
  • jruby_for_android_rx.apk
  • lua_for_android_rx.apk
  • perl_for_android_rx.apk
  • python_for_android_rx.apk
  • rhino_for_android_rx.apk

连接到 Windows 操作系统

步骤 1 − 下载并安装 Windows 的 USB 驱动程序。

步骤 2 − 设置您的设备:

  • 从设备上的所有应用程序屏幕启动 SL4A。

  • 点击菜单按钮 → 查看

  • 从列表中选择解释器。

  • 点击菜单按钮 → 启动服务器

  • 选择公共(通过 Wi-Fi 连接)或私有(通过 USB 连接)。

步骤 3 − 添加环境变量(用户变量)AP_PORT 和值9999

Android SDK 和 Eclipse 已在后续章节中讨论。

SL4A - 浏览 Android SDK

一个软件开发工具包,使开发人员能够为 Android 平台创建应用程序。Android SDK 包括带有源代码的示例项目、开发工具、模拟器和构建 Android 应用程序所需的库。本章讨论 Android SDK 以及如何使用它来开发针对 SL4A 的代码。

SDK 组件

安装 Android SDK 的目录树包含一个包含文档、示例代码和许多工具的文件夹列表。导航到 tools 子目录会显示许多可执行文件。

下面讨论 Android SDK 中的一些重要组件。

SDK 管理器

Android SDK 管理器将 SDK 工具、平台和其他组件分成软件包,以便于访问和管理。可以将 SDK 配置为检查新的或更新的 SDK 软件包和附加工具。

Android SDK Manager

默认情况下,Android Studio 不会检查 Android SDK 更新。要启用自动 Android SDK 检查:

  • 步骤 1 − 选择文件设置外观与行为系统设置更新

  • 步骤 2 − 选中自动检查 Android SDK 更新复选框并选择一个更新频道。

  • 步骤 3 − 点击确定应用以启用更新检查。

“SDK 更新站点”选项卡显示 Android Studio 检查 Android SDK 和第三方更新的站点。您可以添加其他托管其自身 Android SDK 附加组件的站点,然后从这些站点下载 SDK 附加组件。

Android 模拟器

AVD 管理器提供了一个图形用户界面,您可以在其中创建和管理 Android 虚拟设备 (AVD),Android 模拟器需要这些设备。Android 虚拟设备 (AVD) 包含许多文件,包括模拟器所需的配置和虚拟存储。您可以根据需要创建任意数量的 AVD 来模拟不同的设备。

可以使用以下步骤在 Eclipse 中创建 AVD:

  • 步骤 1 − 选择窗口AVD 管理器

  • 步骤 2 − 点击新建

  • 步骤 3 − 输入 AVD 的名称,选择目标并为其他功能指定值。

  • 步骤 4 − 点击创建 AVD

对于带有键盘的设备,有一组标准映射,将主机键盘上的按键映射到设备上的操作。默认的模拟器按键映射如下:

模拟器按键 主机设备上的映射
BUTTON_CALL F3
BUTTON_HANGUP F4
BUTTON_HOME Home
BUTTON_BACK Escape
BUTTON_MENU F2, PageUp
BUTTON_STAR Shift+F2, PageDown
BUTTON_POWER F7
BUTTON_SEARCH F5
BUTTON_CAMERA Ctrl+Keypad_5, Ctrl+F3
BUTTON_VOLUME_UP Keypad_Plus, Ctrl+F5
BUTTON_VOLUME_DOWN Keypad_Minus, Ctrl+F6
TOGGLE_NETWORK F8
TOGGLE_TRACING F9
TOGGLE_FULLSCREEN Alt-Enter
BUTTON_DPAD_CENTER Keypad_5
BUTTON_DPAD_UP Keypad_8
BUTTON_DPAD_LEFT Keypad_4
BUTTON_DPAD_RIGHT Keypad_6
BUTTON_DPAD_DOWN Keypad_2
TOGGLE_TRACKBALL F6
SHOW_TRACKBALL Delete
CHANGE_LAYOUT_PREV Keypad_7, Ctrl+F11
CHANGE_LAYOUT_NEXT Keypad_9, Ctrl+ F12
ONION_ALPHA_UP Keypad_Multiply
ONION_ALPHA_DOWN Keypad_Divide

您可以通过编辑 .android 子目录中的default.keyset 文件来更改这些设置。

Android 调试桥

ADB(Android 调试桥)是 Google 的 Android SDK 中包含的一个命令行实用程序。ADB 可以通过 USB 从计算机控制您的设备,来回复制文件,安装和卸载应用程序,运行 shell 命令等等。

如果您正在运行模拟器并连接了真实设备,则必须指定希望 ADB 命令指向哪个设备。对于真实设备,使用选项 -d;对于模拟器,使用 -e。以下是 ADB 的标志和命令列表。

序号 ADB 标志和说明
1

-d

将设备定向到唯一连接的 USB 设备;如果连接了多个 USB 设备,则返回错误。

2

-e

将命令定向到唯一运行的模拟器;如果运行了多个模拟器,则返回错误。

3

-s <serial_number>

将命令定向到具有给定序列号的 USB 设备或模拟器。

4

devices

列出所有已连接的设备

5

connect <host>:<port>

通过 TCP/IP 连接到设备

6

disconnect <host>:<port>

断开与 TCP/IP 设备的连接

序号 ADB 命令和说明
1

adb push <local> <remote>

将文件/目录复制到设备

2

adb pull <remote> [<local>]

从设备复制文件/目录

3

adb sync [<directory>]

如果没有指定<directory>,则将更新 /system 和 /data 分区。如果它是“system”或“data”,则只更新相应的分区。

4

adb shell

以交互方式运行远程 shell

5

adb emu <command>

运行模拟器控制台命令

6

adb logcat

查看设备日志

7

adb forward <本地端口> <远程端口>

转发套接字连接

8

adb install [-l] [-r] [-s] <文件路径>

将此安装包文件推送到设备并安装它。(-l 将应用锁定)

(-r 重新安装应用,保留其数据)

(-s 安装到SD卡而不是内部存储)

9

adb uninstall [-k] <包名>

从设备中删除此应用包。-k 表示保留数据和缓存目录

10

adb bugreport

返回设备上所有应包含在错误报告中的信息。

11

adb help

显示此帮助信息

12

adb version

显示版本号

Shell

Shell是一个程序,它监听用户的键盘输入并根据用户的指令执行操作。adb shell 命令提供 Unix 命令,用于向模拟器或连接的设备发送 shell 命令并显示结果。它也可用于在本地启动交互式 shell。

要发出单个命令而不进入远程 shell,请使用以下方式使用 shell 命令:

adb [-d|-e|-s <serialNumber>] shell <shell_command>

或者,要在模拟器/设备上进入远程 shell:

adb [-d|-e|-s <serialNumber>] shell

准备好退出远程 shell 时,按CTRL+D或键入EXIT

Dalvik 调试监控服务 (DDMS)

Android 提供了一个调试工具,即 Dalvik 调试监控服务 (DDMS)。此工具提供附加服务,例如端口转发服务、设备屏幕截图、来电和短信欺骗等。

Dalvik Debug Monitor Service

DDMS 启动时,它会连接到adb。连接设备时,会在 adb 和 DDMS 之间创建 VM 监控服务。此服务会在设备上的 VM 启动或终止时通知 DDMS。

VM 开始运行后,其进程 ID 会通过adb发送到 DDMS,并且adb守护程序会打开到 VM 调试器的连接。DDMS 现在可以使用自定义线协议与 VM 通信。

SL4A - 使用 Eclipse

本章将引导您了解 Eclipse IDE 的基础知识,并将其配置为开发用于 Android 的 Python 脚本。

Eclipse 基础知识

Eclipse 是一款功能和选项众多的应用程序。第一次启动程序时,将出现欢迎屏幕。Eclipse 使用许多基本概念和术语来处理程序的不同功能和操作。

这里解释其中一些术语:

工作台 - 它标识 Eclipse 应用程序的整体窗口。它包含多个子窗口,每个窗口包含多个选项卡。

工作区 - 它指的是系统文件系统上保存使用 Eclipse 创建的项目的存储位置。

Workspace Launcher

透视图 - 它是关于任何时候打开哪些菜单和窗口的个人偏好。Eclipse 为典型用法配置了许多透视图,例如编写代码、调试等。当您的活动发生变化时,您也可以切换到不同的透视图。透视图也是可自定义的。

安装 Eclipse 插件

需要配置 Eclipse 才能开发 SL4A 应用程序。在主机上成功安装先决条件后,必须添加以下 Eclipse 插件:

可以使用以下步骤在 Eclipse 上安装插件:

  • 步骤 1 - 单击帮助

  • 步骤 2 - 选择安装新软件

  • 步骤 3 - 单击添加

  • 步骤 4 - 指定名称和访问插件的 URL。单击确定

  • 步骤 5 - 选择所有工具并单击下一步。插件安装开始

Add Repository

Eclipse 中的 Python 解释器

请按照以下步骤在 Eclipse 中配置 Python 解释器。

  • 步骤 1 - 选择窗口首选项

  • 步骤 2 - 转到PyDev解释器Python

  • 步骤 3 - 单击新建按钮。

  • 步骤 4 - 为解释器指定名称。在“位置”字段中,输入 python.exe 的路径。例如,C:\Python26\python.exe

  • 步骤 5 - 单击确定

Python Interpreter Eclipse

SL4A - 探索 Android API

SL4A 基于外观设计模式与底层的 Android API 通信。本章解释外观设计模式的工作原理以及不同的 SL4A API 外观。

什么是外观设计模式?

外观是一个对象,它提供一个界面,简化了对应用程序中相关界面的访问。换句话说,外观隔离了库的工作方式与客户端,并充当每个子系统级别的入口点。因此,客户端仅通过其外观进行通信。下图说明了这一点。

Facade Design Pattern

SL4A 和 Android API 外观

SL4A 为其支持的每种语言托管解释器。解释器通过称为外观的界面访问底层的 Android API。

下表列出了顶级外观及其提供的功能:

序号 Android API 外观 & 说明
1

ActivityResultFacade

它设置脚本如何将信息作为活动返回。此方法意味着您的脚本将返回某种结果。结果类型可以设置为 RESULT_CANCELED(0) 或 RESULT_OK(-1)

2

AndroidFacade

它提供对常用 Android 功能的访问,例如读取输入、通知、启动应用程序组件等。

3

ApplicationManagerFacade

列出所有可用和正在运行的包,启动活动,创建您的任务管理器或终止特定的一组包。

4

BatteryManagerFacade

公开电池管理器并允许跟踪电池状态、健康状况、类型级别、电压等。

5

BluetoothFacade

提供对蓝牙功能的访问,从基本的连接功能到发送和接收 ASCII 和二进制数据。此外观至少需要 API 级别 5。

6

CameraFacade

此方法提供对所有与相机相关的功能的访问。允许使用设备的相机拍照并将其保存到指定的路径。它提供两个函数,即 cameraCapturePicture 和 cameraInteractiveCapturePicture。这些函数严格用于使用设备后部的镜头。

7

CommonIntentsFacade

提供对常用 Android 意图的访问,例如打开联系人列表、进行地图搜索、通过操作启动活动等。

8

ContactsFacade

允许访问联系人,例如提供联系人列表以选择联系人,按属性查询联系人列表以及获取所有联系人的 ID 和属性列表。外观提供的一些方法包括 contactsGet、pickContact、contactsGetById 等。

9

EventFacade

Android 操作系统维护一个事件队列,用于在应用程序之间异步传递信息。此外观提供管理事件队列的功能,例如清除现有事件、发布新事件、列出、注册和注销广播信号等。方法示例包括 eventPost、eventClearBuffer 等。

10

EyesFreeFacade

在低于 API 级别 4 的设备上可用。它允许脚本使用文本到语音技术进行语音输出。此外观现已被 TextToSpeechFacade 替换。唯一可用的函数是 ttsSpeak。

11

LocationFacade

提供允许跟踪当前位置的功能,可以通过 GPS 或使用有关您当前正在使用的蜂窝塔的信息来实现。此功能需要活动的互联网连接才能执行实际查找。外观提供的方法包括 getLastKnownLocation、startLocating、stopLocating、readLocation 等。

12

MediaPlayerFacade

允许播放媒体文件,控制媒体播放器,查询媒体播放器的当前状态并获取有关媒体文件的信息。mediaIsPlaying、mediaPlayInfo 和 mediaPlayList 返回媒体播放器的当前状态。调用 startActivity 函数将启动媒体播放器。诸如 mediaPlay、mediaPlayPause、mediaPlayClose、mediaPlaySeek、mediaPlayStart 和 mediaPlaySetLooping 等函数用于控制媒体播放器。

13

MediaRecorderFacade

此外观提供音频和视频录制功能。startInteractiveVideoRecording、recorderStartMicrophone、recorderCaptureVideo 函数分别用于启动和启动音频/视频录制。要结束先前启动的录制,请调用 recorderStop 函数。

14

PhoneFacade

以编程方式提供诸如跟踪电话状态、漫游状态、发起呼叫、SIM 卡信息等基本电话操作。方法示例包括 phoneCallNumber、phoneDialNumber、getCellLocation 等。

15

PreferencesFacade

允许访问共享首选项,例如获取现有首选项的列表以及读取、修改和添加新的首选项。SL4A r4 版本支持三个函数:prefGetAll、prefGetValue 和 prefPutValue。

16

SensorManagerFacade

允许跟踪传感器数据,例如光线、加速度、磁场和方向。要启动/停止感测,请使用 startSensing(已弃用,并由 SL4r4 中的 startSensingThreshold 和 startSensingTimed 替换)和 stopSensing 函数调用。readSensors、sensorsGetLight、sensorsReadAccelerometer、sensorsReadMagnetometer 和 sensorsReadOrientation 是此外观提供的函数。

17

SettingsFacade

提供对不同电话设置的访问,例如铃声音量、屏幕亮度、飞行模式、振动、媒体音量等。此外观提供的函数有 checkAirplaneMode、checkRingersilentMode 和 checkScreenOn(至少 API 级别 7)、getVibrateMode、setScreenTimeout、toggleVibrateMode setRingerVolume 等。

18

SignalStrengthFacade

允许监控手机信号强度。调用 startTrackingSignalStrengths 函数开始收集数据。调用 readSignalStrengths 函数开始收集数据。要关闭该进程,请调用 stoptrackingSignalStrengths 函数。它至少需要 API 级别 7。

19

SmsFacade

它具有用于删除、读取、标记和发送短信的功能。此外观提供的一些函数示例包括 smsMarkMessageRead、smsDeleteMessage、smsSend 等。

20

SpeechRecognitionFacade

能够向脚本添加语音识别功能。它只有一个名为 recognizeSpeech 的函数。

21

TextToSpeechFacade

为 API 4 及更高版本提供 TTS 服务。要让设备说话,请使用 ttsSpeak 函数。要确定 speak 函数是否已完成,请使用 ttsIsSpeaking 函数。

22

ToneGeneratorFacade

为给定的数字生成 DTMF 音调。要使用它,必须调用 generateDtmfTones 函数。

23

UiFacade

提供用于创建用户界面元素的功能,例如文本框、复选框、日期选择器等。它还允许交互式使用 HTML 页面。

24

WakeLockFacade

提供用于创建唤醒锁的功能,包括 wakeLockAcquireBright、wakeLockAcquireDim、wakeLockAcquireFull 和 wakelockAcquirePartial。

25

WebCamFacade

此外观至少需要 API 级别 8。它允许将 MJPEG 流从前置设备摄像头流式传输到网络。要启动/停止网络摄像头,请分别使用 webcamStart 和 webcamStop 函数。要在流式传输时调整视频质量,请使用 webcamAdjustQuality 函数。

26

WifiFacade

帮助您控制设备上的 Wi-Fi 无线电。它允许脚本查询 Wi-Fi 连接的状态,搜索接入点,连接和断开 Wi-Fi 网络,并在脚本执行期间保持 Wi-Fi 锁定。

有关这些外观提供的完整方法列表,请参考https://code.google.com。后续章节将说明如何使用 Android 外观 API 函数创建实用程序。

SL4A - 构建 GUI

图形用户界面 (GUI) 代表一组图形组件,使用户能够浏览、访问和交互应用程序功能。

与 SL4A 用户交互主要有两种基本方法:

  • 对话框,例如警报

  • 使用 HTML 和 JavaScript 构建 UI,然后使用 Python 在后台处理任何额外的处理。

本章将解释这两种方法。

基于 Python 对话框的 GUI

SL4A 包含一个 UI 外观,用于访问 Android API 提供的基本 UI 元素。这些函数在调用时返回一个结果对象作为命名元组。每个结果都分配一个唯一的 ID 用于跟踪目的。第二个元素是结果,它表示用户的输入。元组还包括第三个元素 error,用于向调用者提供有关可能遇到的任何错误情况的反馈。如果没有遇到错误,则此元素设置为 None。

序号 UiFacade 函数和说明
1

dialogGetInput

向用户查询文本输入。

title (String) 输入框的标题(默认值 = Value)

message (String) 在输入框上方显示的消息(默认值 = 请输入值:)

defaultText (String) 插入输入框的文本(可选)

结果是用户的输入,如果点击取消则为 None(null)。

2

dialogShow

显示对话框

3

dialogCreateAlert

创建警报对话框。

title (String)(可选)

message (String)(可选)

4

dialogDismiss

关闭对话框。

5

dialogCreateDatePicker

创建日期选择器对话框。

year (Integer)(默认值 = 1970)

month (Integer)(默认值 = 1)

day (Integer)(默认值 = 1)

6

dialogCreateTimePicker

创建时间选择器对话框。

hour (Integer)(默认值 = 0)

minute (Integer)(默认值 = 0)

is24hour (Boolean) 使用 24 小时制时钟(默认值 = false)

7

dialogGetPassword

向用户查询密码。

title (String) 密码框的标题(默认值 = 密码)

message (String) 在输入框上方显示的消息(默认值 = 请输入密码:)

8

dialogGetResponse

返回对话框响应。

9

dialogSetPositiveButtonText

设置警报对话框肯定按钮文本。text (String)

10

dialogSetNegativeButtonText

设置警报对话框按钮文本。text (String)

11

dialogSetNeutralButtonText

设置警报对话框按钮文本。text (String)

12

dialogSetSingleChoiceItems

这将创建一个单选按钮列表。

13

dialogSetMultiChoiceItems

这将创建一个复选框

14

dialogCreateHorizontalProgress

创建一个水平进度对话框。

title (String)(可选)

message (String)(可选)

maximum progress (Integer)(默认值 = 100)

15

dialogCreateSpinnerProgress

创建一个旋转进度对话框。

title (String)(可选)

message (String)(可选)

maximum progress (Integer)(默认值 = 100)

16

addContexMenuItem

向上下文菜单添加新项目。

label (String) 此菜单项的标签

event (String) 点击菜单项时将生成的事件

eventData (Object)(可选)

17

addOptionsMenuItem

向选项菜单添加新项目。

label (String) 此菜单项的标签

event (String) 点击菜单项时将生成的事件

eventData (Object)(可选)

iconName (String)

18

webViewShow

使用给定的 URL 显示 WebView。

url (String)

wait (Boolean) 阻止直到用户退出 WebView(可选)

19

clearContextMenu

删除以前添加到上下文菜单的所有项目。

20

clearOptionsMenu

删除以前添加到选项菜单的所有项目

21

makeToast

创建通知

示例

一个简单的 Toast 示例

import android 
droid = android.Android() 
uname = droid.getInput("Enter your name") 
print uname  
droid.makeToast("Hello %s" %uname.result)

一个水平进度条

import android 
   droid = android.Android() 
   title = "Progress" 
   str = "Loading..." 
   droid.dialogCreateHorizontalProgress(title,str,100) 
   droid.showDialog() 
	
   for x in range(0,99) 
      time.sleep(0.1) 
      droid.dialogSetCurrentProgress(x) 
		
   droid.dialogDismiss()

模态与非模态对话框

模态对话框或窗口是另一个进程或窗口的子窗口。使用模态对话框,处理将等待或阻塞,直到用户与新对话框交互。

此案例的一个典型示例是警报对话框。在用户执行操作之前,警报不会关闭。

下图是模态对话框的示例。(此处应插入图片)

Modal Dialog Box

总而言之,当您需要在继续执行之前获得用户的输入时,请使用模态对话框。

使用 HTML 的 Python GUI

SL4A 支持构建基于 CSS、HTML、JavaScript 和 Python 的图形用户界面 (GUI)。这种方法使用 HTML 和 JavaScript 构建 UI,使用 CSS 增强 HTML 元素和字体的外观和一致性,并使用 Python 处理任何额外的处理。

以下示例说明了一个基本的 HTML GUI 示例:

1. Speech.html

<html> 
   <head> 
      <title>Text To Speech</title> 
		
      <script> 
         var droid = new Android(); 
         var speak = function(){ 
            droid.postEvent("say",document.getElementById("say").value); 
         } 
      </script> 
		
   </head>
	
   <body> 
      <form onsubmit = "speak()";return false;”> 
         <label for = "say">What is your message?</label> 
         <input type = "text" id = "say"/> 
         <input type = "submit" value = "Speak"/> 
      </form> 
   </body> 
	
</html>

2. txtToSpeech.py

import android 
droid = android.Android() 
droid.webViewShow(‘file:///sdcard/sl4a/scripts/Speech.html’) 

while True: 
   result = droid.waitForEvent(‘say’).result 
   droid.ttsSpeak(result[‘data’])

这两个文件Speech.html 和 txtToSpeech.py必须位于设备上的/sdcard/sl4a/scripts目录中。运行 python 脚本以启动 HTML 文件。

此文件由webViewShow API 调用启动。单击Speak按钮时会生成事件。

SL4A - 使用 Python Facades 的实用程序

基于电子邮件的应用程序

基于电子邮件的应用程序是移动设备中最常见的实用程序之一。可以使用 SL4A Android 外观提供的sendEmail API 调用。

此函数采用三个参数:

  • to_address - 收件人的逗号分隔列表。

  • title - 代表电子邮件的标题。

  • message - 代表要发送的消息。

import android,datetime,smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

droid = android.Android() 
serv = ’smtp.gmail.com’ 
port = 587 
mailto = ’chris’ 
mailfrom = ’charley’ 
pass = ’pass@123’ 

msg = MIMEMultipart() 
msg[‘Subject’] = ’Tes Mail’ 
msg[‘To’] = mailto 
msg[‘From’] = mailfrom 

body = ’This is a test mail!!’ 
msg.attach(MIMEText(body,’plain’)) 

smtpCon = smtplib.SMTP(serv,port) 
smtpCon.starttls() 
smtpCon.login(mailfrom,pass) 
smtpSendmail(mailfrom,mailto,msg.as_string()) 
smtpCon.close()

用于构建电子邮件程序的 python 库是smtplib。此外,我们还使用了 email 库。此库包含许多辅助函数,允许我们以正确的形式构建我们的消息。mimetypes库有助于编码我们的消息。

Wi-Fi 扫描器

以下代码列出了所有可用的 Wi-Fi 接入点。(此处应插入代码)

import android, time 

def main(): 
   global droid 
   droid = android.Android() 
	
while not droid.wifiStartScan().result: 
   time.sleep(0.25) 
	
networks = {} 

while not networks: 
   for ap in in droid.wifiGetScanResults().result: 
      networks[ap[‘bssid’]] = ap.copy() 
		
   droid.dialogCreateAlert(‘Access Points’) 
   droid.dialogSetItems([‘%(ssid)s,%(level)s,%(capabilities)s’ % 
      ap for ap in networks.values() ]) 
		
droid.dialogSetPositiveButtonText(‘OK’) 
dorid.dialogShow() 

if __name__=’__main__’: 
   main()

通话记录

通话记录的代码如下。(此处应插入代码)

import android 
droid = android.Android() 
mylog = droid.getConstants("android.provider.Calllog$Calls").result 
calls = droid.queryContent(mylog["CONTENT_URI"],["name","number","duration"]).result 

for c in calls: 
   print c

SL4A - 使用 Python 进行后台脚本编写

服务是一个在后台运行的组件,无需与用户直接交互。它没有任何 UI(用户界面)。即使应用程序被销毁,服务也会无限期地在后台运行。

本章介绍编写在后台执行特定任务的脚本。

后台任务

SL4A 使脚本能够在终端或后台运行。要在后台启动脚本,请选择看起来像齿轮的图标。脚本在后台无限期运行。但是,可以选择显式关闭此类服务。

启动时运行脚本

每当设备启动时,这些脚本都会启动。“启动时运行”首选项屏幕是一个应用程序,允许您指定设备的启动首选项。该实用程序支持通过主脚本执行多个脚本。主脚本启动其他脚本。

触发器

触发器定义了一组必须响应操作/事件而执行的动作。可以添加和删除触发器。/sdcard/sl4a/scripts 目录允许您选择在触发事件时运行的脚本。可能触发脚本的选项列表包括电池、位置、电话、传感器和信号强度。

基于方向的动作

SL4A 允许我们根据设备的方向和移动来运行脚本。startSensingTimedAPI 用于确定设备的方向和移动。

以下代码段使用 TTS 函数在手机正面朝下放置时通知用户。(此处应插入代码)

import android,time 
droid = android.Android() 
droid.startSensing() 

while True: 
   res = droid.sensorsGetLight().result 
	
   if res is not None and res <=10: 
      droid.ttsSpeak("Device faced down!!") 
   time.sleep(5)

基于位置的动作

图书馆、教堂是您可能经常访问的地点,当您在那里时,您肯定希望使手机静音。SL4A 允许您构建将跟踪您的位置并采取特定操作的脚本。

基于时间/经过时间的触发器

这些触发器用于在一天中的特定时间执行操作。应使用 24 小时制时间格式指定时间。示例包括设置闹钟、提醒等脚本。与基于时间的触发器相反,基于经过时间的触发器在经过一定时间后执行脚本。闹钟应用程序上的暂停选项基于此概念。

Elapsed-Time-based Triggers

SL4A - 打包和分发

本章介绍如何使用 Eclipse 和 QR 码打包和分发脚本。

快速响应 (QR) 码

大多数 Android 设备都包含一个原生的条形码扫描器。SL4A 支持将 QR 码直接导入编辑器。QR 码只能编码 4296 个字符的内容。因此,这种分发方法适用于简短的脚本。

您可以粘贴文本并在几个网站上创建 QR 码。但是,我们将参考http://zxing.appspot.com/generator 来生成我们插图中的 QR 码。

步骤如下:

步骤 1 - 打开内容下拉菜单并选择文本

步骤 2 - 在文本内容的第一行,输入脚本的名称(例如,greet.py)。

QR Code Generator

步骤 3 - 在其下方粘贴脚本内容。

步骤 4 - 从大小下拉菜单中选择条形码大小。

步骤 5 - 点击生成。

步骤 6 - 嵌入生成的条形码图像或共享它。

因此,QR 码是通过博客或网站共享简短脚本的有效方法。

构建应用程序包 - Eclipse

Android 应用程序以单个文件/包形式分发,扩展名为 .apk。Android 包 (.apk) 类似于 .jar 或 .zip 文件。每个 .apk 都包含必须存在的许多必备文件。最重要的文件是AndroidManifest.xml

清单文件执行许多操作:

  • 声明应用程序组件。

  • 标识应用程序需要的用户权限。

  • 声明应用程序使用或需要的硬件和软件功能,例如相机、蓝牙服务等。

  • 指定应用程序需要链接到的 API 库,例如 Google 地图库。

在 eclipse 中构建可分发项目即.apk 的步骤如下:

  • 从 mercurial 下载并安装 Hg - http://mercurial.selenic.com/wiki/Download。将 PATH 变量设置为安装文件夹。

  • 克隆最新的 SL4A 存储库:打开终端并导航到必须创建克隆的目录。输入以下 Hg clone:https://android-scripting.googlecode.com/hg/android-scripting。

  • 打开 Eclipse 并点击文件/导入/常规/现有项目到工作区/下一步并浏览到克隆的目录。点击 Android/确定,然后选择全部并点击完成。

  • 通过点击 Windows/Preferences/Java/BuildPathVariables/New,将ANDROID_SDK包含在 Classpath Variable 列表中。为名称输入 ANDROID_SDK,为文件夹输入您的 SDK 目录(可能是 c:\ProgramFiles\Android\android-sdk-windows)。

  • 点击项目/自动构建,然后点击项目/清理/清理所有项目/确定。

  • 要将脚本转换为APK,请复制ScriptForAndroidTemplate(右键单击/复制,然后右键单击/粘贴到同一区域)。将出现一个名为ScriptForAndroidTemplate副本的新项目。

  • 要将此项目连接到你的 SL4A 克隆版本,双击它,右键单击 build.xml / 运行方式 / Ant 构建。使用重构/重命名将项目重命名为你选择的项目名称,然后刷新/清理/构建项目。

  • 接下来,双击 raw 文件夹,并使用重构/重命名将脚本名称 script.py 改为 **你的脚本名称.py**,然后双击 src/com.dummy.fooforandroid/Script.java 并将 R.raw.script 改为 R.raw.你的脚本名称,然后保存。

  • 双击 **src** 文件夹,并使用重构/重命名将包名 com.dummy.fooforandroid 改为你的.包名.对 gen 文件夹也执行相同的操作。

  • 现在选中你的项目,然后点击项目/属性/Android。选择你的 Android 目标并点击 **确定**。

  • 在项目列表底部,双击 AndroidManifest.xml。将清单文件中的包名 com.dummy.fooforandroid 改为你的.包名。将你的 minSdkVersion 从“4”更改为适合你的 Android 目标的版本(这是项目/首选项/Android 中显示的 Android 目标的 API 级别)。取消你需要的应用程序权限的注释(删除开头的 <!-- 和结尾的 -->)。将调试设置为 **false**。

  • 右键单击 **你的脚本名称.py**,并使用文本编辑器打开。删除默认脚本,替换为你自己的脚本并保存。然后清理/构建/刷新你的项目并运行它。如果一切顺利,点击文件/导出将你的应用程序导出为 apk 文件。

  • 点击 **下一步**。

  • 每个 Android 应用程序都必须经过数字签名才能安装。如果这是你第一次执行此操作,请选择 **创建新的密钥库**。

  • 选择一个文件来保存你的密钥库,并且它必须受密码保护。

  • 点击 **下一步**。注意有效期字段。你可以创建一个有效期为 1 到 99 年的密钥。

  • 最后一个对话框允许你指定 .apk 文件的存放位置。点击完成。

  • 可以使用 Eclipse 或 ADB 工具来测试/安装 .apk 文件。要使用 **ADB** 安装,请打开终端窗口,导航到 .apk 目标目录,然后键入以下命令:

adb install distributable_file.apk
广告