AppSettings · serilog/serilog Wiki · GitHub

python Прошивки
Содержание
  1. Введение
  2. Делаем первоначальные настройки телефона
  3. Что такое google apps
  4. Adding a sink
  5. Adding minimum level overrides
  6. Antivirus free и другие антивирусные программы
  7. Clean master и другие оптимизаторы системы
  8. Configuring the logger
  9. Enabling <appsettings> configuration
  10. Enriching with properties
  11. Install_packages
  12. Setting the minimum level
  13. The weather channel и другие погодные приложения
  14. Using sink extensions from additional assemblies
  15. Write_secure_settings
  16. Базовая конфигурация
  17. Дефолтный браузер
  18. Другие методы настройки
  19. Как использовать системный api?
  20. Классы и функции
  21. Логирование переменных
  22. Модуль logging
  23. Незамораживаемые приложения:
  24. Немного теории
  25. Отключаем приложения через link2sd с root правами
  26. Отключение рекламы без root прав
  27. Решение проблемы зависимости приложений от google apps
  28. Службы которые появились в miui 11 ( android 10 )
  29. Способ номер 2. очистка официальной прошивки
  30. Способ номер 3. кастомная прошивка без gapps
  31. Способ номер 4. google play и ничего кроме
  32. Третий этап блокировок (может повлиять на функциональность, делать строго после создания бэкапа):
  33. Уровень доступа development
  34. Этап первый: отключаем приложения без применения root-прав
  35. Формат вывода
  36. Выводы
  37. .net 5 console app with dependency injection, serilog logging, and appsettings
  38. Вывод стека
  39. Вместо выводов
  40. Заключение
  41. Узнайте больше о Huawei

Введение

Ни для кого не секрет, что любое устройство под управлением Android (по крайней мере то, что сертифицировано Google) содержит в себе не только компоненты, собранные из AOSP, но и внушительное количество проприетарных программ Google. Это те самые Google Play, Gmail, Hangouts, Maps и еще куча приложений, включая диалер и камеру (начиная с KitKat).

Для всех этих компонентов нет не только исходного кода, но и вообще каких-либо пояснений по поводу принципов их работы. Многие из них изначально созданы с целью собирать определенные виды информации и отправлять их на серверы Google. Так, например, ведут себя GoogleBackupTransport, отвечающий за синхронизацию списка установленных приложений, паролей и других данных, GoogleContactsSyncAdapter, который синхронизирует список контактов, или ChromeBookmarksSyncAdapter, работа которого — синхронизировать закладки браузера. Плюс сбор информации обо всех запросах в поисковике.

В самом факте синхронизации, конечно, ничего плохого нет, и это великолепный механизм, который позволяет настроить новый телефон за считаные минуты, а Google Now даже умудряется дать нам полезную информацию на основе наших данных (иногда). Проблема только в том, что все это рушит нашу конфиденциальность, ибо, как показал Сноуден, под колпаком у АНБ (и, вероятнее всего, у кучи других служб) находится не только какая-нибудь империя зла под названием Microsoft, но и Google, а также множество других компаний из тусовки «мы не зло, а пушистые меценаты».

Говоря другими словами: Гугл сольет нас всех без всяких проблем, и не факт, что его сотрудники, сидя в своих офисах с массажистками и собачками, не ржут над именами из твоей контактной книги (там все зашифровано, да), попивая 15-летний пуэр из провинции Юньнань. А может быть, к черту этот Гугл? Возьмем их Android, а сами они пусть идут лесом?

Делаем первоначальные настройки телефона

Отключаем виброотклик и лишние звуки в настройках (Звук и вибрация)

