- 有多種方法可以在 Android 上運行腳本,無論是否需要 root 權限。
- Google 提供 Firebase Test Lab 和 JavaScriptEngine 等先進的解決方案。
- Robo 腳本可讓您自動對行動應用程式進行測試。
- Jetpack 的 JavaScriptEngine 讓您可以有效率且安全地執行 JavaScript 程式碼。
在 Android 上運行腳本已成為開發人員、技術愛好者和高級用戶越來越普遍的需求,他們希望自動執行任務或測試應用程式中的特定功能。然而,並不是每個人都知道從哪裡開始、使用什麼工具,或者是否可以在不 root 裝置的情況下進行這些操作。
在本文中,我們將詳細介紹目前在 Android 裝置上執行腳本的不同方法。從無需特殊權限的簡單選項到 Google 支援的高級方法和系統特定工具。如果您想進一步了解手機的功能,請繼續閱讀,因為本指南非常有用。
什麼是在 Android 上運行腳本?
簡單來說,在 Android 上運行腳本意味著執行一組編碼指令來完成特定任務。這些腳本可以用多種語言編寫,例如Python、JavaScript、shell 腳本 (sh) 甚至 WebAssembly (Wasm)。常見用途包括自動化、應用測試、模擬使用者操作等等。了解如何在 Android 上運行腳本可以簡化許多任務。
無需 root 權限即可在 Android 上運行腳本的選項
嘗試在 Android 上執行腳本時常見的問題之一是 root 存取權。並非所有使用者都希望或能夠 root 他們的裝置。幸運的是,有一些選項不需要超級使用者權限。
從 Android 運行腳本的應用程式
- SH Script Runner:Google Play 上的這個應用程式允許您直接從應用程式執行腳本。一些用戶提到,如果沒有 root 權限,腳本就不會執行系統操作,例如停用 Wi-Fi 或關閉螢幕。但是,對於基本命令或使用者腳本,它運作良好。
- 沒有 root 權限的限制:許多腳本失敗,並出現類似“java.io.IOException:錯誤=2,沒有這樣的檔案或目錄「,這表示該腳本正在嘗試存取只有具有 root 權限才能存取的受保護資源。
- 具有 root 權限的功能:有了超級使用者權限,功能顯著擴展。例如,您可以使用以下命令
svc wifi disableoinput keyevent 26在不鎖定裝置的情況下關閉 WiFi 或螢幕(許多螢幕應用程式無法做到這一點)。
使用 Firebase 測試實驗室在 Android 上執行腳本:Robo 腳本
Google 透過Firebase Test Lab提供了一個強大的選項,可以使用名為Robo 腳本的功能來自動化 Android 應用程式測試。這些腳本可讓您模擬應用程式內的使用者操作,甚至執行系統命令。
什麼是 Robo 腳本?
這些記錄是對應用程式使用者介面 (UI) 操作的錄製,涵蓋從點擊、文字輸入、螢幕導航到特定執行條件的所有操作。它們與 Firebase 的 Robo 測試引擎協同工作,自動探索應用。
Robo Scripting 的主要優勢
- 堅固性:容忍應用程式結構的變化。
- 開放端:腳本完成後,標準 Robo 自動測試可以繼續。
- 可錄製內容:可以從Android Studio錄製,無需編寫程式碼。
- 靈活的:甚至可以與具有非標準介面元素的應用程式(例如遊戲中使用的應用程式)相容。
他們允許你做什麼?
這些序列可用於:
- 將應用程式帶到特定點 從這裡開始測試。
- 模擬使用者流程 以確保一致的體驗。
- 運行亞行命令 直接作為測試的一部分。
如何在 Android Studio 中錄製 Robo 腳本
- 打開Android Studio並前往 工具 > Firebase.
- 訪問選項 錄製機器人腳本 並選擇一個設備。
- 與應用程式互動以記錄操作。
- 保存生成的 JSON 檔案。
- 將此檔案連同 APK 一起上傳到 Firebase 控制台以執行測試。
這個過程不需要高級知識,因此非常適合測試人員甚至初級開發人員。
使用 JavaScriptEngine 執行無需 WebView 的 JavaScript 腳本
Android 提供了一個現代且強大的替代方案,尤其適用於應用程序,那就是使用 Jetpack 的 JavaScriptEngine 程式庫。借助它,您可以無需使用 WebView 即可運行 JavaScript 程式碼,從而使程式碼更輕、更有效率。
相對於 WebView 的優勢
- 降低資源消耗.
- 允許多個獨立環境 (JavaScript隔離)。
- 更高的安全性,因為每個腳本都在獨立的環境中運行。
JavaScriptEngine 的工作原理
您必須建立一個實例 JavaScriptSandbox 並從中得出一個(或幾個) JavaScriptIsolate 運行程式碼。
從 JavaScript 新增的基本範例:
JavaScriptIsolate jsIsolate = jsSandbox.createIsolate();
String code = "function sum(a, b) { return (a + b).toString(); }; sum(3, 4)";
ListenableFuture<String> result = jsIsolate.evaluateJavaScriptAsync(code);
結果是 串。重要提示:您不能使用 return 由於它在全局模式下運行,因此無法發揮作用。
持久性和重用
一個關鍵優勢在於,已宣告的變數和函數會在實例中持久存在。這允許您在重複使用資訊的同時運行多個程式碼片段。
相容性和進階配置
並非所有設備都支援所有庫功能,因此建議使用 isFeatureSupported() 有哪些可用資源。進階功能包括:
- 傳遞大參數 通過
provideNamedData(). - 承諾支持 用於非同步腳本。
- 評估 JavaScript 文件 從磁碟
evaluateJavaScriptAsync(AssetFileDescriptor). - 錯誤控制和受控故障 如
SandboxDeadException.
在 Android 上執行 WebAssembly 程式碼
儘管不太為人所知,但 WebAssembly(Wasm)也可以使用此程式庫在 Android 上運行。最好的?它是在隔離的環境中安全地完成的。
過程類似: 使用 Wasm 代碼傳遞位元組數組 provideNamedData() 然後編譯並運行 在 JavaScript 承諾內。
使用 Google Apps Script 和 AppSheet
如果您的目標是實現自動化或與 Google Workspace 集成,那麼您可以使用Google Apps Script 或 AppSheet:
- 應用腳本:非常適合在電子表格或表單中建立自訂功能、自動化、選單。
- 應用表:允許您使用 Google 試算表或其他來源的資料建立行動應用程序,而無需編寫程式碼。非常適合無需技術知識即可自動執行任務。
這些解決方案在 Android 裝置控制方面受到更多限制,但在商業或教育使用案例中很有用。
我可以在 Android 上運行 Python 腳本嗎?
雖然現有資源並未明確支持,但實際上可以在 Android 上運行 Python 腳本。有些應用,例如QPython、Pydroid 3和Termux,可以讓你順利運行 .py 檔案。你需要安裝對應的應用程式並將腳本載入到其中,不過這種方法與系統整合度不如前面提到的其他方法。
如果您需要在 Android 上執行腳本,您可以根據所需的複雜程度選擇多種選項,從簡單的自動化到深度系統整合或應用程式驗證。
進階可能性與環境細分
在某些情況下,可能需要並行運行腳本而不共享上下文。這可以透過建立多個實例來實現 JavaScriptIsolate 來自同一個沙箱。值得注意的是 每個實例都是獨立的 並且它們不共享變數或函數。
當您需要執行隔離程式碼或來自不同來源的程式碼時,建議採用這種方法,尤其是在與多個使用者或外部整合一起使用的應用程式中。
Kotlin 和協程支持
如果您使用 Kotlin 進行開發,您可以利用協程以非同步方式使用 JavaScriptEngine 程式庫。 kotlinx-coroutines-guava。這使得您可以整合腳本流而不會阻塞使用者介面或使用複雜的回呼。
例如:
lifecycleScope.launch {
val jsSandbox = JavaScriptSandbox.createConnectedInstanceAsync(applicationContext).await()
val jsIsolate = jsSandbox.createIsolate()
val result = jsIsolate.evaluateJavaScriptAsync("'Script ejecutado con éxito'").await()
textView.text = result
}
這種方法非常適合那些想要利用最新的 Google 技術而又免去線程或手動承諾麻煩的現代開發人員。
當談到在 Android 上運行腳本時,可能性是多種多樣的。無論是透過專用應用程式、Google 提供的官方程式庫、Firebase 等雲端運行時,還是 AppSheet 等自動化工具,都有滿足各種需求的解決方案。重要的是了解每種方法的局限性(特別是當您還沒有紮根時),並選擇最適合您的技能水平和腳本目的的方法。