Common data service что это за программа на андроид
Компания Google быстро прошла путь от небольшой поисковой системы до гигантской инфраструктуры, компоненты которой работают на наших ПК, смартфонах, планшетах и даже телевизорах. Google неустанно собирает о нас информацию, поисковые запросы тщательно логируются, перемещения отслеживаются, а пароли, письма и контактная информация сохраняются на годы вперед. Все это неотъемлемая часть современности, но мы вполне можем ее изменить.
Ни для кого не секрет, что любое устройство под управлением Android (по крайней мере то, что сертифицировано Google) содержит в себе не только компоненты, собранные из AOSP, но и внушительное количество проприетарных программ Google. Это те самые Google Play, Gmail, Hangouts, Maps и еще куча приложений, включая диалер и камеру (начиная с KitKat).
Для всех этих компонентов нет не только исходного кода, но и вообще каких-либо пояснений по поводу принципов их работы. Многие из них изначально созданы с целью собирать определенные виды информации и отправлять их на серверы Google. Так, например, ведут себя GoogleBackupTransport, отвечающий за синхронизацию списка установленных приложений, паролей и других данных, GoogleContactsSyncAdapter, который синхронизирует список контактов, или ChromeBookmarksSyncAdapter, работа которого — синхронизировать закладки браузера. Плюс сбор информации обо всех запросах в поисковике.
В самом факте синхронизации, конечно, ничего плохого нет, и это великолепный механизм, который позволяет настроить новый телефон за считаные минуты, а Google Now даже умудряется дать нам полезную информацию на основе наших данных (иногда). Проблема только в том, что все это рушит нашу конфиденциальность, ибо, как показал Сноуден, под колпаком у АНБ (и, вероятнее всего, у кучи других служб) находится не только какая-нибудь империя зла под названием Microsoft, но и Google, а также множество других компаний из тусовки «мы не зло, а пушистые меценаты».
Говоря другими словами: Гугл сольет нас всех без всяких проблем, и не факт, что его сотрудники, сидя в своих офисах с массажистками и собачками, не ржут над именами из твоей контактной книги (там все зашифровано, да), попивая 15-летний пуэр из провинции Юньнань. А может быть, к черту этот Гугл? Возьмем их Android, а сами они пусть идут лесом?
Последняя версия кастомной прошивки на основе KitKat для моего смартфона весит 200 Мб, однако, чтобы получить настоящий экспириенс от смартфона, я должен прошить поверх нее еще и архив gapps, размер которого составляет 170 Мб. Только после этого я получу систему, аналогичную предустановленной на Nexus-устройства, со всеми плюшками в виде интегрированного с Google Now рабочего стола, блокировку экрана на основе снимка лица, камеру с поддержкой сферической съемки и килограмм гугловского софта, начиная от Google Play и заканчивая Google Books.
Так Google Apps попадают на смартфон. Из пользователей 99% либо юзают предустановленные приложения, либо устанавливают их самостоятельно на абсолютно чистую и полностью анонимную прошивку. А дальше с момента ввода имени пользователя и пароля начинается синхронизация и слив информации.
Чтобы разобраться, как это происходит, распакуем тот самый архив с gapps и взглянем внутрь. Нас интересуют каталоги /system/app и /system/priv-app , при установке их содержимое копируется в одноименные каталоги внутри смартфона. Второй каталог — это новшество KitKat, в нем размещаются приложения, использующие системные API, помеченные как "private" и не доступные обычным приложениям.
В каталоге /system/app мы найдем большое количество разных гугловских приложений, легко узнаваемых по названию пакета: Books.apk, Chrome.apk, Gmail2.apk и так далее. Каждое из них по-своему будет делиться информацией, но это абсолютно нормально (да, Google будет знать, что ты читаешь Пауло Коэльо через их приложение!). Наибольшую опасность здесь представляет GoogleContactsSyncAdapter.apk, который отвечает только за то, чтобы отправлять на удаленный сервер список контактов. Записываем название в блокнот и идем дальше.
Большинство файлов из каталога /system/priv-app — это сервисы и фреймворки, необходимые для запуска всей этой махины синхронизации и слежки:
- GoogleBackupTransport.apk — занимается синхронизацией данных установленных приложений, паролей Wi-Fi и некоторых настроек;
- GoogleLoginService.apk — связывает устройство с Google-аккаунтом;
- GooglePartnerSetup.apk — позволяет сторонним приложениям получить доступ к сервисам Google;
- GoogleServicesFramwork.apk — фреймворк с различной подсобной функциональностью;
- Phonesky.apk — Play Store (как ни странно);
- PrebuiltGmsCore.apk — Google Services, как видно из названия, это ядро всего комплекта gapps;
- Velvet.apk — поиск от Google, включающий в себя строку поиска на рабочем столе и Google Now.
В сущности, это и есть та часть Google Apps, которая ответственна за слив нашей частной информации. Попробуем от всего этого избавиться.
Самый простой способ отвязать смартфон от Google — это воспользоваться стандартными настройками системы. Метод хорош тем, что не требует ни прав root, ни установки кастомных прошивок, ни кастомного рекавери. Все можно сделать в любой стоковой прошивке без потери доступа к аккаунту и приложениям типа Gmail (если это необходимо). Однако за эффективность никто ручаться не будет, так как вполне возможно, что некоторые компоненты gapps продолжат отправку данных.
За множество настроек синхронизации отвечает также приложение «Настройки Google», которое является частью Google Services. С его помощью, в частности, можно отключить доступ Google к местоположению («Доступ к геоданным -> Доступ к моим геоданным / Отправка геоданных / История местоположений»), отключить отправку личных данных поисковику («Поиск -> Личные данные»), отключить Google Now («Поиск -> Google Now») и отключить удаленное управление («Удаленное управление -> Удаленный поиск устройства / Удаленная блокировка и сброс настроек»).
В тех же «Настройках Google», кстати, можно отключить любое приложение, использующее аккаунт Google для авторизации. Речь при этом идет не только о софте, установленном на девайс, но и вообще обо всех когда-либо использованных приложениях, включая веб-сайты. Я, например, обнаружил в этом списке множество сайтов, на которые не заходил уже как минимум пару лет.
Большинство приложений Google можно безболезненно отключить через настройки: «Приложения -> ВСЕ -> нужное приложение -> Отключить».
Настройки аккаунта Google
Другие статьи в выпуске:
Настройки Google
В том случае, если на стоковой прошивке есть права root, от Google Apps можно избавиться, просто удалив их со смартфона. Как я уже говорил, все они хранятся в каталогах /system/app и /system/priv-app . Например, в случае с KitKat список Google-приложений в первом каталоге будет таким:
- Books.apk — Google Книги;
- CalendarGoogle.apk — Google Календарь;
- Chrome.apk — Google Chrome;
- CloudPrint.apk — система облачной печати;
- Drive.apk — Google Drive;
- GenieWidget.apk — виджет новостей и погоды;
- Gmail2.apk — Gmail;
- GoogleContactsSyncAdapter.apk — синхронизация контактов;
- GoogleEars.apk — Google Ears (аналог Shazam);
- GoogleEarth.apk — Google Земля;
- GoogleHome.apk — домашний экран с интегрированным Google Now;
- GoogleTTS.apk — система синтеза речи;
- Hangouts.apk — Google Hangouts;
- Keep.apk — Google Keep;
- LatinImeGoogle.apk — клавиатура с поддержкой жестов;
- Magazines.apk — Google Журналы;
- Maps.apk — Google Карты;
- Music2.apk — Google Музыка;
- PlayGames.apk — Google PlayGames;
- PlusOne.apk — Google+;
- QuickOffice.apk — QuickOffice;
- Street.apk — Google Street;
- SunBeam.apk — живые обои SunBeam;
- Videos.apk — Google Фильмы;
- YouTube.apk — YouTube.
В каталоге /system/priv-app , кроме перечисленных ранее, также хранятся такие файлы:
- CalendarProvider.apk — хранит данные календаря;
- GoogleFeedback.apk — отправляет отчет об использовании Google Play;
- GoogleOneTimeInitilalizer.apk — мастер установки дополнительных Google-приложений;
- SetupWizard.apk — мастер настройки при первом запуске;
- Wallet.apk — Google Кошелек;
- talkback.apk — оповещение голосом о событиях на устройстве.
Комплект Gapps для KitKat, кроме всего прочего, включает в себя также проприетарную камеру с поддержкой сферической съемки и проприетарный же рабочий стол с интегрированным Google Now.
Но это еще не все. Google Apps зависят от нескольких фреймворков, которые находятся в каталоге /system/framework . Это файлы com.google.android.maps.jar, com.google.android.media.effects.jar и com.google.widevine.software.drm.jar. Еще есть множество библиотек в каталоге /system/lib , которые используются исключительно Google-приложениями. Удалять их совсем не обязательно, но можно. Просто чтобы очистить мусор. Их список ты найдешь на сайте ][.
В прошлых (да и в будущих) версиях системы содержимое Google Apps отличается, поэтому перед удалением рекомендую скачать gapps нужной версии с сайта goo.im/gapps, распаковать с помощью WinRar и просмотреть содержимое. Также следует учитывать зависимость некоторых приложений из маркета от приложений Google, подробнее об этом я расскажу позже.
Это только часть библиотек, входящих в комплект gapps
Предыдущий способ можно существенно упростить, если просто установить на смартфон кастомную прошивку без Google Apps. В этом случае смартфон/планшет будет кристально чист без всякой привязки к Google. Недостаток этого способа — отсутствие Google Play, но можно либо заменить его сторонним магазином приложений (об этом ниже), либо использовать следующий способ, который включает в себя установку урезанной версии Google Apps.
Этот способ частичной отвязки от Google — своего рода компромисс. Он не решает проблему слежки — по крайней мере без настроек из первого способа, — но позволяет не захламлять систему кучей бесполезного софта, который будет висеть в фоне и жрать память. Суть проста — ставим кастомную прошивку и заливаем поверх нее минималистичную версию gapps, которая включает в себя только Google Play.
Таких минимальных сборок gapps в Сети множество, но я бы рекомендовал использовать проверенные временем BaNkS Gapps, а именно файл «месяц-числоGAppsCore4.4.2signed.zip». Они работают на любом смартфоне, совместимы с ART и включают в себя только основные файлы gapps, список которых приведен в разделе «Что такое Gapps», файлы фреймворка, а также несколько библиотек. По сути, это Google Play, инструменты синхронизации и ничего больше.
Меняем поисковик на DuckDuckGo
Даже после полного отключения синхронизации на домашнем экране останется «встроенная» строка поиска Google. В стоковых прошивках некоторых производителей (Samsung, например) это всего лишь виджет, который можно легко удалить с экрана. В чистом Android и девайсах от многих других производителей она «вшита» в домашний экран, но ее можно убрать, отключив весь поиск от Google (вместе с Google Now) с помощью меню «Настройки -> Приложения -> Все -> Google поиск -> Отключить» или установив сторонний лаунчер. Далее достаточно скачать из маркета или другого магазина приложений DuckDuckGo и добавить одноименный виджет на домашний экран.
Второй и третий способ предполагают полное избавление от Google Apps, включая Google Play и возможность логина с помощью Google-аккаунта, поэтому мы должны найти способ простой и удобной установки приложений, который не заставлял бы нас выкачивать их самостоятельно, а затем скидывать на карту памяти и устанавливать вручную. Один из таких способов — установить сторонний маркет.
На данный момент существует три более или менее жизнеспособные альтернативы Google Play. Это Amazon Appstore, Yandex.Store и 1Mobile Market. У каждого из них есть свои преимущества и недостатки, которые в основном сводятся к количеству приложений и способам оплаты:
- Amazon Appstore — самый известный магазин приложений после Google Play. Содержит более 75 тысяч приложений (в сравнении с 800 тысячами в Google Play), качество каждого из которых проверяется вручную, так же как в iTunes для iOS. Расплачиваться можно с помощью кредитной карты или амазоновскими монетами (Amazon Coins), которые дают в качестве подарка за покупку планшета Kindle Fire либо в подарок от другого юзера. Одна из самых интересных черт магазина — ежедневная бесплатная раздача одного из платных приложений.
- Yandex.Store — магазин от компании «Яндекс». Содержит более 85 тысяч приложений, каждое из которых проверяется антивирусом Касперского. Особо ничем не выделяется, но зато имеет киллер-фичу в виде возможности оплачивать покупки с помощью сервиса Яндекс.Деньги или счета мобильного телефона.
- 1Mobile Market — крупнейший сторонний репозиторий Android-приложений, включающий в себя более 500 тысяч софтин. Отличается от других наличием исключительно бесплатных приложений (не путать с пиратскими), из-за чего позволяет не проходить стадию регистрации аккаунта и сохранить анонимность.
Приложения во всех трех маркетах имеют оригинальные цифровые подписи разработчиков приложений, что позволяет использовать их одновременно. Приложение, установленное из одного маркета, может быть без проблем обновлено из другого, а при удалении пропадет из списка установленных сразу во всех. Покупать, правда, придется раздельно.
Amazon Appstore Yandex.Market 1Mobile Market
Open Source Маркет
Кроме описанных в статье, а также множества других менее известных магазинов приложений, в Сети можно найти отличающийся от остальных репозиторий F-Droid. Он полностью анонимен и содержит только свободный софт, распространяемый под лицензиями, одобренными фондом FSF. Приложений в F-Droid всего тысяча, зато все они гарантированно не содержат бэкдоров и других систем разглашения личных данных. Именно F-Droid используется в качестве дефолтового маркета в свободной Android-прошивке Replicant.
Несмотря на то что компоненты gapps не являются частью официального API Android, некоторые приложения все-таки ожидают увидеть их в системе, из-за чего может возникнуть ряд проблем — от полной неработоспособности приложения до потери части его функций. Некоторые приложения откажутся устанавливаться из-за отсутствия Google Maps API, другие падают сразу после запуска, не обнаружив его, третьи включают в себя прямые ссылки на Google Play, что может привести к падениям и некорректной работе.
Чтобы решить эти проблемы, пользователь MaR-V-iN с XDA начал проект NOGAPPS, в рамках которого ведется разработка набора открытых компонентов, заменяющих оригинальную функциональность Google Apps. В данный момент доступно три компонента-замены:
- Network Location — сервис геолокации на основе Wi-Fi и базовых станций GSM. Основан на базе данных IP-адресов от Apple и открытой базе базовых станций;
- Maps API — замена интерфейса к Google Maps на основе OpenStreetMap;
- BlankStore — открытая альтернатива клиенту Play Store. Позволяет устанавливать бесплатные приложения из магазина Google, но не рекомендуется к использованию из-за возможных санкций со стороны поисковика (это запрещено их правилами).
Установка компонентов производится отдельно и разными способами. Network Location достаточно вручную скопировать в каталог /system/app/ в Android 2.3–4.3 или в каталог /system/priv-app/ в KitKat (в этом случае следует использовать файл NetworkLocation-gms.apk). Maps API устанавливается с помощью прошивки файла nogapps-maps.zip через консоль восстановления. Для установки маркета придется не только копировать файл, но и генерировать Android ID на большой машине, но, так как делать это не рекомендуется, я не буду об этом рассказывать и ограничусь ссылкой на инструкцию.
После всех манипуляций софт должен корректно заработать.
Для компании Google Android без ее собственных приложений бесполезен, поэтому нет ничего удивительного в том, что компания выносит в них самые вкусные части системы и оставляет код закрытым. Однако в этой статье я показал, что жизнь без gapps есть и она может быть даже проще и удобнее, чем с Google.
[authors]
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Всем привет Сегодня я расскажу о том что такое com.sec.android.app, ну то что это из Андроида, думаю и так понятно. Начал искать и выяснил что com.sec.android.app… ну это не совсем программа. Это идентификатор, но проблема в том, что это только часть. Так бы сказать основное, не полный идентификаторы, а только его главная часть, понимаете?
Поэтому мне нет смысла писать о том что такое com.sec.android.app — лучше я напишу о некоторых идентификаторах, в которых упоминается com.sec.android.app, окей?
com.sec.android.app.sbrowser
Это ребята как я понял фирменный браузер Samsung Internet. Его наверно можно встретить на телефонах Самсунг и вполне возможно что приложение системное. Вот нашел картинку, тут отображено кто сколько кушает батарею и видно что браузер немного кушает — всего 6%:
В телефонах этот браузер может просто называться как Интернет:
Ну и еще одна картинка и все:
Так, с com.sec.android.app.sbrowser разобрались — это браузер. Файл apk этого браузера может иметь название примерно такое — SBrowser_3.0.38_LATEST.apk.
Если с браузером проблемы — то.. стоит обратится в поддержку Самсунг, все таки их браузер. В самом крайнем случае можно заморозить, удалять не советую все таки. Для заморозки используйте Titanium Backup
Что это может быть? Вот мои мысли:
- Возможно что это какой-то фирменный вид адреса сайтов в браузере.
- Может это адрес сохраненной страницы в браузере, вроде есть там такая функция. Тем более что я видел адреса, в которых было слово savepage. Но были и те адреса, где упоминалось readinglist — переводится как список для чтения
В общем к сожалению с этими адресами content:// не совсем понятно и внятной инфы в интернете не могу найти
com.sec.android.app.myfiles
Это программа Samsung My Files (Мои файлы) — файловый менеджер, можно управлять всеми файлами, которые есть на Андроиде. То есть это стандартный диспетчер файлов на телефоне Самсунг. Что еще интересно, если этой проги нет, то могут быть ошибки. Например один человек хотел загрузить мелодию в будильник — но не получилось, ибо выдало ему ошибку:
com.sec.android.app.myfiles not found
Так что делаем вывод — лучше не удалять, в крайнем случае можно попробовать заморозить
Файл apk может называться так — SecMyFiles2015.apk Кстати вот я его и нашел:
А вот как выглядит приложение Мои файлы, смотрите:
Правда это у нас не смартфон, это планшет, а то как-той экран необычный как для смарта..
com.sec.android.app.simsettingmgr
Теперь поговорим про com.sec.android.app.simsettingmgr, значит поискал и выяснил что это какой-то диспетчер SIM-карт.
Если посмотреть на само название, то есть на com.sec.android.app.simsettingmgr, то.. смотрите тут есть слово app, это значит приложение, и есть слово simsettingmgr, его можно разобрать как sim, setting и mgr. Что такое sim — понятно, это симка. Setting — настройка. Ну а mgr — возможно манагер, то есть менеджер.
Всем привет Поговорим о таком как Common Data Service (com.mediatek.connectivity), я расскажу что это такое и для чего нужно. Значит ребята, я перерыл весь интернет, но информации как кот наплакал! Кое что я конечно узнал, но сразу предупреждаю, то извините что я не нашел много инфы, ее тупо нет!
Значит вот что я узнал, Common Data Service удалять НЕЛЬЗЯ, это приложение которое информирует о GSM, Wi-Fi сетях, также тут можно просмотреть какую-то конфигурацию, сколько было передано данных, и еще тесты какие-то есть… Все это вызывается из инженерного меню. Вообще на другом сайте написано что Common Data Service это пункт GDS Information в инженерном меню. Что это я не знаю но пишу ту инфу что нашел в сети..
Еще я нашел такую инфу, но вроде бы это не относится вообще к Андроиду:
Ага ребята, кое что еще нашел, в общем смотрите нашел в интернете такую картинку:
И что мы тут видим? В самом верху написано Common Data Service, это типа название меню, верно? Ну вот и в этом меню (а может это и есть инженерное меню) есть такие пункты как CDS Information (какая-то служебная инфа, только непонятно о чем), Wi-Fi Information (ну это понятно), Radio Information (инфа про радио-сигналы вроде), Network Utility (видимо инструмент для проверки сети или что-то в этом духе) ну и другие пункты, которые реально похожи на сервисные. Обычному юзеру вряд ли они будут интересны.
И что тут вижу? Есть сервисное меню под названием MTK Engineering Mode Start, в котором если выбрать пункт MTK Settings, то вы попадете в меню EngineerMode, а там если выберите пункт CDS Information, то потом вы уже попадаете в меню Common Data Service! Вот, теперь я думаю все стало понятно.
На этой картинке мы видим что приложение Common Data Service тусуется среди всех остальных приложений:
Если внимательно посмотреть в верхнюю часть окна, то там написано такое как Hidden System Setting, то есть это скрытые системные настройки. Икона приложения тут и на картинках выше совпадает, то есть наверно это одно и тоже
Ну что ребята, вроде бы все написал, инфы мало, ничего больше не нашел Удачи вам в общем, жду вас снова в гости…
Всем привет! Сегодня попробуем автоматизировать процесс создания поручений с использованием платформы данных Microsoft Common Data Service и сервисов Power Apps и Power Automate. На базе Common Data Service построим сущности и атрибуты, при помощи Power Apps сделаем несложное мобильное приложение, ну а Power Automate поможет связать все компоненты единой логикой. Не будем терять времени!
Но для начала немного терминологии. Что из себя представляет Power Apps и Power Automate мы уже знаем, но, если вдруг кто не в курсе, рекомендую ознакомиться с моими предыдущими статьями, например, вот тут или тут. Однако, что из себя представляет Common Data Service мы еще не разбирали, поэтому самое время добавить немного теории.
Как Вы можете заметить, при создании новой сущности необходимо указать ее имя в единичном и множественном значении, а также требуется задать ключевое поле. В нашем случае это будет поле «Наименование». Кстати, также можете обратить внимание, что внутренние и отображаемые имена сущностей и полей указываются сразу на одной форме, в отличие от SharePoint, где требуется сначала создать поле на латинице, а потом уже переименовывать его на русский язык.
Также, при создании сущности есть возможность произвести огромное количество различных настроек, но сейчас не будем этого делать. Создаем сущность и переходим к созданию атрибутов.
Создаем поле Статус с типом «Набор параметров» и определяем 4 параметра в разрезе этого поля (Новое, Исполнение, Исполнено, Отклонено):
Аналогичным образом создаем остальные поля, которые потребуются нам для реализации приложения. Кстати, перечень доступных типов полей указан ниже, согласитесь, их явно немало?
Обратите еще внимание на настройку обязательности полей, помимо «Обязательное» и «Необязательное» есть еще вариант «Рекомендуется»:
После того, как мы создали все необходимые поля, можно посмотреть на весь перечень полей текущей сущности в соответствующем разделе:
Сущность настроена и сейчас необходимо настроить форму ввода данных на уровне Common Data Service для текущей сущности. Переходим на вкладку «Формы» и нажимаем «Добавить форму» -> «Основная форма»:
Настраиваем новую форму для ввода данных через Common Data Service и выстраиваем поля друг за другом, после чего нажимаем кнопку «Опубликовать»:
Форма готова, проверим ее работу. Возвращаемся в Common Data Service и переходим на вкладку «Данные», после чего нажимаем «Добавить запись»:
В открывшемся окне формы вводим все необходимые данные и нажимаем «Сохранить»:
Теперь в разделе «Данные» у нас есть одна запись:
Проверяем состав полей в разделе «Данные». Всё отлично:
Итак, на стороне Common Data Service готова сущность, поля, представление данных и форма для ручного ввода данных непосредственно из CDS. Теперь давайте сделаем приложение холста Power Apps для нашей новой сущности. Переходим к созданию нового приложения Power Apps:
В новом приложении производим подключение к нашей сущности в Common Data Service:
После всех подключений настраиваем несколько экранов нашего мобильного приложения Power Apps. Делаем первый экран с небольшой статистикой и переходами между представлениями:
Делаем второй экран с перечнем имеющихся поручений в сущности CDS:
И делаем еще один экран для создания поручения:
Сохраняем и публикуем приложение, после чего запускаем его для проверки. Заполняем поля и нажимаем кнопку «Создать»:
Проверим, создалась ли запись в CDS:
Проверим то же самое из приложения:
Все данные на месте. Остался финальный штрих. Сделаем небольшой Power Automate поток, который при создании записи в Common Data Service будет отправлять уведомление исполнителю поручения:
В итоге, мы с Вами сделали сущность и форму на уровне Common Data Service, приложение Power Apps для взаимодействия с данными CDS и поток Power Automate для автоматической рассылки уведомлений исполнителям, при создании нового поручения.
В следующих статьях мы с Вами рассмотрим еще больше возможностей Common Data Service и Microsoft Power Platform. Всем хорошего дня!
В этой статье я разберу архитектуру и принцип работы основного приложения Android — SystemUI. Меня заинтересовала эта тема, потому что мне интересно, как устроена система, которой пользуется такое огромное количество пользователей и для которой ежедневно выкатываются тысячи приложений в Google Play или просто на просторы интернета. Помимо этого меня интересует вопрос информационной безопасности Android и создаваемых под него приложений.
В системе Android, SystemUI — это приложение, путь к исходному коду которого находится в platform_frameworks_base/packages/SystemUI/, на девайсе оно находится в system/priv-app/-SystemUI.
priv-app — это каталог, где хранятся привилегированные приложения. К слову, по пути system/app лежат предустановленные приложения, а обычные приложения, которые мы устанавливаем на свой девайс самостоятельно, хранятся в data/app.
Тут сразу возникает вопрос: почему нельзя засунуть все предустановленные и привилегированные приложения в один каталог, зачем нужно это разделение?
Дело в том, что некоторые приложения более системные, чем другие:) И это разделение необходимо для того чтобы уменьшить покрытие эксплойтами системных приложений, для получения доступа к защищенным операциям. Можно создавать приложение, которое будет иметь специальный ApplicationInfo.FLAG_SYSTEM и в системе получит больше прав, однако apk файл с таким разрешением будет помещен в раздел system.
Итак, SystemUI — это apk-файл, который по сути своей обычное приложение. Однако, если посмотреть на сложное устройство SystemUI, перестает казаться, что это всего лишь простое приложение, верно?
Данное приложение выполняет весьма важные функции:
- Навигация
- Недавние приложения
- Быстрые настройки
- Панель уведомлений
- Экран блокировки
- Регулятор громкости
- Главный экран
- .
Запуск SystemUI
Как я и говорила выше, SystemUI не похож на обычное приложение, так что его запуск не сопровождается запуском активности, как это происходит у большинства приложений. SystemUI — это глобальный пользовательский интерфейс, который запускается во время процесса загрузки системы и не может быть завершен.
Если мы залезем в SystemServer, который является одним из двух столпов в мире Android (второй — Zygote, но об этом я расскажу как-нибудь в другой раз), то мы можешь найти место, где стартует SystemUI при загрузке системы.
Тут мы видим как запускается сервис SystemUI с помощью непубличного API startServiceAsUser. Если бы вы захотели использовать это, то вам пришлось бы обратиться к рефлексии. Но если вы решите использовать reflection API в Android — подумайте несколько раз, стоит ли это того. Подумайте раз сто:)
Итак, тут создается отдельный процесс для приложения и по факту каждый раздел SystemUI является отдельным сервисом или независимым модулем.
Метод start() вызывается для запуска каждой службы, которые перечислены ниже.
Регулирование громкости
Мы регулярно пользуемся кнопками громкости на своих устройствах, но не задумываемся какие процессы должны произойти в системе для того чтобы мы могли прибавить или убавить звук. Операция кажется довольно простой на словах, но если заглянуть в VolumeUI, который находится в подпапке SystenUI/volume, в разных режимах интерфейс имеет свою вариацию.
Я уже говорила о том, что сервисы SystemUI запускаются методом start(). Если мы посмотрим на класс VolumeUI, то он тоже наследуется от SystemUI.
Тут мы видим что с помощью mEnabled мы определяем, следует ли нам показывать панель с настройкой звука. И судя по VolumeDialogComponent, VolumeUI отображает звуковую панель в виде диалога. Но все действия относительно нажатия на клавиши громкости обрабатываются в PhoneWindow.
Насколько мы видим, KEYCODE_VOLUME_UP (+) не обрабатывается и перейдет в обработку KEYCODE_VOLUME_DOWN (-). И в обоих событиях, как в onKeyDown, так и в onKeyUp вызывается метод dispatchVolumeButtonEventAsSystemService.
Итак, тут у нас вызывается метод adjustVolume, для того чтобы мы могли проверить наш direction, которому будет присвоен параметр события.
В итоге когда мы доберемся до AudioService, где будет вызван sendVolumeUpdate, где помимо вызова метода postVolumeChanged, будет установлен интерфейс HDMI.
RingtonePlayer
RingtonePlayer в Android выполняет роль проигрывателя. Он так же наследуется от SystemUI и в методе start() мы видим:
Здесь у нас устанавливается mCallback, который по сути является экземпляром IRingtonePlayer.
В итоге можно управлять RingtonePlayerService с помощью Binder для воспроизведения звуковых файлов.
PowerUI
PowerUI отвечает за управление питанием и уведомлениями. Аналогично наследуется от SystemUI и имеет метод start().
Тут регистрируется широковещательный приемник, с помощью которого происходит отслеживание изменений.
Задачи
Recents — это основная и часто используемая функция в мобильных устройствах на базе Android.
Главные функции:
- Отображение всех задач
- Переключение между задачами
- Удаление задач
Помимо этого Recents так же наследуется от SystemUI. В RecentsActivity происходит создание и обновление последних задач, чтобы мы могли увидеть их на нашем экране.
А в с помощью RecentTaskInfo мы можем получить информацию о конкретной задаче.
Вообще, запущенные задачи можно вынести в отдельную тему. Я изучила ее со всех сторон, так как хотела размывать экран приложения перед переходом приложения в background, чтобы в RecentsTask отображалась нечитаемая версия снапшота. Однако, проблема заключается в том, что снапшот приложения берется раньше, чем вызывается onPause(). Эту проблему можно решить несколькими способами. Либо выставлять флаг, чтобы система просто скрывала содержимое экрана с помощью
О чем я говорила в предыдущей статье, посвященной как раз снапшотам.
Можно вообще сделать так, чтобы конкретная activity приложения не отображалось в задачах, проставив в манифесте
Либо можно воспользоваться хитростью с помощью
Можно задать основной активности выше приведенный флаг excludeFromRecents = true, для того чтобы ее экран отсутствовал в запущенных задачах, но во время загрузки приложения запустить отдельную задачу, которая будет показывать либо размытый скриншот с основной активности, либо любое другое изображение. Более подробно, как это можно сделать описано в официальной документации на примере Google Drive.
Экран блокировки
Keyguard уже посложнее всех вышеприведенных модулей. Он представляет из себя сервис, который запускается в SystemUI, а управляется при помощи KeyguardViewMediator.
Однако на самом деле KeyguardService самостоятельно не работает с интерфейсом экрана блокировки, он лишь передает информацию в модуль StatusBar, где уже и производятся действия относительно визуального вида экрана и отображения информации.
Панель уведомлений
- Инициализация SystemBars
- Отображение уведомлений
То мы видим ссылку на ресурс из которого читается имя класса и создается его экземпляр.
Таким образом мы видим что тут вызывается StatusBar, который будет работать с выводом уведомлений и UI.
P.S. Подбор материала и более короткие статьи я всегда выставляю на @paradisecurity в телеграм.
Читайте также: