Файлы и папки, которые нельзя удалять с Android-смартфона
Android-смартфон всегда можно оптимизировать вручную: для этого достаточно лишь залезть в глубины файловой системы и удалить сотни ненужных файлов. Главное — делать это осторожно и не увлекаться, иначе смартфон начнет тормозить или попросту превратится в кирпич. Поэтому в последних версиях Android разработчики стали скрывать системные папки и файлы от греха подальше, поэтому увидеть их можно только с помощью root-прав. Так что, если они у вас есть, не переборщите — вот список файлов, которые лучше не удалять из телефона.
Рассказываем, какие файлы нельзя удалять с телефона
Системные папки Андроид
Во всех операционных системах, включая Android, есть список основных папок, в которых хранятся важные компоненты для работы смартфона. Их трогать не рекомендуется, даже если в них попадаются файлы с известными расширениями. Рассказываем, для чего они нужны.

Перечислили список системных файлов и папок, которые важны для работы смартфона
- Boot — папка, в которой хранятся драйвера, данные оперативной памяти и важные файлы для запуска смартфона. При близком рассмотрении выясняется, что папка весит совсем немного, однако часть файлов в ней скрыта. Тем не менее, трогать ее нельзя, иначе смартфон просто не включится.
- Cache — папка с компонентами различных приложений, в том числе, системных. Удалять ее просто ради очистки памяти не стоит. Однако иногда система начинает сбоить из-за файлов внутри, поэтому удалять их нужно лишь в этом случае.
- Data — раздел, доступный без root-прав. В нем хранятся данные приложений и другая информация, необходимая для их работы. Трогать ее также не рекомендуется, иначе придется настраивать программы заново. Внутри в подпапке app также есть установочные файлы приложений, а в другом разделе dalvik-cache хранится кэш для запуска APK-файлов — удалять ее не стоит.
- Recovery — в этой папке хранятся файлы для восстановления системы, а также несколько приложений для работы смартфона. При ее удалении смартфон нельзя будет сбросить до заводских настроек.
Еще есть папки System и Misc: в первой хранится все, что касается системы и предустановленные программы, а во второй — информация о настройках смартфона и другие временные файлы. В обеих папках удалять файлы не рекомендуется в принципе, однако продвинутые пользователи этим пренебрегают.
Системные файлы Андроид
Впрочем, если вы все же нашли файлы в системных папках, среди них могут оказаться те, без которых смартфон не сможет включиться или нормально функционировать. Как правило, они защищены от удаления, но проверять этого не стоит — это может привести к работе с ошибками и дальнейшей перепрошивке. Оно вам надо?

Вот список важных файлов, которые нельзя трогать
- etc — расширение файлов конфигурации, которые используются при загрузке системы и разных встроенных программ.
- lib — системные библиотеки, которые нужны для работы программ.
- proc — важные сведения об установленной системе.
- sys — файлы конфигурации системы в текущий момент.
- sbin — исполняемые файлы программ, участвующих в управлении системы.
Эти файлы нельзя ни переименовывать, ни удалять даже если они весят много. В основном они расположены в папках data и system. В старых кнопочных телефонах в начале нулевых тоже были системные файлы и папки, которые удалялись даже без дополнительных разрешений, но иногда восстанавливались автоматически. Некоторые восстановлению не подлежали, поэтому телефон начинал работать с ошибками.
Какие приложения нельзя отключать на Андроид
Чтобы немного ускорить работу смартфона, многие отключают стандартные системные службы, которыми не пользуются. Это можно сделать даже на Андроид ТВ — у нас есть отдельная статья о том, как удалять или отключать встроенные приложения. Однако среди них есть те, которые трогать не стоит.

Не отключайте эти системные процессы!
- Интерфейс и Оболочка — компоненты для работы оформления смартфона. Можно отключить, но он автоматически перезапустится заново.
- Система Android — процесс, который отвечает за работу операционной системы. Остановить его нельзя.
- Сервисы Google — процесс, отвечающий за синхронизацию приложений Google. Можно отключить, но учтите, что пользоваться картами навигации не получится.
- Установщик сертификатов — процесс, который проверяет подлинность приложений и компонентов. Отключать его нельзя, иначе приложения установить не получится.
- Bluetooth — отключает работу модуля связи. Если процесс отключен, то подключить смартфон к аксессуару или передать файл не получится.
Стоит понимать, что в системе есть масса процессов, которые, на первый взгляд, не нужны и только мешают работе смартфона. Но проблема в том, что все они так или иначе взаимодействуют друг с другом, поэтому используемое вами приложение может обращаться к отключенному сервису, а вместо ускорения смартфона вы получите массу ошибок.

