應用操作

本章您可以瞭解如何啟動和關閉應用、授予或撤銷應用的權限、禁用或啟用應用,以及重放任意活動(scheme、Activity)(含未導出的活動)等。

列出安裝的應用

獲取裝置上所有已安裝應用的資訊。

d.enumerate_installed_apps()
>>> d.enumerate_installed_apps()
[packageName: "com.android.uwb.resources"
label: "System UWB Resources"
uid: 10110
enabled: true
system: true
versionName: "T-initial"
, packageName: "com.android.adservices.api"
label: "Android System"
uid: 10105
enabled: true
system: true
versionName: "14"
...

列出執行的應用

獲取系統上當前正在執行的應用相關資訊。

d.enumerate_running_processes()
>>> d.enumerate_running_processes()
[packages: "com.android.launcher3"
processName: "com.android.launcher3"
uid: 10084
pid: 2360
label: "Quickstep"
, packages: "com.google.android.gms"
processName: "com.google.android.gms.persistent"
uid: 10123
pid: 2765
label: "Google Play services"
, packages: "com.instagram.android"
processName: "com.instagram.android"
uid: 10150
pid: 5529
label: "Instagram"
...
>>> result = d.enumerate_running_processes()
>>> print(result[0].processName)
com.android.launcher3

透過名稱獲取應用

使用應用的常用名稱來獲取應用實例(不清楚 Package ID)。

app = d.get_application_by_name("微信")

透過套件名稱獲取應用

使用應用的 Package ID 來獲取應用實例。

app = d.application("com.tencent.mm")

獲取前台應用

獲取當前正在前台執行的應用實例。

app = d.current_application()

獲取多開應用

獲取多開應用的實例(通常情況下,多開應用透過 user 區分,並且 uid 為 999)。

app = d.application("com.my.app", user=999)

啟動應用

啟動這個 APP。

app.start()

關閉應用

強制關閉此應用。

app.stop()

檢查前台執行

檢查應用當前是否正在前台執行。

app.is_foreground()

獲取應用資訊

獲取應用的相關資訊如版本等。

app.info()
>>> app.info()
packageName: "com.android.settings"
uid: 1000
enabled: true
processName: "com.android.settings"
sourceDir: "/system/product/priv-app/Settings/Settings.apk"
dataDir: "/data/user_de/0/com.android.settings"
firstInstallTime: 1230739200000
lastUpdateTime: 1230768000000
versionCode: 1276
versionName: "10"
>>> result = app.info()
>>> print(result.processName)
'com.android.settings'

檢查是否安裝

檢查此應用是否已經安裝在裝置上。

app.is_installed()

解除安裝應用

從裝置上解除安裝該應用。

app.uninstall()

發起應用活動

您可以重放系統級 Activity,調起任意應用的任意 Activity。它的可用參數如下,您需要注意,附加資料(extras)只支援 boolean, int, short, long, double, float 以及 string 類型。 flags 參數的定義請參考文件 developer.android.com/reference/android/content/Intent

from lamda.const import *
d.start_activity(action="*", category="*", component="*", extras={"boolean": False, "int": 1, "string": "abc", "float": 1.123}, flags=FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TASK, data="*", debug=False)

現在我們拿 獲取最近活動 介面的回傳為例,您可以直接透過如下程式碼重放最後一條系統 Activity。

activity = d.get_last_activities(count=5)[-1]
d.start_activity(**activity)

如果您是要調起多開應用,如下程式碼會將 Activity 重放至多開應用。

d.start_activity(**activity, user=999)

下面給您一些示例供您參考,以下呼叫會撥打 10000 客服電話。

d.start_activity(action="android.intent.action.CALL", data="tel:10000")

以下呼叫,會為您啟動 Settings 應用,這幾乎等價於直接啟動應用。

d.start_activity(action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER", component="com.android.settings/.Settings")

以下呼叫,會以除錯模式打開設定應用,如果您見過 Waiting for debugger,那麼它可能對您有用。當然,您的裝置或者 APP 需要是可除錯的,它與上面的呼叫區別僅僅是多了一個 debug 參數。

d.start_activity(action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER", component="com.android.settings/.Settings", debug=True)

以下呼叫,會為您直接跳轉進入憑證設定頁面。

d.start_activity(action="com.android.settings.TRUSTED_CREDENTIALS")

列出應用權限

此介面可以列出應用所有宣告的權限名稱。

app.permissions()
>>> app.permissions()
['android.permission.REQUEST_NETWORK_SCORES', 'android.permission.WRITE_MEDIA_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE', 'android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_SETTINGS',...]

授予應用權限

此介面用於授予應用對應的系統權限,您應在 APP 未啟動時使用此介面進行權限設定,在 APP 執行請求權限時使用並不會產生自動授予權限的效果。

from lamda.const import *
app.grant(PERMISSION_READ_PHONE_STATE, mode=GrantType.GRANT_ALLOW)

它也等於直接提供權限名稱的完整字串:

app.grant("android.permission.READ_PHONE_STATE", mode=GrantType.GRANT_ALLOW)

其中 grant 方法的 mode 參數,還支援 GrantType.GRANT_DENY,意思為明確拒絕該權限。以及 GrantType.GRANT_IGNOREGRANT_IGNORE 的意義較為特殊,其代表授予應用該權限,但是應用實際無法正常使用此權限,比如如果應用請求相機,使用此參數拒絕,應用的相機可能黑屏。

撤銷應用權限

呼叫此介面可以撤銷授予應用的權限,您同樣應該在應用啟動前進行呼叫。

from lamda.const import *
app.revoke(PERMISSION_READ_PHONE_STATE)

檢查是否授予

此介面用於檢查某項權限是否已經正常授予應用。

from lamda.const import *
app.is_permission_granted(PERMISSION_READ_PHONE_STATE)

清除應用快取

此介面用於清除應用的快取資料,通常不會對應用造成影響。

app.clear_cache()

清除應用資料

此介面用於清除應用的資料,注意此操作會清空應用所有資料,應用的資訊如帳號等將會遺失。

app.reset()

獲取入口活動

您可以透過此介面查詢該應用的啟動 Activity(入口活動)。

app.query_launch_activity()
>>> app.query_launch_activity()
{'action': 'android.intent.action.MAIN', 'component': 'com.android.settings/com.android.settings.Settings', 'categories': ['android.intent.category.LAUNCHER']}

啟用應用

此介面用於啟用被停用的應用,啟用後您仍然可以正常使用應用。

app.enable()

停用應用

此介面用於停用應用,被停用的應用將不會在應用列表中顯示,您也無法使用,除非被啟用。該功能可為您臨時或徹底地凍結應用,該應用無自啟動功能,在裝置上的應用安裝較多時您可以適當停用暫時不需要使用的應用以減少系統資源的使用。

app.disable()