Рабочий стол и Недавние — отключаем “Лента виджетов” (отдельный экран с не очень полезными виджетами от Xiaomi. Ситуацию могла бы изменить возможность использования любых виджетов, установленных в системе.

В разделе Блокировка и защита

Добавляем графический (цифровой ключ), отпечатки и данные о лице (для автоматической разблокировки по лицу)

Расширенные настройки — На заблокированном экране — Скрывать содержимое уведомлений, включаем режим “В кармане”

Play Маркет — Настройки — Автообновление приложений — Никогда (Теперь ни одно установленное приложение не станет самостоятельно обновляться)

Расширенные настройки — Доступ к личным данным (отключаем все ненужные приложения)

Уведомление

Сразу отключаем (ограничиваем) уведомления от надоедливых приложений

Для некоторых программ можно отключить только отображение счетчика уведомлений на иконке приложения, т.е. в шторке уведомления появляться будут, но на иконке никаких циферок мы не увидим. Это может быть актуально для абсолютно любых приложений, которые часто напоминают об обновлениях, регулярных акциях и прочей несущественной информации.

И, наоборот, включаем всплывающие уведомления с разворачиванием на весь экран от приложений, которыми активно пользуетесь, в моем случае это Microsoft Outlook и мессенджеры Whatsapp и Viber. Кстати, в Whatsapp есть свои настройки всплывающих уведомлений, которые позволяют включать экран смартфона даже, если он выключен, — это удобно, когда смартфон большую часть времени находится неподалеку, например, на какой-нибудь подставке или беспроводной зарядке на столе.

Что такое google apps

Последняя версия кастомной прошивки на основе KitKat для моего смартфона весит 200 Мб, однако, чтобы получить настоящий экспириенс от смартфона, я должен прошить поверх нее еще и архив gapps, размер которого составляет 170 Мб. Только после этого я получу систему, аналогичную предустановленной на Nexus-устройства, со всеми плюшками в виде интегрированного с Google Now рабочего стола, блокировку экрана на основе снимка лица, камеру с поддержкой сферической съемки и килограмм гугловского софта, начиная от Google Play и заканчивая Google Books.

Еще раз повторюсь: все это закрытый софт от Google, который по-хорошему вообще нельзя распространять без их ведома (поэтому его нет в кастомных прошивках типа CyanogenMod), но так как извлечь его из прошивок Nexus-девайсов довольно просто, то в Сети можно найти огромное количество подобных архивов, в том числе сильно урезанных.

Для того чтобы выпустить смартфон на Android с набором gapps на борту, производитель должен отправить его на сертификацию в Google, которая, оценив качество и производительность смартфона, либо даст добро, либо отфутболит (но китайцев это вообще никак не останавливает).

Так Google Apps попадают на смартфон. Из пользователей 99% либо юзают предустановленные приложения, либо устанавливают их самостоятельно на абсолютно чистую и полностью анонимную прошивку. А дальше с момента ввода имени пользователя и пароля начинается синхронизация и слив информации.

Чтобы разобраться, как это происходит, распакуем тот самый архив с gapps и взглянем внутрь. Нас интересуют каталоги /system/app и/system/priv-app, при установке их содержимое копируется в одноименные каталоги внутри смартфона.

В каталоге /system/app мы найдем большое количество разных гугловских приложений, легко узнаваемых по названию пакета: Books.apk, Chrome.apk, Gmail2.apk и так далее. Каждое из них по-своему будет делиться информацией, но это абсолютно нормально (да, Google будет знать, что ты читаешь Пауло Коэльо через их приложение!).

Большинство файлов из каталога /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, которая ответственна за слив нашей частной информации. Попробуем от всего этого избавиться.

Adding a sink

Sinks are added with the serilog:write-to key. The setting name matches the configuration method name that you’d use in code, so the following are equivalent:

In XML:

NOTE: When using serilog:* keys need to be unique.

Sink assemblies must be specified using the serilog:using syntax. For example, to configure

If the sink accepts parameters, these are specified by appending the parameter name to the setting.

In XML:

Any environment variables specified in a setting value (e.g. %TEMP%) will be expanded appropriately when read.

Adding minimum level overrides

Since Serilog 2.1, minimum level overrides can be added to change the minimum level for some specific namespaces. This is done with the setting key serilog:minimum-level:override: followed by the source context prefix.

For instance, the following are equivalent :

and in XML

Antivirus free и другие антивирусные программы

Дискуссия о том, нужны ли антивирусные программы на устройствах под управлением Android, иногда бывает довольно горячей. Я придерживаюсь мнения, что если вы не получаете root-права на устройстве и не устанавливаете взломанные программы из сторонних сомнительных источников, то антивирус вам не нужен.

Альтернатива. Если возникли всё-таки сомнения в здоровье гаджета, то установите антивирус, просканируйте, а затем удалите его.

Clean master и другие оптимизаторы системы

Вера в чудеса является самой главной движущей силой для распространения разных «очистителей» и «оптимизаторов». Мол, сотни лучших программистов Google не смогли довести свою систему до ума, а вот этот изобретатель-одиночка взял и сделал! Спешим вас расстроить: большинство подобных приложений либо вообще ничего не делают, либо наносят только вред.

Альтернатива. Используйте имеющиеся в Android инструменты для очистки кэша приложений. Забудьте об оптимизации памяти.

Configuring the logger

To configure the logger, an <appSettings> element should be included in the program’s App.config or Web.config file.

Enabling <appsettings> configuration

The <appSettings> support package needs to be installed from NuGet:

To read configuration from <appSettings> use the ReadFrom.AppSettings() extension method on your LoggerConfiguration:

You can mix and match XML and code-based configuration, but each sink must be configured either using XML or in code – sinks added in code can’t be modified via app settings.

Enriching with properties

To attach additional properties to log events, specify them with the serilog:enrich:with-property directive.

For example, to add the property Release with the value “1.2-develop” to all events:

Install_packages

Как ясно из названия, полномочие INSTALL_PACKAGES позволяет «втихую» устанавливать в систему APK-пакеты. Использовать эту возможность могут либо подписанные ключом прошивки приложения (signature), либо установленные в /system/priv-app. При этом даже не обязательно использовать Java API, достаточно вызвать консолью команду pm (Package Manager) с нужными параметрами:

runCommandWait("pm install "   apkPath, false);

После отработки команды пакет apkPath будет установлен в систему. Ты можешь возразить, что то же самое можно сделать и с правами root, и будешь прав: в данном случае достаточно изменить последний аргумент функции runCommandWait() на true. Однако стоит иметь в виду, что приложения с правами root, во-первых, приводят к появлению окна запроса соответствующих полномочий у юзера, а во-вторых, логируются тем же SuperSU.

Setting the minimum level

To set the logging level for the app use the serilog:minimum-level setting key.

Valid values are those defined in the LogEventLevel enumeration: Verbose, Debug, Information, Warning, Error, Fatal.

The weather channel и другие погодные приложения

The Weather Channel — отличный пример того, как на самой простой функции — отображении прогноза погоды — разработчики умудряются выстроить целый мегакомбайн. Здесь вы увидите и анимированные обои, и метеорологические карты, и букет интерактивных виджетов, и бог знает что ещё.

Альтернатива. Выгляните в окошко — вы получите гораздо более надёжную информацию, чем то, что показывает виджет рабочего стола. Если необходим прогноз, то Google предоставит вам самое надёжное предсказание на неделю вперёд.

Using sink extensions from additional assemblies

To use sinks and enrichers from additional assemblies, specify them with the serilog:using key.

For example, to use configuration from the Serilog.Sinks.EventLog assembly:

Write_secure_settings

Полномочие WRITE_SECURE_SETTINGS появилось в Android 4.2 для защиты некоторых критически важных настроек Android. Среди таких настроек: включение/выключение режима полета, управление настройками местоположения и передачи данных. Оно защищено сразу тремя уровнями доступа: signature, privileged и development.

Как использовать открывшиеся возможности? Например, так:

// Читаем текущее значение настройки
boolean isEnabled = Settings.System.getInt(
getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1;

// Переключаем настройку
Settings.System.putInt(
getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

// Отправляем интент для переключения
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);

Это очень простой код, который тупо переключает смартфон в режим полета или наоборот в зависимости от текущего состояния. Все просто и лаконично.

Базовая конфигурация

Вы можете использовать метод basicConfig (**kwargs) для настройки ведения логов:

«Вы можете заметить, что модуль logging нарушает руководство по стилю PEP8 и использует соглашения camelCase в именнование переменных. Это потому, что он был адоптирован из пакета Log4j (утилиты ведения логов в Java). Это известная проблема в пакете, но к тому времени, когда было решено добавить ее в стандартную библиотеку, она уже была принята пользователями, и изменение ее в соответствии с требованиями PEP8 вызовет проблемы обратной совместимости ». (Источник)

Вот некоторые из часто используемых параметров для basicConfig():

  • level: Корневой логер с установленным указанным уровнем важности (severity).
  • filename: Указание файла логов
  • filemode: Режим открытия файла. По умолчанию это a, что означает добавление.
  • format: Формат сообщений.

Используя параметр level, вы можете установить, какой уровень сообщений журнала вы хотите записать. Это можно сделать, передав одну из констант, доступных в классе, и это позволило бы регистрировать все вызовы logging на этом уровне или выше. Вот пример:

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
DEBUG:root:This will get logged

Теперь будут регистрироваться все события на уровне DEBUG или выше.

Аналогично, для записи логов в файл, а не в консоль, можно использовать filename и filemode, и вы можете выбрать формат сообщения, используя format. В следующем примере показано использование всех трех переменных:

import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
root - ERROR - This will get logged to a file

Сообщение будет записано в файл с именем app.log вместо вывода в консоль. Для filemode значение w означает, что файл журнала открывается в «режиме записи» каждый раз, когда вызывается basicConfig(), и при каждом запуске программы файл перезаписывается. Конфигурацией по умолчанию для filemode является a, которое является добавлением.

Вы можете настроить корневой logger еще больше, используя дополнительные параметры для basicConfig(), которые можно найти здесь.

Следует отметить, что вызов basicConfig() для настройки корневого logger работает, только если корневой logger не был настроен ранее. По сути, эта функция может быть вызвана только один раз.

debug(), info(), warning(), error() и crit() также автоматически вызывают basicConfig() без аргументов, если он ранее не вызывался. Это означает, что после первого вызова одной из вышеперечисленных функций вы больше не сможете изменить настройки корневого logger.

Дефолтный браузер

Некоторые производители и разработчики сторонних прошивок снабжают свои творения специальными версиями браузера. Как правило, в них намертво вшиты ссылки на сайты рекламодателей и другой ненужный вам контент. Кроме этого, никто не может поручиться, что такой браузер не сливает вашу информацию налево. Лучше никогда не использовать подобную программу и вообще, если это возможно, удалить её из системы.

Альтернатива. Для Android существуют десятки хороших браузеров, но самым надёжным и быстрым является, несомненно, Google Chrome. Он функционален, обладает поддержкой самых современных веб-технологий, умеет экономить мобильный трафик и обладает простым и понятным интерфейсом.

А какие приложения вы считаете самыми вредными на платформе Android?

Другие методы настройки

Вы можете настроить ведение журнала, как показано выше, используя функции модуля и класса или создав файл конфигурации или словарь и загрузив его с помощью fileConfig() или dictConfig() соответственно. Это полезно, если вы хотите часто менять конфигурацию ведения журнала в работающем приложении.

Вот пример файла конфигурации:

Как использовать системный api?

Основная проблема, с которой ты столкнешься при работе с системным API, — это полное (за небольшими исключениями) отсутствие документации. Ни в официальных руководствах, ни в неофициальных ты не найдешь почти никаких упоминаний об этом. Информацию придется собирать по крупицам, прошаривая сотни страниц форумов и читая тысячи страниц исходников Android. Однако хоть и небольшую, но отправную точку в виде парочки полезных примеров мы тебе дадим.

Классы и функции

До сих пор мы видели logger по умолчанию с именем root, который используется модулем logging всякий раз, когда его функции вызываются непосредственно таким образом: logging.debug(). Вы можете (и должны) определить свой собственный logger, создав объект класса Logger, особенно если ваше приложение имеет несколько модулей. Давайте посмотрим на некоторые классы и функции в модуле.

Наиболее часто используемые классы, определенные в модуле logging, следующие:

Логирование переменных

В большинстве случаев вам нужно будет включать динамическую информацию из вашего приложения в журналы. Вы видели, что методы ведения журнала принимают строку в качестве аргумента, и может показаться естественным отформатировать строку с переменными в отдельной строке и передать ее методу log.

import logging

name = 'John'

logging.error('%s raised an error', name)
ERROR:root:John raised an error

Аргументы, передаваемые методу, будут включены в сообщение в качестве переменных.

Хотя вы можете использовать любой стиль форматирования, f-строки, представленные в Python 3.6, являются лучшим способом форматирования строк, поскольку они могут помочь сделать форматирование коротким и легким для чтения:

import logging

name = 'John'

logging.error(f'{name} raised an error')
ERROR:root:John raised an error

Модуль logging

Модуль logging в Python — это готовый к использованию, мощный модуль, предназначенный для удовлетворения потребностей как начинающих, так и корпоративных команд. Он используется большинством сторонних библиотек Python, поэтому вы можете интегрировать ваши логи с сообщениями из этих библиотек для создания единого журнала логов в вашего приложении.

Добавить logging в вашу программу на Python так же просто, как написать эту строчку:

import logging

С импортированным модулем logging вы можете использовать то, что называется «logger», для логирования сообщений, которые вы хотите видеть. По умолчанию существует 5 стандартных уровней severity, указывающих на важность событий.

  • DEBUG
  • INFO
  • WARNING
  • ERROR
  • CRITICAL

Модуль logging предоставляет вам логер по умолчанию, который позволяет вам начать работу без дополнительных настроек. Соответствующие методы для каждого уровня можно вызвать, как показано в следующем примере:

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

Вывод вышеупомянутой программы будет выглядеть так:

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

Вывод показывают уровень важности перед каждым сообщением вместе с root, который является именем, которое модуль logging дает своему логеру по умолчанию. Этот формат, который показывает уровень, имя и сообщение, разделенные двоеточием (:), является форматом вывода по умолчанию, и его можно изменить для включения таких вещей, как отметка времени, номер строки и других деталей.

Обратите внимание, что сообщения debug() и info() не были отображены. Это связано с тем, что по умолчанию модуль ведения журнала регистрирует сообщения только с уровнем WARNING или выше. Вы можете изменить это, сконфигурировав модуль logging для регистрации событий всех уровней.

Незамораживаемые приложения:

на некоторых прошивках не отключаются данные службы

Компоненты безопасности MIUI (com.miui.guardprovidee) размораживается после перезагрузки;

Поиск устройства (FindDevice, com.xiaomi.finddevice)

Обновление (system/app/Updater/Updater.apk, com.android.updater)

Источник

Немного теории

Как мы все знаем, в Android есть такое понятие — полномочия приложений (permissions, разрешения). Полномочия прописываются в файл Manifest.xml каждого приложения и определяют то, к каким функциям API сможет получить доступ приложение. Хочешь работать с камерой — добавь в Manifest.xml строку <uses-permission android:name=”android.permission.CAMERA” />.

Есть, однако, в этой стройной схеме одна очень важная деталь, которую сами создатели Android называют уровень доступа (protection level). Чтобы понять, что это такое, попробуй добавить в Manifest.xml любого своего приложения следующую строку:

По идее, данное полномочие должно открыть доступ к API, позволяющему переводить смартфон в режим полета, включать/выключать GPS и делать другие полезные вещи. Но IDE так не считает и поэтому сразу подчеркивает строку как ошибку с формулировкой «Permission is only granted to system apps».

Это и есть предупреждение о нарушении того самого уровня доступа. IDE как бы говорит нам: да, ты можешь попробовать дать своему приложению полномочие WRITE_SECURE_SETTINGS, но Android все равно не разрешит тебе использовать закрепленный за ним API до тех пор, пока ты не сделаешь свое приложение системным.

Упс...
Упс…

Официально в Android существует четыре уровня доступа:

Отключаем приложения через link2sd с root правами

С помощью этого замечательного приложения можно отключить те программы, которые невозможно было отключить стандартным способом или через System App Remover.

Итак, отключаем:

YellowPage – Желтые страницы. Позволяет видеть более подробную информацию об корпоративных клиентах, их номерах и счетах. Удалил. (Можно и удалить )

UniPlay Service (MiLinkService)

com.xiaomi.micloudsdk.SdkApplication (RtMiCloudSDK)

Mi Credit (PaymentService)

Браузер (Browser)

Mi Видео (MiuiVideoPlayer) не обязательно, но если не используете то отключайте

Hardware Test (MiRecycle)

MiCloudSync

Quick Apps (HybridPlatform)

HybridAccessory (com.miui.hybrid.accessory) требует кучу разрешений и ломится в интернет по адресам: libgifimage.so, libimagepipeline.so, libj2v8.so.

MiWebView

Ядро системы безопасности (SecurityCoreAdd)

Отключение рекламы без root прав

Системное приложение msa — главный распространитель рекламы в прошивке MIUI, необходимо по максимуму запретить его использование:

Расширенные настройки — > Доступ к личным данным -> Убираем доступ у msa, MiuiDaemon, Обновление компонентов. В идеале еще надо отобрать права у приложения Безопасность, но такой возможности разработчик не предоставляет.

Безопасность -> Передача данных -> Сетевые подключения -> Системные приложения (в конце списка) -> Ищем и отключаем приложение msa

Безопасность -> Передача данных -> Сетевые подключения -> (три точки в правом верхнем углу) -> Фоновые подключения -> Ищем и отключаем приложение msa

Безопасность -> Приложения -> Находим приложение msa и очищаем все его данные

Решение проблемы зависимости приложений от google apps

Несмотря на то что компоненты gapps не являются частью официального API Android, некоторые приложения все-таки ожидают увидеть их в системе, из-за чего может возникнуть ряд проблем — от полной неработоспособности приложения до потери части его функций.

Чтобы решить эти проблемы, пользователь 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 на большой машине, но, так как делать это не рекомендуется, я не буду об этом рассказывать и ограничусь ссылкой на инструкцию.

После всех манипуляций софт должен корректно заработать.

Службы которые появились в miui 11 ( android 10 )

Антивирус tencen – не вижу ни какого смысла в его существовании

X google enrollment – что-то связанное с технологиями гугл

X-divert – тоже

Способ номер 2. очистка официальной прошивки

В том случае, если на стоковой прошивке есть права root, от Google Apps можно избавиться, просто удалив их со смартфона. Как я уже говорил, все они хранятся в каталогах /system/app и /system/priv-app. Например, в случае с KitKat список Google-приложений в первом каталоге будет таким:

В каталоге /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-приложениями. Удалять их совсем не обязательно, но можно. Просто чтобы очистить мусор. Их список ты найдешь на сайте ][.

Способ номер 3. кастомная прошивка без gapps

Предыдущий способ можно существенно упростить, если просто установить на смартфон кастомную прошивку без Google Apps. В этом случае смартфон/планшет будет кристально чист без всякой привязки к Google. Недостаток этого способа — отсутствие Google Play, но можно либо заменить его сторонним магазином приложений (об этом ниже), либо использовать следующий способ, который включает в себя установку урезанной версии Google Apps.

Способ номер 4. google play и ничего кроме

Этот способ частичной отвязки от Google — своего рода компромисс. Он не решает проблему слежки — по крайней мере без настроек из первого способа, — но позволяет не захламлять систему кучей бесполезного софта, который будет висеть в фоне и жрать память.

Таких минимальных сборок gapps в Сети множество, но я бы рекомендовал использовать проверенные временем BaNkS Gapps, а именно файл «месяц-числоGAppsCore4.4.2signed.zip». Они работают на любом смартфоне, совместимы с ART и включают в себя только основные файлы gapps, список которых приведен в разделе «Что такое Gapps», файлы фреймворка, а также несколько библиотек. По сути, это Google Play, инструменты синхронизации и ничего больше.

Третий этап блокировок (может повлиять на функциональность, делать строго после создания бэкапа):

Плагин службы безопасности (SecurityAdd)

Companion Device Manager помогает находить потерянный телефон

MmsService

msa (MSA-Global) вставляет рекламу в стандартные приложения

Analytics (AnalyticsCore) бэкдор Xiaomi

Лента виджетов (PersonalAssistantGlobal) (можно удалить) взаимодействует с экраном слева от вашего домашнего экрана, там где Заметки, Мероприятия, Ярлыки… Если, заморозить, то экран никуда не девается, но что-то поменять там возможности уже не будет, например, если решите нажать на кнопку «Настройки», то ничего не откроется, кроме сообщения «Приложение не найдено»; Корректное отключение производится через меню Настройки-Рабочий стол и недавние-Лента виджетов

Autotest тесты смартфона

com.android.wallpaperbackup ненужный бэкап

Резервирование в Mi Cloud (CloudBackup)

CloudServiceSysbase (com.miui.cloudservice.sysbase) — сервис связанный с Mi Cloud, скорее всего с активацией и работой;

Mi Cloud (CloudService)

MiuiDaemon (com.miui.daemon) — спорный сервис, где-то пишут, что это сервис мониторинга и отправки данных (а-ля тотальный заговор против конфиденциальности человечества), а где-то пишут, что это сервис управления производительностью (ядром). При отключении данного сервиса мне не удалось обнаружить падений системы и сбоев в работе;

SecProtect (com.qapp.secprotect)

Обновление компонентов (com.xiaomi.discover)

Темы (ThemeManager, com.xiaomi.thememanager). После отключения пункт Темы в Настройках не исчезает, но работать перестает.

miui.external.Application (ThemeModule, com.android.thememanager.module)

Google (Velvet.apk, com.google.android.googlequicksearchbox) поиск от Google, включающий в себя строку поиска на рабочем столе и Google Now. Есть не в каждой прошивке MIUI.

GoogleOneTimeInit (GoogleOneTimeInitilalizer.apk,com.google.android.onetimeinitializer) — мастер установки дополнительных Google-приложений;

SysoptApplication (SYSOPT, com.miui.sysopt)

Отчет (BugReport, com.miui.bugreport)

Заметки (Notes, com.miui.notes) замораживаем, если используем другое приложение, например Заметки Google (Google Keeps)

com.miui.internal.app.SystemApplication (miuisystem, com.miui.system)

WMService (com.miui.wmsvc) – нигде нет информации по этому приолжению, значит надо отключить! ?

Уровень доступа development

В Android есть специальный уровень доступа development, отличие которого заключается в том, что приложения получают его не по факту размещения в /system/priv-app или использования цифровой подписи прошивки, а динамически. То есть система может дать такой уровень доступа любому приложению, а может и отозвать обратно. Но самое важное, что, имея права root, приложение может наделить себя таким уровнем доступа самостоятельно.

Чтобы это сделать, достаточно использовать примерно такой код:

runCommandWait("pm grant "   appName   " android.permission.WRITE_SECURE_SETTINGS", true);

В данном случае приложение appName получит полномочие WRITE_SECURE_SETTINGS вне зависимости от того, где оно размещено и каким ключом подписано. Круто? Вне сомнения, однако WRITE_SECURE_SETTINGS — фактически единственное полезное полномочие с уровнем доступа development. Остальные четырнадцать — это полномочия для отладки и тестирования (чтение логов, дампы памяти и так далее).

Полномочия development в исходниках Android
Полномочия development в исходниках Android

Этап первый: отключаем приложения без применения root-прав

Для аппаратов Xiaomi используем известную многим программу Redmi System manager, загруженную из Play Маркет, после установки будет называться System App Remover.

Также можете использовать link2sd

Отключаем следующие приложения:

Загрузки (без этого компонента файлы прекрасно скачиваются)

Календарь (Calendar) — вместо этого будем использовать родное приложение от Google

Карты (Google Maps) — замораживаем, привычнее пользоваться Яндекс картами

Погода — не думаю, что забугорное приложение будет давать более точные прогнозы, чем Яндекс погода.

Chrome — хороший браузер, но для телефона нужно приложение попроще, то, которое не будет кэшировать все подряд и не будет засорять телефон. Ещё смутил тот факт, что приложение сделали системным, т.е. его нельзя удалить или полность выгрузить из фоновой работе штатными средствами. И это смущает. Установите что-то попроще, например, Яндекс.Браузер Лайт, Opera Mini или какой-нибудь DU Browser Mini.

com.mfashiongallery.emag — это карусель обоев от Xiaomi, для смены изображений на экране блокировки. По мне так можно удалить это приложение или оставить, если Вы любитель украшательств.

Duo — аналог Skype, только от компании Google, не вижу смысла пользоваться приложением, особенно, если уже зарегистрированы в Viber или Whatsapp

Формат вывода

Хотя вы можете передавать любую переменную, которая может быть представлена в виде строки из вашей программы в виде сообщения в ваши журналы, есть некоторые базовые элементы, которые уже являются частью LogRecord и могут быть легко добавлены в выходной формат. Если вы хотите записать идентификатор процесса ID вместе с уровнем и сообщением, вы можете сделать что-то вроде этого:

import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
18472-WARNING-This is a Warning

format может принимать строку с атрибутами LogRecord в любом порядке. Весь список доступных атрибутов можно найти здесь.

Вот еще один пример, где вы можете добавить информацию о дате и времени:

Выводы

Для компании Google Android без ее собственных приложений бесполезен, поэтому нет ничего удивительного в том, что компания выносит в них самые вкусные части системы и оставляет код закрытым. Однако в этой статье я показал, что жизнь без gapps есть и она может быть даже проще и удобнее, чем с Google.[authors]

.net 5 console app with dependency injection, serilog logging, and appsettings

In this article we will be building a .Net 5 console app which support dependency injection, logging and app settings configuration.

You can watch the full Video on Youtube:

And you get the full source code on GitHub:
https://huaweidevices.ru/mohamadlawand087/v22-DotnetConsole

So what’s in our agenda today:

  • development ingredients
  • the functionalities we are going to build
  • Coding

Development Ingredients

  • Visual Studio Code
  • Dotnet Core SDK

Functionalities:

  • Dependency Injection
  • Serilog Logger
  • AppSettings.

We are going to build a sample application which will mimic connecting to a database through dependency injection as well as outputting logs.

We will start by creating our application, inside our terminal

Once the application has been create, open the application in Visual Studio Code and let us build and the application to make sure everything is working.

The next step is installing the packages that we need.

The next step will be adding our appsettings.json, to do that in root directory of our application right-click select New File. Name the file appsettings.json

Inside the appsettings we are going to add all of the configuration that we need to setup serilog as well as the connectionString to mimic a database connection

We will start by implementing the logging mechanism. Inside our Program.cs Add the following code, this code responsibility is reading the appsetting.json and making it available to our application.

Now we need to create another method which will be out startup method for our application, it will responsible to put everything together. We will define Serilog as well our dependency injection mechanism in .Net Core.

Now let us implement data service which will mimic a database

Let us create a new class called DataService and an interface called IDataService

Now we need to update our AppStartup method in the Program.cs class to inject the DataService

And finally let us put everything together in our main method

Please let me know if you want me to jump into more details about any part of this application or if there is a specific feature which you would like me to cover.

Thanks for reading

Вывод стека

Модуль регистрации также позволяет вам захватывать стек выполнения в приложении. Информация об исключении может быть получена, если параметр exc_info передан как True, а функции ведения журнала вызываются таким образом:

import logging

a = 5
b = 0

try:
  c = a / b
except Exception as e:
  logging.error("Exception occurred", exc_info=True)
ERROR:root:Exception occurred
Traceback (most recent call last):
  File "exceptions.py", line 6, in <module>
    c = a / b
ZeroDivisionError: division by zero
[Finished in 0.2s]

Если для exc_info не задано значение True, выходные данные вышеприведенной программы не сообщат нам ничего об исключении, которое в реальном сценарии может быть не таким простым, как ZeroDivisionError. Представьте, что вы пытаетесь отладить ошибку в сложной кодовой базе с помощью журнала, который показывает только это:

ERROR:root:Exception occurred

Совет: если вы логируете в обработчике исключений (try..except…), используйте метод logging.exception(), который регистрирует сообщение с уровнем ERROR и добавляет в сообщение информацию об исключении. Проще говоря, вызов logging.exception() похож на вызов logging.error (exc_info = True).

import logging

a = 5
b = 0
try:
  c = a / b
except Exception as e:
  logging.exception("Exception occurred")
ERROR:root:Exception occurred
Traceback (most recent call last):
  File "exceptions.py", line 6, in <module>
    c = a / b
ZeroDivisionError: division by zero
[Finished in 0.2s]

Использование logging.exception() покажет лог на уровне ERROR. Если вы не хотите этого, вы можете вызвать любой из других методов ведения журнала от debug() до critical() и передать параметр exc_info как True.

Вместо выводов

Вот и все. Доступ к закрытому API в Android не так уж и сложно получить. С другой стороны, с легитимным софтом использовать его в большинстве случаев не имеет смысла, проще получить права root и вызывать соответствующие консольные команды: settings для изменения настроек, pm для установки/удаления приложений, setprop для изменения низкоуровневых настроек и так далее. Однако если речь идет о не совсем обычном программном обеспечении…

Заключение

Модуль logging считается очень гибким. Его дизайн очень практичен и должен подходить для любого случая использования. Вы можете добавить базовое ведение логов в небольшой проект или даже создать собственные настраиваемые уровни журналов, классы обработчиков и многое другое, если вы работаете над большим проектом.

Если вы не использовали логирование в своих приложениях до сих пор, сейчас самое время начать. Если все сделаете правильно, ведение логов, несомненно, устранит много проблем как в процессе разработки так и в процессе эксплуатации и поможет вам найти возможности поднять ваше приложение на новый уровень.

Оригинальная статья: Abhinav Ajitsaria  Logging in Python

Оцените статью
Huawei Devices
Добавить комментарий