Opérations de base sur les applications

Les API relatives aux opérations sur les applications vous permettent de démarrer et d'arrêter facilement des applications, d'accorder ou de révoquer des permissions, de désactiver ou d'activer des applications, ainsi que de rejouer n'importe quelle activité système (Activity), y compris les activités non exportées.

Lister les applications installées

Obtenir les ID de package de toutes les applications installées sur l'appareil.

d.enumerate_all_pkg_names()
>>> d.enumerate_all_pkg_names()
['com.android.calendar', 'com.android.camera2', 'com.android.contacts', 'com.android.deskclock', 'com.android.dialer', 'com.android.gallery3d', 'com.android.messaging', 'com.android.settings', 'com.android.vending', 'com.android.documentsui', 'com.android.quicksearchbox', 'com.google.android.googlequicksearchbox']

Lister les applications en cours d'exécution

Obtenir des informations sur les applications actuellement en cours d'exécution sur le système.

d.enumerate_running_processes()
>>> d.enumerate_running_processes()
[packages: "com.android.launcher3"
processName: "com.android.launcher3"
uid: 10101
pid: 2333
, packages: "com.google.android.gms"
processName: "com.google.android.gms.persistent"
uid: 10075
pid: 2702
...
>>> result = d.enumerate_running_processes()
>>> print (result[0].processName)
com.android.launcher3

Obtenir une application par son nom

Utiliser le nom commun d'une application pour obtenir son instance (lorsque l'ID de package est inconnu).

# Introduit dans la version 7.75
app = d.get_application_by_name("WeChat")

Obtenir une application par son nom de package

Utiliser l'ID de package d'une application pour obtenir son instance.

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

Obtenir l'application au premier plan

Obtenir l'instance de l'application actuellement en cours d'exécution au premier plan.

app = d.current_application()

Obtenir une application clonée

Obtenir l'instance d'une application clonée (généralement, les applications clonées sont différenciées par l'utilisateur et ont un UID de 999).

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

Démarrer une application

Vous pouvez appeler cette API pour démarrer l'application.

app.start()

Arrêter une application

Vous pouvez appeler cette API pour forcer l'arrêt de cette application.

app.stop()

Vérifier si l'application est au premier plan

Vous pouvez appeler cette API pour vérifier si l'application est actuellement en cours d'exécution au premier plan.

app.is_foreground()

Obtenir les informations de l'application

Vous pouvez appeler cette API pour obtenir des informations sur l'application, telles que sa version.

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'

Vérifier si l'application est installée

Vous pouvez appeler cette API pour vérifier si cette application est installée sur l'appareil.

app.is_installed()

Désinstaller une application

Vous pouvez appeler cette API pour désinstaller cette application de l'appareil.

app.uninstall()

Obtenir les activités récentes

Vous pouvez appeler l'API suivante pour obtenir les 5 dernières activités du système (jusqu'à 12), et vous pouvez également rejouer directement n'importe laquelle de ces activités.

