- Хранение данных и файлов
- Внешняя карта памяти
- Состояние на текущий момент
- Что делать?
- Android 11
- Что такое ClockworkMod Recovery и как с помощью него сделать полную резервную копию, восстановить устройство, устанавливать пошивки, ядра и прочие обновления системы. Полная инструкция.
- Введение в альтернативное recovery ClockworkMod
- Установка ClockworkMod Recovery
- Запуск ClockworkMod Recovery
- Назначение пунктов меню ClockworkMod Recovery
- Создание резервных копий и восстановление устройства с помощью ClockworkMod
- Установка прошивок, обновлений, ядер и прочего на Android устройство с помощью ClockworkMod
Хранение данных и файлов
В целом хранение файлов и данных можно условно разделить на две группы: во внутреннем или внешнем хранилище. Но разница между ними довольна тонка. В целом политика Гугла в отношение данных ужесточается с каждой версии системы.
Android поддерживает различные варианты хранения данных и файлов.
- Специфичные для приложения файлы. Доступ к файлам имеет только приложение, их создавшее. Файлы могут находиться во внутреннем и внешнем хранилище. У других приложений нет доступа (кроме случаев, когда файлы хранятся на внешнем хранилище). Методы getFilesDir(), getCacheDir(), getExternalFilesDir(), getExternalCacheDir(). Разрешений на доступ не требуется. Файлы удаляются, когда приложение удаляется пользователем.
- Разделяемое хранилище. Приложение может создавать файлы, которыми готово поделиться с другими приложениями — медиафайлы (картинки, видео, аудио), документы. Для медифайлов требуется разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE.
- Настройки. Хранение простых данных по принципу ключ-значение. Доступно внутри приложения. Реализовано через Jetpack Preferences. Настройки удаляются, когда приложение удаляется пользователем.
- Базы данных. Хранение данных в SQLite. На данный момент реализовано через библиотеку Room. Доступ только у родного приложения.
В зависимости от ваших потребностей, нужно выбрать нужный вариант хранения данных.
Следует быть осторожным при работе с внутренним и внешним хранилищем. Внутренне хранилище всегда есть в системе, но оно может быть не слишком большим по объёму. Вдобавок к внутреннему хранилищу, устройство может иметь внешнее хранилище. В старых моделях таким хранилищем выступала съёмная SD-карта. Сейчас чаще используют встроенную и недоступную для извлечения флеш-память. Если ваше приложение слишком большое, можно попросить систему устанавливать программу во внешнее хранилище, указав просьбу в манифесте.
В разных версиях Android требования к разрешению для работы с внешним хранилищем постоянно менялись. На данный момент (Android 10, API 29) требования выглядят следующим образом.
Приложение может иметь доступ к собственным файлам, которые находятся во внешнем хранилище. Также может получить доступ к определённым общим файлам на внешнем хранилище.
Доступ к общим файлам достигается через FileProvider API или контент-провайдеры.
Для просмотра файлов через студию используйте инструмент Device File Explorer.
Внешняя карта памяти
Когда появились первые устройства на Android, то практически у всех были внешние карточки памяти, которые вставлялись в телефон. Обычно там хранили фотки, видео и свои файлы. Всё было понятно — были различные методы для доступа к файловой системе. А потом началась чехарда. В телефонах также была и собственная «внешняя» память. Она вроде как и внешняя, но вставлена на заводе и вытащить её пользователь не мог, т.е. практически внутренняя. Затем пошла мода на телефоны, у которых была только такая внутреннее-внешняя карта. Пользователи поворчали, но привыкли. Сейчас встречаются оба варианта. Как правило, у телефонов с спрятанной картой больше памяти и выше степень водонепроницаемости.
Подобные фокусы с картой породили и другую проблему — Гугл озаботился безопасностью файлов и стала думать, как осложнить жизнь разработчику. С выходом каждой новой версии системы компания то давала добро на полный доступ к карточке, то ограничивала, то давала права с ограничениями, то откатывала свои решения назад. Короче, запутались сами и запутали всех.
Попробуем немного разобраться с этим зоопарком. Но помните, что процесс путаницы продолжается.
При подготовке материала я опирался на письма некоторых читателей сайта, которые присылали свои мысли по этому поводу. Спасибо им за структуризацию материала.
Вот что я (кажется) понял, попытавшись загрузить картинку с внешней SD карточки.
External это не External
«EXTERNAL_STORAGE» называется так не потому, что это внешняя память по отношению к устройству, а потому что она выглядит как внешняя память для компьютера, если устройство подключить кабелем к компьютеру. Причём именно выглядит, потому что обмен идёт по протоколу MTP – устройство только показывает компьютеру список папок и файлов, а при необходимости открыть или скопировать файл он специально загружается на компьютер, в отличие от настоящей флешки, файлы которой становятся файлами в файловой системе самого компьютера. Обмен по MTP позволяет устройству продолжать работать, когда оно подключено к компьютеру.
Emulated это не Emulated
Сначала я пытался прочесть файл с карточки на эмуляторе (из этого так ничего и не вышло). Функция getExternalStorageDirectory() давала мне /storage/emulated/0, и я думал, что «emulated» – это потому что на эмуляторе. Но когда я подцепил реальный планшет, слово «emulated» никуда не исчезло. Я стал рыться в интернете и обнаружил, что «Emulated storage is provided by exposing a portion of internal storage through an emulation layer and has been available since Android 3.0.» – то есть это просто кусок внутренней памяти, которая путём какой-то эмуляции делается доступной для пользователя, в отличие от собственно внутренней памяти.
При этом с точки зрения системы доступная для пользователя папка называется /storage/emulated/0, а при подключении к компьютеру по USB это просто одна из двух главных папок устройства – у меня в Windows Explorer она называется Tablet. Вторая папка у меня называется Card, и это и есть настоящая внешняя карточка.
Нет стандартных средств добраться из приложения до файлов на внешней карточке. Все попытки добраться до настоящей внешней карточки делаются с помощью неких трюков. Самое интересное, что я нашел, это статья на http://futurewithdreams.blogspot.com/2014/01/get-external-sdcard-location-in-android.html — парень читает таблицу смонтированных устройств /proc/mounts, таблицу volume daemons /system/etc/vold.fstab, сравнивает их и выбирает те тома, которые оказываются съёмными (с помощью Environment.isExternalStorageRemovable()).
Оказалось, что несистемным приложениям в принципе запрещено напрямую обращаться к съёмной карточке! Похоже, что это было так всегда, но вот начиная с версии Android 6 Marshmallow написано: внешняя карточка может быть определена как Portable либо Adoptable. Adoptable – это как бы «усыновляемая» память которая может быть «adopted», то есть взята в систему (примерно как кот с улицы в дом – это тоже называется to adopt) и использована как внутренняя. Для этого ее надо особым образом отформатировать и не вынимать, иначе не факт, что система продолжит нормально работать.
Portable – это нормальная съёмная карточка, но несистемным приложениям запрещено обращаться из программ к файлам на ней! Вот что написано в https://source.android.com/devices/storage/traditional.html:
Android 6.0 supports portable storage devices which are only connected to the device for a short period of time, like USB flash drives. When a user inserts a new portable device, the platform shows a notification to let them copy or manage the contents of that device. In Android 6.0, any device that is not adopted is considered portable. Because portable storage is connected for only a short time, the platform avoids heavy operations such as media scanning. Third-party apps must go through the Storage Access Framework to interact with files on portable storage; direct access is explicitly blocked for privacy and security reasons.
Если я правильно понял, этот самый Storage Access Framework позволяет работать с документом на карточке через диалог (открыть файл/сохранить файл), а вот прочитать или записать файл на карточке непосредственно из программы невозможно.
Общий вывод – реально из программы можно работать только с файлами на предоставляемой пользователю части встроенной памяти устройства, а на съёмной карточке – нет.
Это напоминает войну Microsoft с пользователями и разработчиками по поводу диска C:, компания уговаривала не устраивать беспорядок в корне этого диска, а ещё лучше — перенести свои файлы на другой диск. Но явных запретов не было.
Состояние на текущий момент
Гугл утверждает, что с версии Android 10 Q стандартный доступ к файлам будет прекращён. Ещё в Android 4.4 появился Storage Access Framework, который и должен стать заменой для работы с файлами.
Методы Environment.getExternalStorageDirectory() и Environment.getExternalStoragePublicDirectory() признаны устаревшими и будут недоступны. Даже если они будут возвращать корректные значения, ими вы не сможете воспользоваться.
В Android 7.0 добавили исключение FileUriExposedException, чтобы разработчики перестали использовать схему file://Uri.
Можно создавать файлы в корневой папке карточки при помощи Environment.getExternalStorageDirectory(), а также папки с вложенными файлами. Если папка уже существует, то у вас не будет доступа на запись (если это не ваша папка).
Если вы что-то записали, то сможете и прочитать. Чужое читать нельзя.
Кстати, разрешения на чтение и запись файлов не требуются, а READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE объявлены устаревшими.
Другие приложения не могут получить доступ к файлам вашего приложения. Файлы, которые вы создали через getExternalFilesDir(), доступны через Storage Access Framework, кроме файлов, созданных в корне карточки (что-то я совсем запутался). Ещё можно дать доступ через FileProvider.
При подключении USB-кабеля через getExternalFilesDir(), вы можете увидеть свои файлы и папки, а также файлы и папки пользователя. При этом файлы и папки пользователя на корневой папке вы не увидите. Вам не поможет даже adb или Device File Explorer студии.
Что делать?
Пользуйтесь методами класса Context, типа getExternalFilesDir(), getExternalCacheDir(), getExternalMediaDirs(), getObbDir() и им подобными, чтобы найти место для записи.
Используйте Storage Access Framework.
Используйте MediaStore для мультимедийных файлов.
Используйте FileProvider, чтобы файлы были видимы другим приложениям через ACTION_VIEW/ACTION_SEND.
Android 10: Появился новый флаг android:allowExternalStorageSandbox=»false» и метод Environment.isExternalStorageSandboxed() для работы с песочницей. Флаг android:requestLegacyExternalStorage=»true» для приложений, которые ещё используют старую модель доступа к файлам.
Как временное решение можно добавить в блок манифеста application атрибут android:requestLegacyExternalStorage=»true», чтобы доступ к файлам был как раньше в Android 4.4-9.0.
Android 11
Если вы создаёте файловый менеджер, то ему нужны возможности для просмотра файлов. Для этого следует установить разрешение MANAGE_EXTERNAL_STORAGE или использовать атрибут android:requestLegacyExternalStorage=»true» (см. выше).
Источник
Что такое ClockworkMod Recovery и как с помощью него сделать полную резервную копию, восстановить устройство, устанавливать пошивки, ядра и прочие обновления системы. Полная инструкция.
Каждый начинающий пользователь Android планшета или телефона, путешествуя по тематическим сайтам и форумам, рано или поздно сталкивается с упоминанием загадочного ClockworkMod Recovery, которое особенно часто упоминается в инструкциях по прошивке, замене ядра системы и других «хакерских» вещей.
Так что же такое ClockworkMod Recovery, для чего оно предназначено, и как с ним правильно обращаться? На эти вопросы я постараюсь вам дать ответ в этой статье, которая содержит полную инструкцию по работе с ClockworkMod Recovery.
В двух словах, ClockworkMod Recovery или ClockworkMod или просто CWM – это альтернативное рекавери (recovery) для Android устройств. Инструкция по работе с ClockworkMod Recovery содержит следующие разделы:
Что такое recovery?
Каждый Android планшет или телефон имеет заводское recovery, которое можно загрузить при включении устройства, нажав определенную комбинацию клавиш. Заводское recovery, обычно умеет устанавливать обновления системы из файла update.zip и делать очистку системы.
Введение в альтернативное recovery ClockworkMod
ClockworkMod Recovery – это гораздо более мощная, по сравнению с заводской, утилита (меню) восстановления системы, которая позволяет делать полные резервные копии всей системы устройства, устанавливать на него программное обеспечение, прошивки, ядра и многое другое, что обычно не позволяет делать заводское рекавери. ClockworkMod, устанавливается в специальный системный раздел внутренней памяти планшета или телефона, на место заводского меню восстановления.
ClockworkMod Recovery может выручить вас в некоторых, казалось бы, безвыходных ситуациях. Даже если ваш планшет или телефон не может загрузиться, во многих случаях с помощью CWM вы можете восстановить систему со всеми ее настройками и приложениями.
Вот примерный перечень того, что вы можете делать с помощью ClockworkMod Recovery:
• Устанавливать кастомные прошивки и неофициальные ядра
• Устанавливать заводские обновления системы, дополнения и исправления
• Подключаться к компьютеру через USB в режиме съёмного накопителя
• Подключаться к компьютеру через USB для работы с программой ADB
• Создавать полную резервную копию текущей прошивки и отдельных её частей (система, настройки, приложения)
• Восстанавливать устройство из ранее созданной резервной копии
• Делать сброс на заводские настройки (Wipe – data/factory reset), очищать кеш (wipe cache), очищать далвик-кеш (wipe Dalvik-cache), очищать статистику батареи (wipe battery stats)
• Создавать разделы на карте памяти и форматировать их
ClockworkMod Recovery создано разработчиком Koushik Dutta (известным еще как Koush) и существуют версии CWM для большинства Android телефонов и планшетов.
Установка ClockworkMod Recovery
Для множества смартфонов и некоторых планшетов установка ClockworkMod Recovery – очень простая процедура, достаточно лишь установить из Маркета программу ROM Manager и первым пунктом в ее меню будет пункт установки ClockworkMod. Для остальных устройств могут существовать отдельные утилиты, подобные приложению Acer Recovery Installer для планшета Acer Iconia Tab, или же ClockworkMod Recovery на них устанавливается с помощью программы adb.
Запуск ClockworkMod Recovery
Загрузить планшет или телефон в в ClockworkMod Recovery можно несколькими способами.
1. С помощью программы ROM Manager, выбрав в ее меню пункт «Загрузить режим Recovery».
2. С помощью нажатия определенной комбинации клавиш при включении устройства. Эта комбинация зависит от модели устройства. На многих устройствах в рекавери можно попасть, нажав при их включении одновременно кнопки уменьшения громкости и включения питания.
3. С помощью программы ADB. Если вы настроили подключение к компьютеру с помощью программы ADB, загрузить свой планшет в recovery вы можете с помощью команды:
adb reboot recovery
Назначение пунктов меню ClockworkMod Recovery
Загрузив свой планшет в ClockworkMod Recovery, вы прежде всего увидите его основное меню:
Скриншоты сделаны в одной из самых распространенных версий ClockworkMod recovery 3.0. Более новые версии CWM и версии для разных устройств могут иметь немного другое меню, но основные его функции останутся без изменений.
На большинстве устройств, перемещаться по пунктам меню, обычно можно с помощью кнопок управления громкостью. С помощью кнопки включения выбирается нужный пункт меню. В некоторых устройствах могут быть задействованы и другие кнопки, например для возврата в предыдущее меню.
Во всех подменю, вернуться в предыдущее меню можно выбрав пункт +++++Go Back+++++
Назначение пунктов основного меню:
1. reboot system — перезагрузка устройства
2. apply update.zip from sdcard – это один из самых часто используемых пунктов ClockworkMod Recovery.
С его помощью можно устанавливать, как официальные, так и неофициальные (кастомные) прошивки, устанавливать ядра, темы и прочее программное обеспечение, которое должно находиться в файле update.zip, который вы должны разместить в корне карты памяти (в файловом менеджере Android устройства это папка /sdcard).
После выбора этого пункта вы попадаете в следующее меню, где вы должны подтвердить свой выбор, перейдя к пункту Yes – Install /sdcard/update.zip
3. wipe data/factory reset — полный сброс настроек, данных и кеша. После этого ваш телефон или планшет вернется к тому состоянию, в котором он продавался в магазине. ClockworkMod очистит разделы /data и /cache во внутренней памяти устройства. Также будет удалено все из системной папки «.android_secure» на карте памяти и раздел sd-ext.
4. wipe cache partition — очистка раздела /cache во внутренней памяти. Будут очищены все временные данные, которые накопила система и программы. Этот пункт используется обычно перед установкой новой прошивки или ядра.
5. install zip from sdcard — установка zip файла с карты памяти. После выбора этого пункта вы попадете в следующее подменю:
Его пункты означают следующее:
• apply /sdcard/update.zip — этот пункт полностью аналогичен пункту 2 главного меню «apply update.zip from sdcard»
• chooze zip from sdcard — выбрать .zip файл на карте памяти для установки.
Этот пункт тоже похож на пункт 2 и также используется для установки прошивок, ядер и прочих модов. Единственное его отличие – это то, что установку можно произвести из любого zip файла с любым именем, расположенного в любом месте карты памяти. После того как вы выберете этот пункт, откроется список файлов и папок на вашей карте памяти, из которого нужно выбрать .zip файл для установки.
• toggle signature veritification — вкл/выкл проверку подписи файла.
Если вы включите режим проверки подписи (Signature check: Enabled), вы не сможете устанавливать альтернативные прошивки, которые не были подписаны разработчиком. Большинство кастомных прошивок разработчики не подписывают.
• toggle script assert — вкл/выкл скрипт утверждения.
Этот пункт предназначен для внутреннего применения в CWM, и вам он никогда не понадобится, поэтому лучше его не трогать.
• +++++Go Back+++++ — этот пункт, как уже упоминалось, используется для возврата в предыдущее меню ClockworkMod
6. backup and restore — создание и восстановление резервных копий. Еще один из самых важных пунктов ClockworkMod. С помощью него, вы можете сделать полную копию всей системы планшета, вместе с данными и приложениями имеющимися в его внутренней памяти — так называемый Nandroid backup, или снимок системы, а затем при необходимости вернуть планшет к этому состоянию. Это меню выглядит так:
Его пункты означают следующее:
Backup — создание резервной копии всех разделов во внутренней памяти устройства.
Резервная копия будет сохранена на карте памяти. По умолчанию название резервной копии содержит время и дату её создания. Вы можете переименовать резервную копию. Название должно состоять из латинских букв и цифр и не содержать пробелов
Restore — восстановление всех разделов из выбранной резервной копии.
Выбрав этот пункт, вы увидите список имеющихся на карте памяти резервных копий и можете выбрать из него необходимую для восстановления копию.
Advanced Restore — восстановление определённого раздела из выбранной резервной копии.
Вы можете выбирать отдельный раздел, который вы хотите восстановить из резервной копии — boot, system, data, cache или раздел sd-ext как показано на скриншоте:
7. mounts and storage – монтирование отдельных разделов, их форматирование и монтирование устройства в качестве USB накопителя при подключении к компьютеру (монтирование делает разделы или папки доступными для использования).
Пункты этого меню означают следующее:
• mount /system — монтирование системного раздела
• unmount /data – отмонтирование раздела с данными
• unmount /cache — отмонтирование раздела с кешем
• mount /sdcard — монтирование карты памяти
• mount /sd-ext — монтирование Linux раздела ext на карте памяти (если он есть)
• format boot , format system, format data, format cache — форматирование соответствующих разделов.
Внимание! будьте осторожны с этими пунктами меню . Например, форматирование раздела system, уничтожит вашу операционную систему (текущую прошивку). После форматирования раздела boot, вы не сможете загрузить свое устройство и оно превратится в кирпич.
• format sdcard — форматирование карты памяти
• format sd-ext — форматирование Linux раздела на карте памяти
• mount USB storage – подключение планшета или телефона к компьютеру в режиме съёмного накопителя
8. advanced – дополнительные функции ClockworkMod.
Это меню состоит из следующих пунктов:
• Reboot Recovery – перезагрузка устройства опять в recovery
• Wipe Dalvik Cache — очистка кеша виртуальной Java машины Dalvik, которая используется для запуска приложений. Этот пункт меню обычно используется перед установкой новой прошивки, особенно неофициальной.
• Wipe Battery Stat — сброс статистики работы аккумулятора. Считается, что этот пункт нужно использовать в том случае, когда системный индикатор уровня заряда батареи показывает неправильные значения. Однако компания Google, разработчик системы Android утверждает, что это не должно влиять на правильность показаний индикатора.
• Report Error — сообщить об ошибке. Вы можете сообщить об ошибке ClockworkMod recovery ее разработчику. Лог ошибки будет записан на карту памяти, и вы можете отправить его разработчику с помощью программы ROM Manager.
• Key Test — проверка работоспособности кнопок устройства, при нажатии на кнопку, выдаёт её код
• Restart adb — перезагрузка ADB сервера. Этот пункт помогает, когда устройство перестало реагировать на команды программы ADB, когда оно подключено через USB кабель
• Partition SD Card – создание разделов на карте памяти. Этот пункт используется для создания /sd-ext и /swap разделов на карте памяти. Раздел /sd-ext может использоваться некоторыми прошивками при нехватке внутренней памяти устройства, например для расширения раздела /data. Раздел /swap обычно используется для ускорения работы Android устройства.
• Fix Permissions – Исправить права доступа к файлам и разделам. Этот пункт используется для того, чтобы вернуть к заводскому состоянию права доступа к системным файлам и папкам, которые могут быть изменены некорректной работой некоторых root приложений, что может привести к зависаниям и сбоям в работе планшета или телефона.
Создание резервных копий и восстановление устройства с помощью ClockworkMod
Как вы уже знаете, с помощью ClockworkMod можно создать полную резервную копию прошивки планшета или телефона (Nandroid). CWM делает снимки всех имеющихся во внутренней памяти устройства разделов и папки «.androidsecure», расположенной на карте памяти устройства. Делается снимок не только операционной системы, со всеми ее настройками, но и установленные приложения.
Делаем резервную копию (Nandroid Backup):
— Перезагружаем устройство в CWM recovery
— Открываем пункт «backup & restore«
— Выбираем «backup«
— Подтверждаем выбор, перейдя к пункту «Yes«
— После создания копии выходим из CWM с помощью пункта «reboot system now» (перезагрузка)
У вас на карте памяти появится файл с полной резервной копией, расположенный в папке clockworkmod/backup. Название файла состоит из даты и времени создания копии, но вы можете его переименовать. Не используйте в имени файла русские символы и пробелы.
Восстановление устройства из резервной копии с помощью ClockworkMod :
— Перезагружаем устройство в CWM recovery
— Открываем пункт «Backup & restore«
— Выбираем «restore«
— Выбираем из списка нужную резервную копию.
— Подтверждаем выбор, перейдя к пункту «Yes«.
После окончания восстановления, выходим из CWM с помощью пункта Reboot system now (перезагрузка)
Отдельные приложения из резервной копии ClockworkMod Recovery, СМС и настройки WiFi, не трогая текущую прошивку, можно восстановить с помощью приложения AppExtractor. Также умеет извлекать приложения из резервной копии программа Titanium Backup.
Установка прошивок, обновлений, ядер и прочего на Android устройство с помощью ClockworkMod
Все альтернативные прошивки, кастомные ядра, русификаторы, дополнения, украшения, пакеты приложений, которые можно установить на планшет или телефон с помощью ClockWorkMod recovery- упакованы в виде zip файл.
Прежде чем что либо устанавливать на свое устройство, не забудьте сделать полную резервную копию текущей прошивки, чтобы потом можно было безболезненно вернуть ваш планшет или телефон в исходное состояние.
Убедитесь, что аккумулятор вашего устройства заряжен полностью, и отключите его от компьютера и зарядного устройства.
Файл, который вы хотите прошить, скопируйте на карту памяти, лучше всего в ее корень, НЕ РАСПАКОВЫВАЯ ЕГО . Убедитесь, что имя файла состоит только из латинских букв и цифр и не содержит пробелов и специальных символов.
Если вы устанавливаете новую прошивку, обязательно сделайте полную очистку с помощью пункта «wipe data/factory reset«
Приступаем к прошивке :
— Вставляем карту памяти в устройство
— Перезагружаем устройство в ClockWorkMod recovery
— Выбираем пункт «install zip from sdcard«.
— Открываем пункт «choose zip from sdcard«.
— В открывшемся окне находим наш файл, он будет находиться внизу, после списка папок (если они есть на карте памяти)
— Подтверждаем выбор, перейдя к пункту «Yes«.
— После окончания прошивки возвращаемся в предыдущее меню, с помощью пункта «+++++Go Back+++++»
После прошивки любых zip файлов крайне рекомендуется делать очистку кеша и dalvik кеша.
Источник