Основные операции с приложениями¶
Интерфейсы, связанные с операциями над приложениями, позволяют вам удобно запускать и закрывать приложения, предоставлять или отзывать разрешения, отключать или включать приложения, а также воспроизводить любые системные Activity, включая любые неэкспортированные Activity.
Список установленных приложений¶
Получить package ID всех установленных приложений на устройстве.
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']
Список запущенных приложений¶
Получить информацию о приложениях, запущенных в данный момент в системе.
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
Получить приложение по имени¶
Использовать общее имя приложения для получения экземпляра приложения (когда Package ID неизвестен).
# Добавлено в версии 7.75
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.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¶
Вы можете вызвать следующий интерфейс для получения последних 5 Activity в системе (максимум 12). Вы также можете напрямую воспроизвести любую из этих Activity.
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}}]
Запуск Activity приложения¶
Вы можете воспроизводить системные 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 с помощью следующего кода.
activity = d.get_last_activities(count=5)[-1]
d.start_activity(**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, это может быть вам полезно. Разумеется, ваше устройство или приложение должны быть отлаживаемыми. Отличие от предыдущего вызова заключается лишь в добавлении параметра 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', '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']
Предоставление разрешений приложению¶
Этот интерфейс используется для предоставления приложению соответствующих системных разрешений. Вам следует использовать этот интерфейс для настройки разрешений, когда приложение не запущено. Использование его во время запроса разрешений работающим приложением не приведет к автоматическому нажатию кнопки "Разрешить".
from lamda.const import *
app.grant(PERMISSION_READ_PHONE_STATE, mode=GrantType.GRANT_ALLOW)
Параметр mode метода grant также поддерживает 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()
Получение основной Activity¶
С помощью этого интерфейса вы можете запросить стартовую Activity (основную 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()