activities = d.get_last_activities(count=5)
>>> d.get_last_activities(count=5)
[{'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}]

Lancer une activité d'application

Vous pouvez rejouer une Activity au niveau du système, et lancer n'importe quelle Activity de n'importe quelle application. Les paramètres disponibles sont les suivants. Notez que les données supplémentaires (extras) ne prennent en charge que les types boolean, int, short, long, double, float et string. Pour la définition du paramètre flags, veuillez vous référer à la documentation 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)

Prenons maintenant l'exemple du retour de l'API Obtenir les activités récentes. Vous pouvez directement rejouer la dernière activité système avec le code suivant.

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

Si vous souhaitez lancer une activité dans une application clonée, le code suivant rejouera l'activité dans l'application clonée.

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

Voici quelques exemples pour votre référence. L'appel suivant composera le numéro du service client 10000.

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

L'appel suivant lancera l'application Paramètres, ce qui est presque équivalent à un démarrage direct de l'application.

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

L'appel suivant ouvrira l'application Paramètres en mode débogage. Si vous avez déjà vu Waitting for debugger, cela pourrait vous être utile. Bien sûr, votre appareil ou votre application doit être débogable. La seule différence avec l'appel précédent est l'ajout du paramètre debug.

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

L'appel suivant vous redirigera directement vers la page des paramètres de certificats.

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

Lister les permissions de l'application

Cette API peut lister les noms de toutes les permissions déclarées par l'application.

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', 'android.permission.WRITE_SECURE_SETTINGS', 'android.permission.DEVICE_POWER', 'android.permission.CHANGE_CONFIGURATION', 'android.permission.MOUNT_UNMOUNT_FILESYSTEMS', 'android.permission.VIBRATE', 'android.permission.BLUETOOTH', 'android.permission.BLUETOOTH_ADMIN', 'android.permission.BLUETOOTH_PRIVILEGED', 'android.permission.ACCESS_COARSE_LOCATION', 'android.permission.NFC', 'android.permission.HARDWARE_TEST', 'android.permission.CALL_PHONE', 'android.permission.MODIFY_AUDIO_SETTINGS', 'android.permission.MASTER_CLEAR', 'com.google.android.googleapps.permission.GOOGLE_AUTH', 'android.permission.ACCESS_DOWNLOAD_MANAGER', 'android.permission.READ_CONTACTS', 'android.permission.WRITE_CONTACTS', 'android.permission.ACCESS_NETWORK_STATE', 'android.permission.LOCAL_MAC_ADDRESS', 'android.permission.ACCESS_WIMAX_STATE', 'android.permission.CHANGE_WIMAX_STATE', 'android.permission.ACCESS_WIFI_STATE', 'com.android.certinstaller.INSTALL_AS_USER', 'android.permission.CHANGE_WIFI_STATE', 'android.permission.TETHER_PRIVILEGED', 'android.permission.FOREGROUND_SERVICE', 'android.permission.INTERNET', 'android.permission.CLEAR_APP_USER_DATA', 'android.permission.READ_PHONE_STATE', 'android.permission.MODIFY_PHONE_STATE', 'android.permission.ACCESS_FINE_LOCATION', 'android.permission.WRITE_APN_SETTINGS', 'android.permission.ACCESS_CHECKIN_PROPERTIES', 'android.permission.READ_USER_DICTIONARY', 'android.permission.WRITE_USER_DICTIONARY', 'android.permission.FORCE_STOP_PACKAGES', 'android.permission.PACKAGE_USAGE_STATS', 'android.permission.BATTERY_STATS', 'com.android.launcher.permission.READ_SETTINGS', 'com.android.launcher.permission.WRITE_SETTINGS', 'android.permission.MOVE_PACKAGE', 'android.permission.USE_CREDENTIALS', 'android.permission.BACKUP', 'android.permission.READ_SYNC_STATS', 'android.permission.READ_SYNC_SETTINGS', 'android.permission.WRITE_SYNC_SETTINGS', 'android.permission.READ_DEVICE_CONFIG', 'android.permission.STATUS_BAR', 'android.permission.MANAGE_USB', 'android.permission.MANAGE_DEBUGGING', 'android.permission.SET_POINTER_SPEED', 'android.permission.SET_KEYBOARD_LAYOUT', 'android.permission.INTERACT_ACROSS_USERS_FULL', 'android.permission.COPY_PROTECTED_DATA', 'android.permission.MANAGE_USERS', 'android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS', 'android.permission.READ_PROFILE', 'android.permission.CONFIGURE_WIFI_DISPLAY', 'android.permission.CONFIGURE_DISPLAY_COLOR_MODE', 'android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS', 'android.permission.SET_TIME', 'android.permission.ACCESS_NOTIFICATIONS', 'android.permission.REBOOT', 'android.permission.RECEIVE_BOOT_COMPLETED', 'android.permission.MANAGE_DEVICE_ADMINS', 'android.permission.READ_SEARCH_INDEXABLES', 'android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE', 'android.permission.OEM_UNLOCK_STATE', 'android.permission.MANAGE_USER_OEM_UNLOCK_STATE', 'android.permission.OVERRIDE_WIFI_CONFIG', 'android.permission.USE_FINGERPRINT', 'android.permission.MANAGE_FINGERPRINT', 'android.permission.USE_BIOMETRIC', 'android.permission.USE_BIOMETRIC_INTERNAL', 'android.permission.USER_ACTIVITY', 'android.permission.CHANGE_APP_IDLE_STATE', 'android.permission.PEERS_MAC_ADDRESS', 'android.permission.MANAGE_NOTIFICATIONS', 'android.permission.DELETE_PACKAGES', 'android.permission.REQUEST_DELETE_PACKAGES', 'android.permission.MANAGE_APP_OPS_RESTRICTIONS', 'android.permission.MANAGE_APP_OPS_MODES', 'android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS', 'android.permission.READ_PRINT_SERVICES', 'android.permission.NETWORK_SETTINGS', 'android.permission.TEST_BLACKLISTED_PASSWORD', 'android.permission.USE_RESERVED_DISK', 'android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS', 'android.permission.CAMERA', 'android.permission.MEDIA_CONTENT_CONTROL', 'com.wapi.permission.ACCESS_CERTIFICATE', 'com.oneplus.faceunlock.permission.FACE_SETTING', 'android.permission.STATUS_BAR_SERVICE', 'android.permission.MODIFY_AUDIO_ROUTING', 'com.oneplus.account.READ_ACCOUNT_INFO', 'com.android.settings.SEND_PERMISSION']

Accorder une permission à l'application

Cette API est utilisée pour accorder des permissions système à une application. Vous devriez utiliser cette API pour définir les permissions avant que l'application ne soit démarrée. L'utiliser pendant que l'application demande une permission n'aura pas pour effet de cliquer sur "Autoriser" pour vous.

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

Le paramètre mode de la méthode grant prend également en charge GrantType.GRANT_DENY, ce qui signifie refuser explicitement la permission. Il y a aussi GrantType.GRANT_IGNORE, dont la signification est assez particulière : il accorde la permission à l'application, mais celle-ci ne peut pas l'utiliser normalement. Par exemple, si une application demande l'accès à la caméra et que vous utilisez ce paramètre pour refuser, la caméra de l'application pourrait afficher un écran noir.

Révoquer une permission de l'application

L'appel à cette API peut révoquer une permission accordée à l'application. Vous devriez également l'appeler avant de démarrer l'application.

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

Vérifier si une permission est accordée

Cette API est utilisée pour vérifier si une permission spécifique a été correctement accordée à l'application.

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

Vider le cache de l'application

Cette API est utilisée pour vider les données de cache de l'application, ce qui n'affecte généralement pas l'application.

app.clear_cache()

Effacer les données de l'application

Cette API est utilisée pour effacer les données de l'application. Attention, cette opération effacera toutes les données de l'application, et les informations telles que les comptes seront perdues.

app.reset()

Obtenir l'activité de lancement

Vous pouvez utiliser cette API pour trouver l'Activity de démarrage de l'application (activité de lancement).

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']}

Activer une application

Cette API est utilisée pour activer une application désactivée. Après l'activation, vous pourrez à nouveau utiliser l'application normalement.

app.enable()

Désactiver une application

Cette API est utilisée pour désactiver une application. Une application désactivée n'apparaîtra pas dans la liste des applications, et vous ne pourrez pas l'utiliser à moins de la réactiver. Cette fonctionnalité vous permet de geler temporairement ou définitivement une application. L'application ne pourra pas démarrer d'elle-même. Lorsque de nombreuses applications sont installées sur l'appareil, vous pouvez désactiver celles que vous n'utilisez pas temporairement pour réduire l'utilisation des ressources système.

app.disable()