アプリ操作¶
この章では、アプリの起動と停止、権限の付与または取り消し、アプリの無効化または有効化、さらに任意のアクティビティ(スキーム、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
名前でアプリを取得¶
パッケージIDが不明な場合、アプリの一般名を使用してアプリインスタンスを取得します。
app = d.get_application_by_name("微信")
パッケージ名でアプリを取得¶
アプリのパッケージIDを使用してアプリインスタンスを取得します。
app = d.application("com.tencent.mm")
フォアグラウンドアプリを取得¶
現在フォアグラウンドで実行中のアプリインスタンスを取得します。
app = d.current_application()
マルチユーザーアプリ(デュアルアプリ)を取得¶
マルチユーザーアプリ(デュアルアプリ)のインスタンスを取得します(通常、マルチユーザーアプリは user で区別され、uid は 999 です)。
app = d.application("com.my.app", user=999)
アプリを起動¶
このアプリを起動します。
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()
アプリアクティビティを起動¶
システムレベルのアクティビティをリプレイし、任意のアプリの任意のアクティビティを起動できます。使用可能なパラメータは以下の通りです。追加データ(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 = d.get_last_activities(count=5)[-1]
d.start_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 をご覧になったことがあれば、役立つかもしれません。もちろん、デバイスまたはアプリがデバッグ可能である必要があります。上記の呼び出しとの違いは 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',...]
アプリ権限の付与¶
このインターフェースは、対応するシステム権限をアプリに付与するために使用します。アプリが起動していない時にこのインターフェースを使用して権限設定を行うべきです。アプリが実行中に権限をリクエストするタイミングで使用しても、自動的に権限が付与される効果はありません。
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_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()
起動アクティビティの取得¶
このインターフェースを使用して、そのアプリの起動アクティビティ(エントリーアクティビティ)を照会できます。
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()