- SL4A 教程
- SL4A - 首頁
- SL4A - Android 概述
- SL4A - Android 架構
- SL4A - Android 指令碼層
- SL4A - 架構
- SL4A - Python 庫
- SL4A - 開發環境
- SL4A - 配置您的裝置
- SL4A - 瀏覽 Android SDK
- SL4A - 使用 Eclipse
- SL4A - 探索 Android API
- SL4A - 構建 GUI
- SL4A - 使用 Python Facades 的實用程式
- SL4A - 使用 Python 的後臺指令碼
- SL4A - 打包和分發
- SL4A 有用資源
- SL4A 快速指南
- SL4A - 有用資源
- SL4A - 討論
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 及其主要元件的廣泛架構。
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 編寫的指令碼。
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。
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://python.club.tw 下載。
安裝完成後,修改 Windows 路徑以新增 Python 目錄。
要驗證系統上是否安裝了 Python,請開啟終端視窗並輸入 Python。
android.py 檔案
唯一需要下載的附加檔案是android.py 檔案。將此檔案的副本包含在 Python 安裝目錄下的 /Lib/site-packages 中。此檔案包含用於 Android 開發的 Python 模組。
Android SDK
Android SDK 提供了許多工具。第一步是為您的作業系統下載相應的安裝檔案。Mac OS X、Linux 和 Windows 的安裝程式都可用。SDK 安裝程式可在 https://developer.android.com/sdk 找到。
此處討論的開發環境是 Windows。Google 提供 zip 檔案和可執行檔案以便在 Windows 上安裝 SDK。
在開發機器上安裝 Eclipse
Eclipse 是用 Java 語言編寫的一個可擴充套件的整合開發環境 (IDE)。它需要安裝 Java 才能執行。Eclipse 有很多版本,例如 Classic、Galelio、Luno、Mars、Neon 等。
它以單個 .zip 檔案的形式分發。您只需解壓縮程式內容即可。解壓縮的資料夾中包含一個 Eclipse.exe 檔案。雙擊該檔案即可啟動程式。
SL4A - 配置您的裝置
安裝 SL4A
有時,您可能希望在裝置上編寫指令碼並執行它們。Android 的指令碼層有助於實現這一目標。要在裝置上安裝 SL4A,請按照以下步驟操作:
在裝置上下載SL4A.apk 檔案。
從通知螢幕啟動.apk 檔案。
在下一個螢幕上選擇安裝以實際安裝 SL4A。
或者,如果您選擇使用模擬器而不是 Android 裝置,請使用模擬器內的瀏覽器安裝 SL4A。裝置上的 SL4A 安裝初始螢幕如下所示。
新增 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 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)。此工具提供附加服務,例如埠轉發服務、裝置螢幕截圖、來電和簡訊欺騙等。
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 建立的專案的儲存位置。
透檢視 - 它是關於任何時候開啟哪些選單和視窗的個人偏好。Eclipse 為典型用法配置了許多透檢視,例如編寫程式碼、除錯等。當您的活動發生變化時,您也可以切換到不同的透檢視。透檢視也是可自定義的。
安裝 Eclipse 外掛
需要配置 Eclipse 才能開發 SL4A 應用程式。在主機上成功安裝先決條件後,必須新增以下 Eclipse 外掛:
適用於 Eclipse 的 ADT 外掛(位於 http://dl-ssl.google.com/android/eclipse/)
適用於 Eclipse 的 Python 外掛(位於 http://pydev.org/updates)
可以使用以下步驟在 Eclipse 上安裝外掛:
步驟 1 - 單擊幫助。
步驟 2 - 選擇安裝新軟體。
步驟 3 - 單擊新增。
步驟 4 - 指定名稱和訪問外掛的 URL。單擊確定。
步驟 5 - 選擇所有工具並單擊下一步。外掛安裝開始
Eclipse 中的 Python 直譯器
請按照以下步驟在 Eclipse 中配置 Python 直譯器。
步驟 1 - 選擇視窗 → 首選項。
步驟 2 - 轉到PyDev → 直譯器 → Python。
步驟 3 - 單擊新建按鈕。
步驟 4 - 為直譯器指定名稱。在“位置”欄位中,輸入 python.exe 的路徑。例如,C:\Python26\python.exe
步驟 5 - 單擊確定。
SL4A - 探索 Android API
SL4A 基於外觀設計模式與底層的 Android API 通訊。本章解釋外觀設計模式的工作原理以及不同的 SL4A API 外觀。
什麼是外觀設計模式?
外觀是一個物件,它提供一個介面,簡化了對應用程式中相關介面的訪問。換句話說,外觀隔離了庫的工作方式與客戶端,並充當每個子系統級別的入口點。因此,客戶端僅透過其外觀進行通訊。下圖說明了這一點。
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()
模態與非模態對話方塊
模態對話方塊或視窗是另一個程序或視窗的子視窗。使用模態對話方塊,處理將等待或阻塞,直到使用者與新對話方塊互動。
此案例的一個典型示例是警報對話方塊。在使用者執行操作之前,警報不會關閉。
下圖是模態對話方塊的示例。(此處應插入圖片)
總而言之,當您需要在繼續執行之前獲得使用者的輸入時,請使用模態對話方塊。
使用 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 小時制時間格式指定時間。示例包括設定鬧鐘、提醒等指令碼。與基於時間的觸發器相反,基於經過時間的觸發器在經過一定時間後執行指令碼。鬧鐘應用程式上的暫停選項基於此概念。
SL4A - 打包和分發
本章介紹如何使用 Eclipse 和 QR 碼打包和分發指令碼。
快速響應 (QR) 碼
大多數 Android 裝置都包含一個原生的條形碼掃描器。SL4A 支援將 QR 碼直接匯入編輯器。QR 碼只能編碼 4296 個字元的內容。因此,這種分發方法適用於簡短的指令碼。
您可以貼上文字並在幾個網站上建立 QR 碼。但是,我們將參考http://zxing.appspot.com/generator 來生成我們插圖中的 QR 碼。
步驟如下:
步驟 1 - 開啟內容下拉選單並選擇文字。
步驟 2 - 在文字內容的第一行,輸入指令碼的名稱(例如,greet.py)。
步驟 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