Теги
- Безопасность Android
- Операционная система Android
- Приложения для Андроид
Мобильное приложение ESMART® Конфигуратор
ESMART® Конфигуратор позволяет настраивать считыватели ESMART® Reader без демонтажа.
Пользователи могут изменить режимы чтения физических и мобильных идентификаторов, настройки Wiegand, а так же звуковой и световой индикации.

Теперь вы можете создавать и хранить конфигураций внутри приложения для всех моделей считывателей, которые находятся в продаже. Для этого в приложении реализована удобная структура меню, разделенная на Серии, Линейки и размеры корпуса устройств (обычный или mullion).
Настройка Карт
Производите настройку каждого из поддерживаемых считывателем идентификаторов, выбирая именно тот режим работы, который требуется на объекте. Можно выбрать чтение UID, работу с памятью карты в режиме DATA или запретить чтение карт такого типа.

Для каждого типа карты, с учетом длины считанных данных, реализована возможность настройки формата и порядка передачи. Пользователь может выбрать один из предустановленных форматов или настроить свой:
– Magic, формат совместимый с большинством СКУД контроллеров
– Прямой порядок байт, данные будут переданы ровно так, как считаны с карты
– Обратный порядок байт, данные будут перевернуты
– Свой, в этом режиме вы сможете самостоятельно настроить порядок передаваемых байт с помощью удобного интерфейса по-байтово, а так же добавить префиксы или постфиксы в виде фиксированных значений, если это требуется.

Настройка чтения шифрованных данных для карт MIFARE®
Долгожданная функция для пользователей и объектов с повышенным уровнем безопасности. Нередко наши заказчики не хотели передавать ключи шифрования от собственных объектов в службу технической поддержки ESMART®, руководствуясь требованиями к безопасности. Для таких запросов мы реализовали возможность задавать ключи шифрования внутри приложения и производить настройку работы с памятью карт MIFARE® ID, Classic, Plus (SL1) и карт MIFARE® Plus (SL3) самостоятельно.
Пользователи имеют возможность создания ключа шифрования (Crypto1 или AES128), выбора сектора и блока данных, смещения данных внутри блока, их длины, а так же порядка передаваемых байт. Для удобства мы реализовали регулятор, который позволяет выбрать объем памяти чипа и не ошибиться в выборе сектора и блока.

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

Приложение не обменивается и не пересылает данные через интернет и может работать, даже тогда, когда телефон находится в Авиарежиме. Данные хранятся внутри и передаются в зашифрованном виде, поэтому вы можете не беспокоиться за их сохранность.
Дополнительной гарантией служит бейдж о Конфиденциальности, выданный специалистами App Store. Бейдж находится на странице приложения в разделе Конфиденциальность приложения и поясняет, что приложение не ведет сбор пользовательских данных.

Интерфейсы
Приложение позволяет настроить параметры интерфейса передачи данных. Для считывателей с Wiegand интерфейсом можно выбрать одну из распространенных предустановленных настроек Wiegand 26 или Wiegand 34, а так же самостоятельно настроить выходной интерфейс, задав Длину данных (от 2 до 255 байт), включить или выключить биты четности, а так же настроить временные параметры интерфейса, такие как: Ширину импульса и Интервал между импульсами. Для удобства пользователя интерфейс отображает формат Wiegand, который получается после настроек, а так же информирует о рекомендуемых стандартом параметрах.
Настройка Bluetooth и Индикации
Приложение постоянно будет получать обновления и в следующем релизе мы планируем внедрить возможность настройки параметров Bluetooth для настройки дальности, а так же настройки световой и звуковой индикации считывателя. Следите за обновлениями.
На момент, пока следующая версия приложения не запущена вы можете, как и раньше, запрашивать требуемые настройки Bluetooth и Индикации у специалистов Технической Поддержки ESMART® письмом на help@esmart.ru
Раздел объекты
Для удобства сортировки и хранения конфигураций внутри приложения мы разработали новый раздел – Объекты. В этом разделе пользователь имеет возможность создания объектов с уникальным именем и фотографией. После создания объекта появляется возможность привязки конфигураций к нему, для этого нажмите на саму конфигурацию, а затем свяжите ее с созданным объектом. Привязанные к объекту конфигурации можно увидеть в разделе По объектам для соответствующей модели считывателей.

