Сохранение данных для android
Обычно для этого требуется разблокировать загрузчик устройства, после чего вся информация которая не была сохранена будет утеряна. Подробнее вы можете найти в теме вашего устройства на 4pda.
В той же теме, наверняка будет инструкция, как получить Рут доступ, например через Magisk.
Однако, после этого возможно придется установить фикс, чтобы работал гугл пей и NFC оплата.
Если вы забрались так далеко, можете в теме вашего устройства посмотреть другие прошивки, на случай, если ваше устройства давно не обновлялось, и у него старые патчи безопасности. Обновление системы безопасности Android
C помощью этого кастом Рекавери забекапить нужную инфу. (Надо иметь ввиду, что там не всегда будут доступны для бэкапа абсолютно все разделы, но нужные, с прошивкой и данными должны быть).
Обычно бэкапят Data, System, Boot и Vendor (если есть). Есть и другие разделы, содержащие например IMEI, об этом ниже:
Так же может присутствовать «внутренний накопитель» или internal storage (user data), это все эти файлы и папки которые вы видите в памяти телефона без Рут доступа, но кастом рекавери разделил таким образом Data и Data/media.
Не много подробнее о назначении разделов:
Boot — Загрузка андроида начинается с раздела boot — там хранится в том числе ядро системы.
System — Затем загружается прошивка — system. Часто ее можно скачать отдельно, так что потерять в принципе не жалко.
Vendor раздел отвечает за правильную работу устройства, он тоже часто идет вместе с прошивкой, так что его можно достать из официальной прошивки с сайта производителя или на странице вашего устройства на 4пда
Ну и Data это конкретно ваша инфа, приложения настройки и сохранения игр все тут) Как я уже писал, бывает Рекавери разделяет дату и внутренний накопитель (Data/media), так вот, на внутреннем накопителе хранится то, что вы и сами могли видеть в памяти телефона фотки и тд.
Еще тут описывал, что там хранится.
Надо учитывать, что data раздел обычно зашифрован, в заводском состоянии, поэтому с помощью кастом Рекавери его форматируют и потом уже загружают прошивку.
Часто не лишним будет сохранить и другие важные разделы, на всякий случай:
EFS — Тут хранятся WiFi/BlueTooth MAC’s, IMEI, в общем все то, что вы не хотели бы потерять) (Схема с восстановлением, (MODEMST1, MODEMST2, FSG, BACKUP) где fsg или backup соответственно хранят инфу модемов на случай утери)
Persist — Этот раздел содержит данные калибровки сенсоров wifi, bluetooth, camera, DRM , sns.reg, и тд, тоже
Например у меня после смены прошивок поменялся Persist раздел, и при перезагрузке телефона писалось «Хранилище повреждено, устройство под угрозой (в опасности)»
Восстановление раздела из бэкапа помогло.
Ну и всякое прочее, вроде
CUST (так же CUSTOM или PRELOAD в некоторых случаях) — Предзагруженные приложения и региональные настройки, устанавливаемые при первом запуске. Иногда при смене прошивки на кастом нужно очистить этот раздел.
MISC (FOTA на старых устройствах) — Раздел на котором хранится информация для bootloader, что за чем загружать, или запустить рекавери, если OTA обновление не удалось. Если удалить, система будет грузится как обычно, то есть boot затем system.
Есть такие приложения для бэкапа данных с использованием Рут прав, например ® Titanium Backup
Однако, стоит учесть, что он не бэкапит папки приложения размещенные в общедоступной памяти телефона, т.е. (data/media)
Отдельно хочу отметить молодое (могут присутствовать баги) приложение, которое может создавать резервные копии пригодные для восстановления через кастом Рекавери, TWRP:
®Migrate
Удобно, когда нужно перенести данные на другую прошивку.
Когда Рут есть, можно так же с помощью ADB пробовать. (Или Adb Run)
Для аппаратов на базе SoC Qualcomm HDDRawCopy eMMC RAW Tool
Владельцам устройств с процессорами МТК при наличии пк можно скопировать полный образ всех данных (вообще всех) через flashtool
Готовый raw образ можно разбить на разделы и сконвертировать в пригодный для последующей прошивки вид с помощью этой утилиты
WwR MTK
Но чтобы прошить через ADB надо будет различить бутлоадер, или загрузчик, по нашему)
Надо учитывать что без форматирования через кастом Рекавери data раздел будет зашифрован, а пароля вы конечно не знаете)
Поэтому такой бэкап можно использовать (восстанавливать) в исходном виде, или использовать не зашифрованные разделы.
А так, кастом Рекавери может все стереть, а заодно и шифрование, чтобы в будущем бэкап был читаемым.
Тут тоже указаны некоторые утилиты для работы с файловой системой https://habr.com/ru/post/236397/
И вот для устройств с процессором Qualcomm и emmc памятью.
Восстановление и решение проблем с eMMC
Создан набор скриптов Windows (.cmd-файлы) для резервного копирования/восстановления разделов с помощью утилиты emmcdl (часть проекта Android-хост-knife).
Скачать:eMMC_DL_Tool_for_customer_ENG_V5.2.0R.zip (12.92 МБ)
Работа с программой:https://freeandroidroo…download-emmc-dl-tool/
Проверено на RN3P, но может быть использован с другими компании Qualcomm-устройств.
emmcdl использует «знакомый» модуль для взаимодействия с внутренней памяти устройства в режим 9008/edl. С prog_emmc_firehose_8976_ddr.mbn от «быстрой загрузки» прошивки, считывание/запись Таблица разделов и разделов (в том числе энергонезависимой, как modemst1/2,fsg etc.).
В этом списке раздела, успешно восстанавливаются IMEI телефона, MАС-адреса и статус загрузчика разблокировки после случайного повреждения памяти.
Может быть использован для создания файлов rawprogram0.xml прошивки с помощью MiFlash (рекомендуется) или другая утилита от Qualcomm.
qcpartsbackup11.7z (73.11 КБ)
. Не для новичков! Взято отсюда.
Сообщение отредактировал konstantinqq — 24.04.21, 08:52
Как сохранить резервную копию сразу на компьютер.
Очень полезно в тех случаях, когда под рукой нет подходящего размера флешки.
Можно конечно в кастом Рекавери смонтировать OTG накопитель, типа внешнего жесткого диска, но это такое.
При помощи ADB:
ADB и все, что с помощью него можно сделать
Или утилита в которой не надо вручную вводить команды
® Adb Run
Или так https://habr.com/ru/post/236397/
(Там что то писали про бэкап через кастом Рекавери сразу в пк.
Через кастом Рекавери:
Смонтируйте разделы, и скопируйте с помощью ADB.
Для удобства, на пк я использую файловый менеджер total Commander с плагином adb.
Разделы видятся как папки, соответственно скопировать можно файлы внутри.
Адб работает и без кастомного Рекавери с включенной отладкой по USB, но в этом случае может не хватить прав, чтобы работать с системными файлами.
Сообщение отредактировал konstantinqq — 25.10.20, 10:42
Хотелось бы больше и лучше, поэтому если есть желание — делитесь.
Кому не понятно, напишите понятно и добавьте в шапку)
Да я упомянул не все способы, но вы можете упомянуть их сами, поделившись с другими полезной информацией.
Если кому интересно как я делал полный бэкап телефона на МТК, с одним только флештулом и как создал с нуля scatter файл, в котором вся инфа о разделах. Blackview BV9100 — Обсуждение (Пост konstantinqq #89796538)
PS
Передавать данные на пк в режиме «передача данных» (MTP) может быть небезопасно если кабель не качественный, поэтому лучше пользуйтесь ADB (я например, активирую режим отладки в телефоне, подключаю к пк, и в качестве файлового менеджера использую Total Commander с плагином ADB, режим Native 8.1. При этом, при первом подключении нужно на телефоне нажать разрешить этому компьютеру отладку, если спросит.
Пс
Что делать, если раздел system только для чтения? Ответ
Сообщение отредактировал konstantinqq — 12.05.20, 19:50
Доброго времени суток.
Добавлено 18.06.2020, 14:56:
Доброго времени суток. Народ помогите ,кто знает.После восстановления бекапа через TWRP Recovery не восстановились фото и видео. Приложения и настройки , сообщения,контакты встали. А фото и видео почемуто не вскрываются.Не сколько раз делал. Ничего.
Источник
Android с нуля: как хранить данные приложения локально
Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)
Когда доходит до сохранения данных приложений локально, разработчики Android определённо избалованы выбором. Помимо прямого доступа к внутренним и внешним областям хранения Android-устройства, платформа Android предлагает базы данных SQLite для хранения реляционных данных и специальные файлы для хранения пар ключ-значение. Более того, приложения для Android также могут использовать сторонние базы данных, которые предлагают поддержку NoSQL.
В этом уроке я покажу вам, как использовать все эти параметры хранения в приложениях для Android. Я также помогу вам понять, как выбрать наиболее подходящий вариант хранения данных.
Вам проще учиться по видео? Почему бы не посмотреть наш курс:
1. Хранение пар ключ-значение
Если вы ищете быстрый способ хранения нескольких строк или номеров, вам следует рассмотреть возможность использования файла настроек (preferences). Активити и службы Android могут использовать метод getDefaultSharedPreferences() класса PreferenceManager , чтобы ссылаться на объект SharedPreferences , который может быть использован и для чтения, и для записи в файл настроек по умолчанию.
Чтобы начать запись в файл настроек, вы должны вызвать метод edit() объекта SharedPreferences , который возвращает объект SharedPreferences.Editor .
Объект SharedPreferences.Editor имеет несколько интуитивных методов, которые можно использовать для хранения новых пар ключ-значение в файле настроек. Например, вы можете использовать метод putString() , чтобы поместить пару ключ-значение со значением типа String . Аналогично, вы можете использовать метод putFloat() , чтобы поместить пару ключ-значение, чьё значение типа float . Следующий пример кода создаёт три пары ключ-значение:
После того, как вы добавили все пары, вы должны вызвать метод commit() объекта SharedPreferences.Editor , чтобы сохранить их.
Чтение из объекта SharedPreferences гораздо проще. Всё, что вам нужно сделать, так это вызвать соответствующий метод get*() . Например, чтобы получить пару ключ-значение, чьё значение является String , вы должны вызывать метод getString() . Вот фрагмент кода, который извлекает все значения, которые мы добавили ранее:
Как вы видите из кода выше, второй параметр всех методов get*() ожидает значение по-умолчанию, которое является значением, которое должно быть возвращено, если ключ не существует и файле настроек.
Обратите внимание, что файлы настроек ограничены только строками и примитивными типами данных. Если вы хотите сохранить более сложные типы данных или двоичные данные, вы должны выбрать другой вариант хранения.
2. Использование базы данных SQLite
Каждое приложение для Android может создавать и использовать базы данных SQLite для хранения больших объемов структурированных данных. Как вы уже знаете, SQLite не только лёгкая, но и очень быстрая. Если у вас есть опыт работы с системами управления реляционными базами данных и вы знакомы как с SQL, что является сокращением для Structured Query Language, и JDBC, что является сокращением для Java Database Connectivity, это может быть предпочтительным вариантом хранения.
Чтобы создать новую базу данных SQLite или открыть уже существующую, вы можете использовать метод openOrCreateDatabase() внутри своей активити или службы. В качестве аргументов вы должны передать имя своей базы данных и режим, в котором вы хотите её открыть. Наиболее часто используемый режим MODE_PRIVATE , который гарантирует, что база данных доступна только для вашего приложения. Например, вот как вы можете открыть или создать базу данных с именем my.db:
После создания базы данных вы можете использовать метод execSQL() для запуска SQL-инструкций. В следующем коде показано, как использовать оператор SQL CREATE TABLE для создания таблицы названной user, которая имеет три столбца:
Хотя можно вставить новые строки в таблицу с помощью метода execSQL() , лучше использовать метод insert() . Метод insert() ожидает объект ContentValues , содержащий значения для каждого столбца таблицы. Объект ContentValues очень похож на объект Map и содержит пары ключ-значение.
Вот два объекта ContentValues , которые вы можете использовать с таблицей user :
Как вы могли догадаться, ключи, которые вы передаете методу put() , должны соответствовать именам столбцов в таблице.
Когда объекты ContentValues готовы, вы можете передать их методу insert() вместе с именем таблицы.
Чтобы отправить запрос в базу данных, вы можете использовать метод rawQuery() , который возвращает объект Cursor , содержащий результаты запроса.
Объект Cursor может содержать ноль или несколько строк. Самый простой способ перебрать все его строки, так это вызвать метод moveToNext() внутри цикла while .
Чтобы получить значение отдельного столбца, вы должны использовать такие методы, как getString() и getInt() , которые ожидают индекс столбца. Например, вот как вы получите все значения, вставленные в таблице user :
После того, как вы получите все результаты вашего запроса, убедитесь, что вы вызвали метод close() для объекта Cursor , чтобы освободить все ресурсы, которые он хранит.
Аналогичным образом, когда вы закончили все операции с базой данных, не забудьте вызвать метод close() для объекта SQLiteDatabase .
3. Использование внутреннего хранилища
Каждое приложение Android имеет свой собственный внутренний каталог хранения, взаимодействующий с ним, в котором приложение может хранить текстовые и двоичные файлы. Файлы внутри этого каталога недоступны для пользователя или других приложений, установленных на устройстве пользователя. Они также автоматически удаляются, когда пользователь удаляет приложение.
Прежде чем вы сможете использовать внутренний каталог хранилища, вы должны определить его местоположение. Для этого вы можете вызвать метод getFilesDir() , который доступен как для активити, так и для служб.
Чтобы получить ссылку на файл внутри каталога, вы можете передать имя файла вместе с указанным вами расположением. Например, вот как вы получите ссылку на файл alice.csv:
С этого момента вы можете использовать свои знания о классах и методах I/O (ввода/вывода) Java для чтения или записи в файл. В следующем фрагменте кода показано, как использовать объект FileOutputStream и метод write() для записи в файл:
4 . Использование внешнего хранилища
Поскольку внутреннее хранилище устройств Android обычно фиксировано и часто довольно ограничено, некоторые устройства Android поддерживают внешние носители данных, такие как съемные микро SD-карты. Я рекомендую использовать этот вариант хранения для больших файлов, таких как фотографии и видео.
В отличие от внутреннего хранилища, внешнее хранилище может не всегда быть доступно. Поэтому, перед его использованием, вы должны всегда проверять, смонтировано ли оно. Для этого используйте метод getExternalStorageState() класса Environment .
Как только вы убедитесь, что внешнее хранилище доступно, вы можете получить путь к файлу внешнего хранилища для своего приложения, вызвав метод getExternalFilesDir() и передав null в качестве аргумента. Затем вы можете использовать путь для ссылки на файлы внутри каталога. Например, вот как вы можете ссылаться на файл с именем bob.jpg в каталоге внешнего хранилища приложения:
Попросив пользователя предоставить вам разрешение WRITE_EXTERNAL_STORAGE , вы можете получить доступ для чтения/записи ко всей файловой системе во внешнем хранилище. Затем вы можете использовать известные общедоступные каталоги для хранения ваших фотографий, фильмов и других мультимедийных файлов. Класс Environment предлагает метод getExternalStoragePublicDirectory() для определения путей этих общих каталогов.
Например, передав этому методу значение Environment.DIRECTORY_PICTURES , вы можете определить путь к общедоступному каталогу, в котором вы можете хранить фотографии. Аналогично, если вы передадите этому методу значение Environment.DIRECTORY_MOVIES , вы получите путь к общедоступному каталогу, в котором могут быть сохранены фильмы.
Вот как вы можете ссылаться на файл bob.jpg в каталоге общих изображений:
Когда у вас есть объект File , вы можете снова использовать классы FileInputStream и FileOutputStream для чтения или записи на него.
Заключение
Теперь вы знаете, как максимально использовать возможности локального хранилища, предоставляемые Android SDK. Независимо от выбранного вами варианта хранения операции чтения/записи могут потребовать много времени, если задействованы большие объемы данных. Поэтому, чтобы убедиться, что основной поток пользовательского интерфейса всегда остается отзывчивым, вы должны рассмотреть возможность запуска операций в другом потоке.
Чтобы узнать больше о сохранении данных приложения локально, обратитесь к официальному руководству API хранения данных.
Источник