Ваш смартфон способен на большее: функции, трюки, настройки инженерного меню Android
Новенький смартфон хорош со всех сторон. Но проходит время – и он уже не тот: звук в наушниках становится тише, микрофон – глуше, батареи хватает на полдня… Значит, пора старичку на свалку? Не торопитесь, он вам еще послужит: достаточно разбудить его скрытые резервы.
Аппаратная начинка большинства мобильных устройств используется лишь на 80-90% своего потенциала. А чтобы выжать из нее все 100, нужно попасть в одну секретную область – инженерное меню, которое… Поговорим, что представляет собой инженерное меню Android, как в него войти, какие в него заложены функции и как их использовать.
Они хотели скрыть это от нас
Инженерное меню – это сервисное приложение для тестирования, отладки и тонкой настройки аппаратных функций смартфона или планшета. Конечно, оно предназначено не для пользователей, а для разработчиков и сервисных специалистов, но пытливый юзерский ум не ведает покоя: как же не использовать этот кладезь в своих целях, если есть такая возможность?
А возможности инженерного меню действительно стоят внимания. Ведь в их числе:
- Получение самой достоверной информации о железе мобильного девайса.
- Управление функциями телефонии и беспроводной связи.
- Аппаратная настройка множества функций, в частности, регулировка громкости динамиков и чувствительности микрофона (пожалуй, самая востребованная опция у владельцев смартфонов).
Инженерное меню есть не на всех Android-телефонах и планшетах. На бюджетных девайсах сильно китайских брендов, а особенно «no name» зачастую его нет. Также его часто нет на устройствах с процессорами Qualcomm.
Набор доступных функций и сама организация инженерного меню зависят от марки процессора и оснащенности устройства тем или иным оборудованием. Основная масса смартфонов и планшетов базируется на процессорах MTK (MediaTek), поэтому знакомиться с ним будем на их примере.
Как попасть в «инженерку»
Войти в инженерное меню бывает не так-то просто. На одних гаджетах оно открывается только после получения прав суперпользователя (root), на других без root доступна часть функций, на третьих – все, достаточно включить режим разработчика (он активируется многократным касанием строки «Номер сборки» в разделе настроек «О телефоне»).
Для открытия меню используют специальные коды, которые набирают так же, как команды USSD – на телефонной клавиатуре, либо приложения из Google Play маркета.
В таблице ниже приведен список кодов для разных марок мобильных устройств:
Любые на базе MTK | |
ZTE, Motorola | *#*#4636#*#* |
Sony | *#*#7378423#*#* |
Huawei | |
Lenovo , Fly, Philips, Prestigio, Alcatel, Texet | *#*#3646633#*#* |
HTC | |
BQ | *#*#83781#*#* |
А далее – приложения, которые создают ярлык на рабочем столе для быстрого доступа к «инженерке» смартфонов и планшетов на MTK:
- Инженерное Меню MTK
- MTK Engineering Mode
- Запуск инженерного меню
- Запуск инженерного меню мтк
- MTK Engineer Mode
- Super MTK Engineering
- MTKAPP : MTK Engineer Mode
- MTK Engineering Mode – Advanced Settings & Tooling
К сожалению, универсально-совместимых приложений здесь нет, поскольку их не существует. Многие платформы, даже оснащенные процессорами MediaTek, не поддерживают часть программ из этого списка, а некоторые и вовсе ни одну.
Знакомство с инженерным меню смартфона MTK
Для входа в «инженерку» использовалось приложение MTK Engineer Mode, ссылка на которое приведена ваше.
Как видно на скриншоте, стартовая страница утилиты содержит кнопки перехода к трем основным разделам:
- Android Settings (настройки ОС Android).
- MTK Settings (собственно инженерное меню устройства).
- Samsung Settings (настройки устройства Самсунг). Доступно только на аппаратах этой марки.
В Android Settings находятся разделы информации о телефоне, куда дополнительно входят средства проверки, включения и выключения некоторых функций, а также информация о батарее, WLAN (беспроводных соединениях) и статистика использования аппарата.
На тестовом смартфоне этот раздел выглядит так:
Но нас интересует не он, а то, что дальше – MTK Settings. Рассмотрим его разделы подробнее.
Telepfony
- Auto Answer – автоответчик на входящий звонок. Можно включить или выключить.
- AntennaTest – параметры антенн мобильной связи для работы в сетях 3G и 4G.
Установка в настройках Antenna Test (3G Fdd) опции Resume default setting – один из эффективных способов устранения провалов связи в сетях 3G.
- Band Mode – поддержка частотных диапазонов модуля GSM.
Отключение полос частот, которые не использует ваш мобильный оператор, снижает расход заряда аккумулятора. Иногда весьма значительно.
- BSPTelephonyDevTool – средство мониторинга и управления работой SIM-карт.
- CFU – раздел настройки переадресации входящих вызовов. Может использоваться, если услугу поддерживает сотовый оператор.
- LTEinformation – настройка вывода информации о параметрах 4G (на аппаратах без поддержки этого стандарта раздел отсутствует).
- AT Command Tool – консоль разработчика, предназначенная для выполнения некоторых операций (набора номера, изменения свойств интернет-подключения и т. д.) посредством AT-команд.
- Misc Feature Config – в этом разделе можно активировать опции «Использовать только 2G» и «Включить вибрацию при ответе абонента».
- Modem Test – набор средств тестирования и настройки работы модема с устройствами разных типов.
- Network Selecting – раздел выбора стандарта мобильной связи, которая будет использоваться на телефоне. Отключение неиспользуемых стандартов уменьшает расход заряда аккумулятора.
- NetworkInfo – содержит настройки вывода информации о различных параметрах сотовой связи.
- GPRS – параметры GPRS-подключения для каждой SIM-карты.
- HSPA Info – данные о стандарте 3G.
- Mobiledataservicepreferred – настройка приоритетности передачи мобильных данных перед телефонной связью.
- Fast Dormancy – настройки энергосберегающего режима (доступны при условии поддержки сотовым оператором).
- RFDe-senseTest – средства тестирования и тонкой настройки передачи голосового трафика в разных частотных диапазонах.
- Simme Lock – ручные настройки GSM (доступно при поддержке сотовым оператором).
- World Phone – настройки модема.
Основная масса параметров этого раздела оптимально настроена по умолчанию, поэтому без уверенности в понимании своих действий лучше ничего здесь не менять.
Connectivity
Вкладка инженерного меню Connectivity содержит инструменты тестирования и управления работой беспроводной связи.
- Bluetooth – в этом разделе собрано все, что имеет отношение к настройкам одноименного интерфейса.
- CDS Information – содержит параметры всех интерфейсов WLAN, доступных на устройстве.
- FM Receiver – набор средств проверки и настройки FM-радиоприемника.
- Wi-Fi – средства тестирования и тонкой настройки Wi-Fi.
- Wi-FiCTIA – содержит тест различных режимов работы Вайфая. Здесь же хранятся журналы проверок.
- Wi-FiDisplay – отображает параметры воспроизведения видео при подключении к Wi-Fi.
Hardware Testing
В Hardware Testing собраны инструменты проверки аппаратных устройств и интерфейсов Андроид-смартфона: звука, камер, дисплея, тачскрина, памяти, гнезда USB и т. д.
- Раздел Audio предназначен для настройки и тестирования всех звуковых устройств. Здесь находятся инструменты управления громкостью динамиков и чувствительностью микрофона, которыми довольно часто пользуются владельцы гаджетов.
Чтобы увеличить громкость телефонного динамика, войдите в подраздел Audio Normal Mode . Откройте список Type и выберите Sph. Из списка Level выберите начальный уровень громкости Level 0 и измените значение в поле Value is: чем оно больше, тем сильнее сигнал. Однако увеличивать его сверх 5-15% крайне нежелательно, так как это может вывести оборудование из строя. Для сохранения настройки нажмите кнопку Set. Повторите действия со следующими уровнями, пока результат вас не устроит.
Для усиления звука из динамика громкой связи выберите в списке Type параметр Ring.
Для повышения чувствительности микрофона – mic.
Чтобы увеличить громкость в играх, при прослушивании музыки и просмотре видео, выберите Media. Остальное проделайте так же, как написано выше.
Уровни звучания на разных аппаратах заданы по-разному, единого стандарта нет. Поэтому искать оптимальные значения приходится экспериментальным путем.
- Раздел Camera также содержит массу настроек. Чаще всего они оптимальны, и их изменения приводят лишь к ухудшению качества фото.
Но если ваш аппарат сохраняет снимки только в формате JPG, что ограничивает возможности при обработке их в графических редакторах, откройте в разделе Camera список Capture Type и выберите формат RAW.
- В разделе DrivingCurrentCamera отображается величина силы тока модуля камеры.
- De-Sense представляет собой диспетчер оборудования, через который настраивают его конфигурации.
- Через Display управляют частотой мерцания и другими свойствами подсветки экрана.
- В Sleep Mode содержатся параметры спящего режима.
- IO – подраздел управления устройствами ввода-вывода.
- Memory содержит сведения о модуле памяти.
- Через Power просматривают и настраивают параметры управления питанием и зарядкой АКБ.
- SDCardTest тестирует установленную в телефон SD-карту.
- Раздел TouchScreen помогает выявлять дефекты сенсорного экрана и настраивать его чувствительность.
- USB отображает информацию об этом интерфейсе и тестирует его функционал.
- Раздел Sensor предназначен для калибровки сенсора.
- Через Video управляют отдельными параметрами воспроизведения видеоматериалов.
Остальное
Вкладка Location содержит средства управления системой геолокации смартфона. Работу некоторых опций этого меню мы рассматривали в статье о проблемах с GPS-навигацией.
В Log and Debudding собраны утилиты отладки и тестирования железа, а также их логи.
Others вмещает в себя всё, что не вошло в другие разделы инженерного меню. В частности, подраздел Setting Font, через который можно менять свойства системного шрифта; Thermal, где отображаются показания термодатчиков (функция мониторинга температур есть не на всех аппаратах); USB ACM, где собраны настройки подключения USB-модемов и многое другое. Функциональный набор этой вкладки на разных девайсах сильно различается.
К великому сожалению, официальной документации по работе с «инженеркой» Андроид-гаджетов в свободном доступе нет. И если вы всерьез настроились ее изучить, то действовать придется методом тыка на свой страх и риск. Да, основной функционал этого меню уже изучен и описан, и риск превратить телефон в кирпич относительно небольшой. Но все же проявляете осторожность и тщательно запоминайте, что делаете, ведь кнопки «Вернуть все обратно», если что-то пойдет не так, здесь не предусмотрено.
Источник
Русские Блоги
Режим энергосбережения для управления питанием Android 9.0
На платформе Android проблема энергопотребления подверглась критике. Начиная с Lollipop, Google также придавал большое значение преобразованию режима энергосбережения. В этой статье будет систематически анализироваться текущий процесс режима энергосбережения Android, основанный на последнем Android Pie-коде, и даются некоторые рекомендации по некоторым пунктам, которые можно оптимизировать в дальнейшем. Эта статья начнется с SystemUI.
Эта картина, как полагают, будет иметь впечатление, что студенты, использующие телефоны Android, относится к QuickSettings SystemUI.
Ручка BatterySaverTileCllick реагировала на щелчки в режиме энергосбережения.
mBatteryController является экземпляром объекта класса BatteryController, поэтому setPowerSaveMode реализован в BatteryControllerImpl.
BatterySaverUtils Здесь frameworks/base/packages/SettingsLib Один из классов, методы этого класса, являются статическими типами, что удобно для других классов для вызова методов.
Когда мы нажимаем кнопку режима энергосбережения и запускаем режим энергосбережения, параметры здесь powerSave Будет установлен в true, и needFirstTimeWarning Это также должно быть правдой.
Методы, реализованные в этом классе, в основном context.getSystemService(PowerManager.class).setPowerSaveMode(enable) 。
пройдет getSystemService Иди получить PowerManager Объект, а затем перейти к вызову setPowerSaveMode Функция для конкретных настроек.
PowerManager является одним из основных сервисов Android.
PowerManager — это внешний интерфейс, предоставляемый платформой. Реальная реализация находится в PowerManagerService 。
Здесь следует отметить несколько вещей:
- enforceCallingOrSelfPermission Это надежная память об инфраструктуре Android, в основном проверяющая, имеет ли UID текущего вызывающего процесса разрешение на работу с определенной системой. Например, режим энергосбережения, потому что он работает в SystemUI, поэтому SystemUI из AndroidManifest.xml Внутри, обязательно объявят DEVICE_POWER Разрешение, в противном случае оно будет выдано в качестве исключения.
- После того, как SystemUI вызывает PowerManager и проверяет разрешения, Binder.clearCallingIdentity Очистит процесс SystemUI UID , PID Информация, замените ее процессом, в котором находится PownerManager UID , PID Содержание. Поскольку эта часть включает в себя связывание связующего, мы подробно остановимся на этом в последующем содержании связующего.
- В try <> finally <> вызов Binder.restoreCallingIdentity() 。
Эта функция предназначена для восстановления информации uid и pid удаленного абонента, которая точно clearCallingIdentity Обратный процесс. - Далее это основной вызов, setLowPowerModeInternal(enable) Параметры здесь, в случае нажатия на режим энергосбережения, enable = true 。
setLowPowerModeInternal Операция на самом деле очень проста, используйте BatterySaverStateMachine Объект mBatterySaverStateMachine Позвонить setBatterySaverEnabledManually 。
Здесь enabled Ранее прошло в качестве true , Так что это можно перевести как
public static final int REASON_MANUAL_ON = 2;
Следующий enableBatterySaverLocked Функция, которая будет обновлять контент до global setting Дюйм
- wasEnabled Первое, что нужно сделать, это определить, было ли оно уже включено ранее, и если да, вернуть.
- isPowered Если это правда, он вернется напрямую.
- mLastChangedIntReason , mLastChangedStrReason Будет сохранено как ранее переданное значение, которое mLastChangedIntReason=2 , mLastChangedStrReason=»Manual ON» .
- manual и enable они true Статус, так будет upateSnoozingLocked И эта функция на самом деле просто установка mBatterySaverSnoozing Значение ture , Использование этого значения будет встречено позже.
- putGlobalSetting(Global.LOW_POWER_MODE, enable ? 1 : 0); Уилл LOW_POWER_MODE Устанавливается в 1 в базе данных.
- putGlobalSetting(Global.LOW_POWER_MODE_STICKY, enable ? 1 : 0); Уилл LOW_POWER_MODE_STICKY Устанавливается в 1 в базе данных.
- mBatterySaverController.enableBatterySaver(enable, intReason); После сохранения соответствующей базы данных эта функция будет вызвана для выполнения фактической операции.
При вызове функции enableBatterySaver контроллера в основном говорится, что mEnable имеет значение true. И передать фактическую причину Хэндлеру.
Функция этой функции заключается в заполнении сообщения и отправке цели.
- потому что MSG_STATE_CHANGED Является ли ранее заполненное и отправленное сообщение, поэтому оно будет MSG_STATE_CHANGED По делу.
- handleBatterySaverStateChanged(msg.arg1 == ARG_SEND_BROADCAST, msg.arg2); В функции первый параметр также передается, потому что ARG_SEND_BROADCAST , Так верно, второй параметр заполняется до reason Так что для 2 . handleBatterySaverStateChanged Функция очень сложная и включает в себя jni , native , devices , broadcast В ожидании информации, так что следующая большая вещь.
Эта функция очень большая. Подробная операция выглядит следующим образом:
- final boolean isInteractive = getPowerManager().isInteractive();
Здесь, из PowerManager Получить в Interactive Государство.
isInteractive Все просто:
На самом деле судит wakefulness Является ли значение WAKEFULNESS_AWAKE или WAKEFULNESS_DREAMING Так что же представляет это значение?
WAKEFULNESS_ASLEEP: система в настоящее время находится в режиме гибернации и может быть активирована только вызовом wakeUp ().
WAKEFULNESS_AWAKE: указывает, что система в настоящее время работает нормально.
WAKEFULNESS_DREAMING: указывает, что система в данный момент находится в состоянии интерактивной заставки.
WAKEFULNESS_DOZING: указывает, что система находится в состоянии ожидания
Поскольку мы анализируем здесь режим энергосбережения, он не будет подробно раскрываться.
Когда вы нажимаете кнопку режима энергосбережения во время обычного использования, isInteractive Возвращено true 。
- listeners = mListeners.toArray(new LowPowerModeListener[mListeners.size()]);
здесь mListeners На самом деле, когда вы регистрировались ранее, все, что вы добавили LowPowerModeListener Из службы. Он содержит VibratorService , NetworkPolicyManagerService И так далее. Это содержимое будет сохранено один раз, чтобы облегчить последующее распространение сообщений. - здесь PowerManagerInternal Вызов более сложный, но не имеет практического эффекта. Но для каждого производителя вы можете обратить внимание здесь, потому что частота последующих процессоров может быть установлена вдоль этой линии.
Во-первых, это функция powerHint
Как и прежде, это все равно будет проверять, есть ли DEVICE_POWER Права доступа.
, а затем позвоните powerHintInternal Функция для обработки.
В этой функции hintId, который мы передали, равен 5, и PowerHint.LAUNCH Значение в PowerHint Определено в классе это значение public static final int LAUNCH = 8; .
Таким образом, нативные методы вызываются напрямую.
Соответствующие файлы и функции:
Потому что это зов джни, это просто обертка.
Телефон, которым я пользуюсь — это pixel xl, его соответствующие устройства — marlin, а powerHal — это версия powerHalV1_1, поэтому я перейду к
ret = powerHalV1_1->powerHintAsync(hintId, data);
processPowerHalReturn(ret, «powerHintAsync»);
Итак, соответствующая функция:
powerHintAsync device/google/marlin/power/Power.cpp
Ниже приведена конкретная реализация:
Это еще один сумасшедший пакет. , ,
для perfd Мы пока не будем анализировать это. Потому что при нормальных обстоятельствах power_hint 。
далее power_hint Реализованный код большой, но на самом деле он бесполезен.
Эта функция устанавливает частоту ЦП при различных состояниях питания, но она не проходит hint=5 Суждение, поэтому оно не имеет практического эффекта. , , Но когда мы хотим настроить обработку низкочастотного состояния процессора, это, несомненно, лучший выбор.
Вот перерыв по умолчанию .
- Мы продолжаем возвращаться к основной функции только сейчас для анализа.
Проанализировав вызов pmi, вы приходите к updateBatterySavingStats();
Суть этой функции transitionState , Но он используется только для сохранения текущего состояния, поэтому мы не будем углубляться в него.
- fileValues По умолчанию он пуст, и мы не обрабатываем анализ.
- Следующий плагин немного интересен, потому что он работает как плагин.
Но реальная реализация, aosp реализует только одну:
onBatterySaverChanged
frameworks/base/services/core/java/com/android/server/power/batterysaver/BatterySaverLocationPlugin.java
Конкретная реализация здесь:
killer = false Так установить здесь Global Settings Когда база данных LOCATION_GLOBAL_KILL_SWITCH Установите в 0 。
- Следующим шагом является отправка широковещательных запросов различным службам и пакетам для соответствующей обработки.
Вот три основных трансляции: ACTION_POWER_SAVE_MODE_CHANGING , ACTION_POWER_SAVE_MODE_CHANGED , ACTION_POWER_SAVE_MODE_CHANGED_INTERNAL ,
Затем мы выполним анализ трех передач один на один.
- ACTION_POWER_SAVE_MODE_CHANGING
Передача сначала добавила флаг как FLAG_RECEIVER_REGISTERED_ONLY Указывает, что может быть получена только динамическая регистрация.
Допустимые места:
Один находится Packages/apps/Settings
один frameworks/base/packages/SystemUI/
для BatterySaverReceiver Главное обновление здесь — это статус в настройках.
для sBatteryControllerImpl Скажем, звонок здесь
Встреча здесь PowerSave Состояние сохраняется и называется firePowerSaveChanged Способ достижения.
Здесь, чтобы пройти mChangeCallbacks И обратный звонок onPowerSaveChanged Метод.
Основными методами реализации обратных вызовов являются:
BatteryMeterView.java
StatusBar.java
KeyguardStatusBarView.java
LightBarController.java
BatterySaverTile.java
Вот некоторые из операций над SystemUI и отображением интерфейса.
- ACTION_POWER_SAVE_MODE_CHANGED
Трансляция такая же, как и предыдущая, но также имеет дополнительную Flag: FLAG_RECEIVER_REGISTERED_ONLY
Основные операции получателя:
И что делало каждое из шести мест, принимающих трансляцию?
категория | эффект |
---|---|
BatteryBroadcastReceiver | Уведомить об изменении уровня заряда батареи, войти в режим энергосбережения |
PowerUI | В режиме энергосбережения игнорируйте напоминание о низком заряде батареи |
DeviceStateMonitor | Установите модем в режим энергосбережения |
SoundTriggerHelper | Отключить голосовое взаимодействие |
GnssLocationProvider | Ограничить использование GPS, GPS будет закрыт после выключения экрана |
DeviceStateMonitor Последний звонок выглядит следующим образом:
SoundTriggerHelper Реализация изменена mIsPowerSaveMode Значение выглядит следующим образом:
GnssLocationProvider Вызов реализован следующим образом, что легко читается из комментариев.
- Последний является функцией обратного вызова массива, сохраненной ранее:
Слушатели были также упомянуты в нашей предыдущей статье, вот подробное резюме:
категория | эффект |
---|---|
VibratorService.java | Отменить эффект вибрации телефона |
NetworkPolicyManagerService.java | Обновите белый список и ограничения приложений на доступ к сети |
WindowManagerService.java | Отменить анимацию окна |
NetworkPolicyManagerService Вызов выглядит следующим образом:
- Обновление временного белого, белого и белого списков, кроме приложения в режиме ожидания, позволит получить доступ к сети
- Если приоритет процесса выше приоритетного сервиса, разрешите доступ к сети
- isUidValidForBlacklistRules когда uid Здесь media или drm Типы, которые не нужно использовать, или приложения, которые были предварительно авторизованы для доступа в Интернет, не разрешают обновления
- Если это приоритетный процесс, он разрешит доступ к сети даже в ограниченном режиме
- Другие процессы, не входящие в белый список, будут запрещать доступ к RULE_REJECT_ALL
против WindowManagerService Другими словами, эффект состоит в том, чтобы отменить эффект оконной анимации.
Источник