Функцию удобно использовать, когда конфигурирование происходит на разных объектах или в пределах одного распределенного объекта, в таком случае удобно разделять конфигурации считывателей на группы. Мы будем рады обратной связи от монтажных организаций, о том, как можно сделать эту функцию еще более удобной.
Важным замечанием по функции самостоятельного конфигурирования является ограничение на поддерживаемые устройства. Функция самостоятельного конфигурирования поддерживается всеми считывателями, начиная с прошивки 2.24.х.х. Такие считыватели мы начали выпускать одновременно с запуском устройств в корпусе mullion в Мае 2021. Считыватели, которые имеют прошивку ниже версии 2.24.х.х, как и раньше, поддерживают конфигурации, созданные специалистами Технической Поддержки ESMART® по запросу на help@esmart.ru

Введенное ограничение сделано с учетом нашей аналитики – устройства, уже установленные на запущенных объектах конфигурируют очень редко, а изменения которые все-таки могут вноситься обычно не касаются глобальных настроек Интерфейсов или Карт. При этом те объекты, которые планируются к запуску почти всегда требуют настройки, для таких объектов приобретаются новые устройства с прошивкой 2.24.х.х, которая поддерживает самостоятельное конфигурирование.
Мы открыты к обратной связи и будем ждать ваших запросов на самостоятельное конфигурирование устройств с прошивкой ниже 2.24.х.х. В случае если запросов будет много – мы будем готовы рассмотреть возможность открытия функции и для ранее выпущенных устройств.
iOS и Android
Первым обновленную версию ESMART® Конфигуратор 2.0 получает платформа iOS, следом за ней, в ближайшее время, мы выпустим версию и для Android. Следите за обновлениями приложения в Google Play.
Новые Мастер Карты
Мы реализовали еще одну удобную функцию для всех устройств с прошивкой 2.24.Х.Х и выше. В комплекте с ними идут обновленные Мастер Карты, которые поддерживают функцию записи конфигурации и выступают в качестве защищенного носителя конфигураций.

Использовать обновленную Мастер Карту удобно на объектах, для которых заказана общая Мастер Карта на весь объект. В этом случае для конфигурирования всех устройств на объекте проходит очень быстро, нужно провести минимум операций:
– Создать Конфигурацию внутри приложения или получить ее от Технической Поддержки ESMART®.
– Записать Конфигурацию на Мастер Карту с помощью телефона по NFC (поддерживаются iPhone 7, 8, X, Xs, Xr, 11, 11 Pro, 12, 12 Pro и выше)
– Поочередно подносить Мастер Карту к каждому считывателю два раза (после первого раза считыватель войдет в режим Конфигурирования, на второе поднесение, применит Конфигурацию пользователя, сохраненную на Мастер карту).
Как начать пользоваться
1. Скачать приложение
Скачайте мобильное приложение ESMART ® Конфигуратор на мобильный телефон. Для скачивания пройдите по ссылке www.esmart.ru/configurator с вашего мобильного устройства. Будет произведено автоматическое перенаправление на соответствующий платформе iOS или Android магазин приложений.
2. Создать конфигурацию
Создайте конфигурацию с требуемыми параметрами под вашу модель считывателя, выбрав ее в меню или получите конфигурацию с требуемыми параметрами, отправив запрос на help@esmart.ru в свободой форме. После подготовки конфигурации, откройте письмо, полученное от специалистов Технической поддержки ESMART®. Нажмите на вложенный файл конфигурации и выберите приложение ESMART® Конфигуратор из предложенного списка программ.
3. Применить конфигурацию
На экране конфигурации нажмите кнопку «Записать» и выберите способ записи конфигурации:
В Мастер Карту по NFC* (для всех моделей считывателей):
1. Поднесите Мастер Карту к телефону и дождитесь сообщения об успешной записи конфигурации
2. Поднесите Мастер Карту к считывателю на 2 секунды, дождавшись входа в режим конфигурирования, считыватель начнем мигать синим цветом
3. Поднесите Мастер Карту к считывателю повторно, устройство будет сконфигурировано
* – Доступно только для iOS
В считыватель по Bluetooth (кроме Линейки LITE):
1. Приложение предложит поднести телефон к считывателю (поднесите), на экране появится информации о Мастер Карте
2. Поднесите Мастер Карту к считывателю на 2 секунды, дождавшись входа в режим конфигурирования, считыватель начнем мигать синим цветом
3. В приложении нажмите кнопку «Сконфигурировать» (в правом верхнем углу)
4. Конфигурация будет загружена в считыватель, устройство будет сконфигурировано.
![]() |
|
| Буклет ESMART® Конфигуратор Конфигурирование без домонтажа |
Техническая поддержка ESMART® Reader.
Обращайтесь по любым вопросам.
Позвонить: +7 (495) 133-00-13 добавочный 250
Cохранение состояний в android приложениях
Сегодня я хотел поделиться с вами еще одним подходом сохранения состояния при разработке android приложений. Не для кого не секрет, что наше приложение в фоне может быть убито в любой момент и эта проблема становится все актуальнее с вводом агрессивного энергосбережения – привет Oreo. Также никто не отменял смену конфигурации на телефоне: ориентация, смена языка и т.д. И чтобы открыть приложение из бэкграунда и отобразить интерфейс в последнем состоянии нам нужно позаботиться о его сохранении. Ох уж этот onSaveInstanceState.

Сколько боли он нам принес.
Далее я буду приводить примеры, ипользуя Clean Achitecture и Dagger2, так что будьте готовы к этому:)
Вопрос сохранения состояния в зависимости от задач можно решить несколькими способами:
- Сохранять первичные данные в onSaveInstanceState хоста (Activity, Fragment) — такие как айдишник страницы, пользователя, да что угодно. То, что нам требуется для первичного получения данных и отображения страницы.
- Сохранять полученные данные в интеракторе в репозитории (SharedPreference, Database.
- Использовать ретеин фрагменты для сохранения и восстановления данных при пересоздании активити.
Пользователь возвращается к приложению и что он должен увидеть? Как минимум, продолжение операции логина и показ прогресса. Если приложение успело пройти логин до вызова метода onDestroy хоста, то тогда пользователь увидит навигацию на стартовый экран приложения. Данное поведение можно с легкостью решить, используя паттерн состояния (State machine). Очень хороший доклад от яндекс. В этой же статье постараюсь поделиться пережеванными мыслями по этому докладу.
Теперь немного кода:
public interface BaseState extends Parcelable < /** * Get name * * @return name */ @NonNull String getName(); /** * Enter to state * * @param aView view */ void onEnter(@NonNull VIEW aView); /** * Exit from state */ void onExit(); /** * Return to next state */ void forward(); /** * Return to previous state */ void back(); /** * Invalidate view * * @param aView view */ void invalidateView(@NonNull VIEW aView); /** * Get owner * * @return owner */ @NonNull OWNER getOwner(); /** * Set owner * * @param aOwner owner */ void setOwner(@NonNull OWNER aOwner); >
public interface BaseOwner extends BasePresenter < /** * Set state * * @param aState state */ void setState(@NonNull STATE aState); >
BaseStateImpl
public abstract class BaseStateImpl implements BaseState < private OWNER mOwner; @NonNull @Override public String getName()< return getClass().getName(); >@Override public void onEnter(@NonNull final VIEW aView) < Timber.d( getName()+" onEnter"); //depend from realization >@Override public void onExit() < Timber.d(getName()+" onExit"); //depend from realization >@Override public void forward() < Timber.d(getName()+" forward"); onExit(); //depend from realization >@Override public void back() < Timber.d(getName()+" back"); onExit(); //depend from realization >@Override public void invalidateView(@NonNull final VIEW aView) < Timber.d(getName()+" invalidateView"); //depend from realization >@NonNull @Override public OWNER getOwner() < return mOwner; >@Override public void setOwner(@NonNull final OWNER aOwner)
В нашем случае state owner будет презентер.
Рассматривая страницу логина можно выделить три уникальных состояния:
LoginInitState, LoginProgressingState, LoginCompleteState.
Итак, рассмотрим теперь, что происходит в этих состояниях.
LoginInitState у нас происходит валидация полей и в случае успешной валидации кнопка login становится активной.
В LoginProgressingState делается запрос логина, сохраняется токен, делаются дополнительные запросы для старта главной активити приложения.
В LoginCompleteState осуществляется навигация на главный экран приложения.
Условно переход между состояниями можно отобразить на следующей диаграмме:
Выход из состояния LoginProgressingState происходит в случае успешной операции логина в состояние LoginCompleteState, а в случае сбоя в LoginInitState. Таким образом, когда у нас вьюха детачится, мы имеем вполне детерменированное состояние презентера. Это состояние мы должны сохранить, используя стандартный механизм андроида onSaveInstanceState. Для того, чтобы мы могли это сделать, все состояния логина должны имплементировать интерфейс Parcelable. Поэтому расширяем наш базовый интерфейс BaseState.
Далее у нас встает вопрос, как пробросить это состояние из презентера в наш хост? Самый простой способ — из хоста попросить данные у презентера, но с точки зрения архитектуры это выглядит не очень. И поэтому нам на помощь приходят retain фрагменты. Мы можем создать интерфейс для кэша и имплементировать его в таком фрагменте:
public interface Cache < /** * Save cache data * * @param aData data */ void saveCacheData(@Nullable Parcelable aData); @Nullable Parcelable getCacheData(); /** * Check that cache exist * * @return true if cache exist */ boolean isCacheExist(); >
Далее мы инжектим кэш фрагмент в конструктор интерактора, как Cache. Добавляем методы в интеректоре для получения и сохранения состояния в кэше. Теперь, при каждом изменении состояния презентера, мы можем сохранить состояние в интеракторе, а интерактор сохраняет в свою очередь в кэше. Все становится весьма логично. При первичной загрузке хоста, презентер получает состояние у интерактора, который в свою очередь получает данные из кэша. Так выглядит метод изменения состояния в презентере:
@Override public void setState(@NonNull final LoginBaseState aState)
Хочется отметить такой момент — сохранение данных через кэш можно производить для любых данных, не только для состояния. Возможно, вам придется сделать свой уникальный кэш фрагмент для хранения текущих данных. В данной статье рассказан общий подход. Также хочется отметить, что рассматриваемая ситуация очень утрированная. В жизни приходится решать задачи намного сложнее. К примеру, у нас в приложении были совмещены три страницы: логин, регистрация, восстановления пароля. При этом диаграмма состояний выглядела следующим образом:

В итоге, используя паттерн состояний и подход, описанный в статье, нам удалось сделать код более читаемым и поддерживаемым. И что не мало важно — восстанавливать текущее состояние приложения.
Полный код можно посмотреть в репозитории.
- android
- onsavedinstancestate
- cache
- clean architecture
- dagger 2
- state machine
- Разработка мобильных приложений
- Разработка под Android
Конфигурация сборки
Изучаю возможности сборки Android-приложения через Gradle, после CMake возникают элементарные вопросы по конфигурации. Собственно, есть ли вообще этап конфигурации в Gradle, наподобие ./configure или cmake ?
Вот тривиальный пример: Android-плагин хочет знать где лежит SDK, но делает это странным способом. Нужно либо указать путь к SDK в переменной окружения ANDROID_HOME, либо создать файл local.properties со строкой sdk.dir=. Первый вариант не годится по очевидной причине, что для каждого приложения необходимо создавать враппер для вызова сборки, в котором будет указана переменная ANDROID_HOME для текущего пользователя. Второй вариант тоже не подходит, потому как local.properties должен лежать в директории с исходным кодом вместо директории сборки, если нужно собирать приложение с разными SDK, то неясно как между ними переключаться. Естественно ни враппер, ни local.properties в систему контроля версий не сохраняются, потому как содержат локальные пути.
В Gradle можно передать параметры сборки в командной строке, но по каким-то причинам Android-плагин игнорирует этот способ.
В CMake путь к SDK указался бы при конфигурации в командной строке (или нашёлся бы автоматически) и сохранился один раз в кеш, после чего сборка проекта проходит простым вызовом ninja без аргументов и ненужных врапперов.
Какой идеологически верный способ конфигурировать проект в Gradle? Есть ли вообще способ экспортировать переменные наружу, чтобы пользователь при сборке мог их переопределить?

