Практически каждое приложение на Андроид устанавливается во внутреннюю память устройства. А она ведь не резиновая, так что ей свойственно заполняться. Так что с такой ситуацией может столкнуться любой пользователь. На помощь придет SD-карта, объемы которой могут доходить до десятков и даже сотен ГБ. Сейчас мы во всех деталях расскажем, как перенести приложение и кэш на SD карту.
Также стоит отметить, что не каждая карта подойдет для процедуры замены внутренней памяти на внешнюю. Все дело в классах скорости SD-карт, которые разняться от медленных (C2 и С4), до быстрых (С10 и С16). Если рассматриваемые ниже процедуры производить на медленных SD, то перенос данных отразится на общем быстродействии устройства, потому рекомендуется пользоваться только быстрыми флешками.
Способов замены внутренней памяти на внешнюю не так уж и много, потому мы остановимся лишь на самых эффективных, причем они будут описываться последовательно: от простых к более сложным.
Стоит заметить, что данный способ не требует наличия ROOT-прав, но подходит не для всех приложений. Так что, если в описании приложения нет нужных кнопок, расстраиваться не стоит, ведь это был самый легкий способ. Для еще большего облегчения можно воспользоваться утилитой или ей подобной, где все приложения удобно структурированы, что ускоряет поиск нужных.
ВНИМАНИЕ! Представленные ниже способы можно применить только на устройствах с РУТ-правами. Все дальнейшие операции делаются на ваш страх и риск, никто не дает 100% гарантии, что в случае неудачи вы не получите кирпич. Также мы не несем никакой ответственности за потерю личных данных.
Если приложение не поддерживает стандартный перенос данных, то можно это сделать насильственно при помощи сторонних утилит, таких как:
Принцип работы данных программ очень схож, так что рассмотрим способ на примере Link2SD.
Этот способ, в отличии от следующего, не требует от пользователя особых знаний, кроме элементарных понятий о Рут-правах.
Внимательный пользователь смог заметить, что у Link2SD и других схожих утилит есть интересная функция «Сослать». С ее помощью переносятся не отдельные части программы, как в предыдущих пунктах, а абсолютно все данные. При этом программа будет считать, что работает она во внутренней памяти устройства, что для некоторых из них является важным условием нормальной работоспособности.
Для реализации этого способа SD-карту надо «разбить» на два раздела, после чего с нее удалятся все данные, потому будьте внимательны и сделайте резервную копию важной информации.
Разделы на карте памяти можно делать как на компьютере, с помощью таких программ как Paragon Hard Disk Manager 12 Server или MiniTool Partition Wizard Home Edition. Но это достаточно трудоемкий процесс, а потому мы все сделаем прямо на смартфоне, воспользовавшись .
Теперь приложения и игры можно безопасно ссылать во второй раздел карты памяти, с помощью соответствующей функции Link2SD или его аналога.
Данный способ пригодится для пользователей, которые любят игры с большим кэшем. Сейчас многие крупные проекты (к примеру, серия игр , ) занимают несколько гигабайт. То же самое касается и навигационных карт. Не все устройства могут похвастаться таким объемом встроенной памяти, поэтому на помощь приходит FolderMount. Оно позволяет создавать виртуальные папки, чтобы система по-прежнему считала, что данные приложения находятся во внутренней памяти, хотя фактически все файлы расположены на флешке.
Этот способ позволяет обмануть систему, т.е Android будет считать SD-карту памятью устройства. Одним из главных преимуществ является тот факт, что все приложения будут автоматически устанавливаться на флешку. Идеально подходит для устройств с очень маленьким объемом внутренней памяти. Для его осуществления понадобится файловый менеджер, лучше всего использовать Total Commander. Смысл способа – поменять местами пути к памяти устройства и флешке.
Например, если ваши строки:
dev_mount sdcard/mnt/sdcard
dev_mount extsd/mnt/extsd
То они должны стать:
dev_mount sdcard/mnt/extsd
dev_mount extsd/mnt/sdcard
То есть самое главное – поменять местами слова после /mnt/.
Возможности девайса можно серьезно расширить, если заменить внутреннюю память Android на карту памяти. Это позволит инсталлировать на планшет или иной гаджет гораздо больше приложений, но основным требованием для выполнения данного апдейта является наличие root-прав на устройстве. Рассмотрим способы, позволяющие использовать SD-карту в качестве системной памяти аппарата, а также связанные с этим условия.
Перед повторением описываемых ниже действий пользователь должен учесть несколько важных моментов:
В целом процедура (особенно для неопытных пользователей) является довольно рискованной, поэтому имеет смысл проводить ее исключительно для старых гаджетов с малым количеством собственной памяти.
Чтобы поменять местами память, из Google Play потребуется установить Root Browser.
Повторим, что полноценно работать с ним можно только на рутированных девайсах. После запуска вышеназванного приложения:
В Андроид sdcard обозначает внутреннюю память, а extsd - внешнюю, т. е. SD-карту. Заменой этих строк мы фактически поменяли местами эти виды памяти. В некоторых системах эти куски кода могут выглядеть иначе, например, так:
Заменить их нужно следующим образом:
После выполнения описанной процедуры перезагрузите гаджет. Перед этим обязательно проверьте отсутствие ошибок в измененном коде, чтобы в дальнейшем не возникло необходимости в перепрошивке.
Приложение доступно в Play Market и работает только на девайсах с root-правами. Этот файловый менеджер не подменяет физически внутреннюю память устройства внешним накопителем, но он способен переносить любые утилиты на SD-карту, значительно экономя ресурсы гаджета.
Особенность рассматриваемого приложения в том, что саму MicroSD придется разбить и должным образом отформатировать. Поэтому скопируйте с вашей карточки на компьютер все ценное и приступайте к делению накопителя на разделы.
Каждое устройство на Android имеет режим восстановления, но описываемый ниже способ подойдет только для девайсов не со стандартным, а с . Если вы никогда не слышали о CWM, переходите ко второму варианту разбиения накопителя. Далее расскажем, как решить поставленную задачу, если в вашем режиме восстановления устройства есть пункт Partition SD Card:
Подключите карту к лэптопу или ПК. Для этого можно использовать картридер или иное оборудование, главное, определяться оно должно как накопитель, а не медиа-устройство MTP. Далее:
Большинство владельцев устройств на Андроид рано или поздно сталкиваются с проблемой нехватки внутреннего пространства для хранения файлов . Регулярная установка приложений постепенно уменьшает количество свободного места в гаджете, что приводит к торможениям, неправильной работе, а то и вовсе полному отказу системы работать нормально. В этом случае поможет замена внутренней памяти Android на карту памяти. Как это сделать и какие ещё существуют способы борьбы с такой неприятностью, рассмотрим далее.
Прежде чем копаться в настройках и все разом приложения переносить на флешку, нужно понять, какие, вообще, существуют типы памяти на вашем Андроид-устройстве:
Во многих гаджетах автоматически разрешить установку новых приложений на флешку не получится. Это касается телефонов и планшетов начиная с версии 4.4.2 и заканчивая 6.0.1. В таком случае замена внутренней памяти на карту SD просто необходима, а сделать это можно несколькими способами (в том числе и использовать сторонние приложения). Но сначала нужно узнать версию Андроид, которая установлена на вашем гаджете. Для этого нажимайте последовательно на:
В открывшемся списке и будет указан версия ОС.
Разработчики позаботились о пользователях и создали программы для того, чтобы сделать память флешки основной на Андроид. Это особенно полезно для старых версий системы, например, 2.2 или даже более ранних.
Удобное ПО, в котором есть весь необходимый инструментарий для переноса информации с внутренней памяти на внешний накопитель. Интерфейс интуитивно понятный и простой. Доступные для перемещения приложения помечены иконками, при нажатии на которые открывается вся доступная о них информация, а также возможные действия (перенести, скопировать, удалить).
Это ПО интересно пользователям по двум причинам. Первая - оно совместимо с разными версиями Android (в том числе и более поздними). А вторая - возможность перенесения данных и приложений, которые в системе помечены как «недопустимые для переноса».
Ещё одна интересная разработка, которая упрощает жизнь пользователей Android-гаджетов . Основные преимущества - простая установка ПО (без необходимости дополнительно качать скрипты и библиотеки) и возможность переносить информацию не полными библиотеками, а только их частями.
Есть ещё вариант, как внутренней памятью на Андроид сделать SD-карту. Если версия вашего гаджета от 2.2 до 4.2.2, то инструкция предельно простая, нажимайте на:
Напротив флешки появится галочка или кружок, которая свидетельствует об изменении настроек. Теперь установка приложений будет автоматически идти на флеш-накопитель.
Для пользователей Android KitKat и выше процесс будет сложнее и муторнее. Главная проблема заключается в том, что вам потребуется получить root-права для своего устройства . Сделать это можно и в домашних условиях, но есть риск превратить своё устройство в «кирпич», который либо не подлежит ремонту, либо его приведут в чувство только в сервисном центре за дополнительную плату.
Помните, что, самостоятельно устанавливая рут-права, вы лишаете свой аппарат гарантии и действуете на собственный страх и риск. Стоит оно того или нет - решать вам. Может быть, менее рискованно каждый раз вручную переносить новые приложения?
А что думаете вы? Расскажите в комментариях, приходилось ли вам получать root-права, успешно ли или, может, вы знаете другие способы, как переключить память планшета/телефона на карту памяти.
Проблема нехватки памяти – одна из основоположных как для ПК, так и для мобильных устройств. При малом количестве свободной памяти система обычно начинает подтормаживать, подвисать, работает нестабильно и ненадёжно. Особенно актуально это для Андроид-устройств, многие из которых изначально обладают довольно небольшим объёмом основной памяти (т.н. «Internal Storage»). В такой ситуации у некоторых пользователей может возникнуть идея попробовать использовать внешнюю SD-карту в качестве основной памяти на их Андроид-устройстве. В данном материале я расскажу, как SD-карту сделать основной памятью на гаджетах Андроид, и какие способы нам в этом помогут.
Разбираем, как SD-карту сделать основной памятью на Андроид
Для осуществления данной задачи вам понадобится скоростная SD-карта (желательно, 10 класса или быстрее). Карты 6, а особенно 4 и 2 классов для таких целей не пригодны, ваша система вследствие их использования существенно замедлит свою работу, что вряд ли понравится кому-то из пользователей.
Также важно понимать, что срок действия такой SD-карты вследствие активной на неё нагрузки будет существенно меньше, нежели если бы нагрузка на карту проходила в стандартном режиме.
Первый из описанных способов предполагает изменение содержимого файла системных настроек «Vold.fstab». После осуществления указанных изменений ОС Андроид будет считать вашу SD-карту внутренней памятью устройства, при этом учтите, что ряд установленных ранее приложений могут перестать работать.
Важно знать, что данный способ работает только на рутированных устройствах, на которых установлена ОС Андроид ниже (!) , нежели версия 4.4.2. В версиях ОС Андроид 4.4.2 и выше указанный файл, скорее всего, вы попросту не найдёте.
Также учтите, что ошибка в реализации данного способа (в частности, добавление в нужные строки лишних символов) может самым печальным образом сказаться на работоспособности вашего устройства. Потому тщательно взвесьте возможные риски, и если, всё-таки, приняли решение, тогда приступайте к его реализации.
Итак, для осуществления данного способа выполните следующее:
Например, это могут быть такие строки:
Для осуществления нужных изменений нам необходимо поменять путь в указанных строках местами, то есть, проще говоря, вместо 0 поставьте единичку в первой строке, а во второй вместо 1 поставьте 0.
После изменений эти строки будут иметь вид:
Сохраните произведёнными вами изменения, а затем перезагрузите гаджет.
Ещё один вариант как сделать карту памяти основной на андроид:
Кроме первого способа, в котором я рассмотрел, как переключить память телефона на карту памяти, существует и другой способ, работающий только на настройках ОС Андроид 6.0 (Marshmallow) или выше, и позволяющий задействовать SD-карту как основную для сохранения файлов и работы с ними. Для его реализации рекомендую сделать копию данных с вашей SD-карты (если таковые на ней имеются), так как данная карта будет отформатирована системой.
Как и обещал в комментариях к заметке «Deployment Manager или куда ещё можно задеплоить файлы », покопался ещё немного в файловой системе (а точнее в Иерархии каталогов). Основой для этой статьи стал вопрос от Дмитрия Кузьменко , очень надеюсь, что смог ответить на него в необходимом объёме. Немного поговорим об OC Android, производителях устройств работающих под управлением этой операционки, а также я покажу несколько вариантов получения списка доступных устройств хранения информации.
Upd (17.02.14). На основе комментариев внесены правки в приложения.
Upd2 (17.02.14). Обнаружено ложное срабатывание 3-го варианта, особенность пофиксил. Немного улучшил поиск.
Upd (30.03.14). Третий способ работает на версиях Android ниже 4.3. Для версий выше 4.3 код не напишу, т.к. не имею устройств с такой версией Android для анализа новой структуры.
Upd (21.04.14). Проверил код на Delphi XE6
Upd3 (15.07.14). Обновление исходного кода, обнаружена не правильная работа (ошибка AV) на некоторых устройствах
Постараюсь изложить всю суть кратко, чтобы не получилось 10 страниц текста.
Начнём с основ.
Операционная система Android основана на ядре Linux. В Unix-подобных операционных системах существует только один корневой каталог, а все остальные файлы и каталоги вложены в него. В большинстве UNIX-подобных систем съёмные диски, флеш-накопители и другие внешние устройства хранения данных монтируют в каталог /mnt, /mount или /media (в нашем случае это папка /mnt). UNIX-подобные операционные системы также позволяют автоматически монтировать диски при загрузке операционной системы.
Определяем список доступных устройств хранения информации.
Сразу нужно сказать, что в Android API я не нашёл метода, позволяющего определить подобный список. Поэтому первое, что приходит в голову, это проверка возможных путей самостоятельно и тут появляется первое «НО». Всё было бы просто, если бы не производители устройств, которые так и хотят что-то изменить в Android, вот и в этом случае они постарались. Я поэкспериментировал и выяснил, что количество возможных вариантов путей достаточно большое и узнать их все почти невозможно, разве что начать собирать общую базу таких вариантов со всех владельцев Android устройств.
В моих экспериментах участвовали (моё только одно - SGS2:):
Теперь давайте посмотрим, какие пути доступны на этих устройствах, нам важны путь до внутренней карты (если есть), внешней карты (если есть) и usb устройств (если есть).
Как видите пути везде разные.
Вариант #1.
Составляем массив возможных значений и в цикле проверяем каждое на доступность при помощи обычной проверки на существование папки (TDirectory.Exists ), а также на пустоту папки (TDirectory.IsEmpty ).
Я составил общий список для данных устройств и написал небольшое приложение для проверки.
Мой список (основан на 5-ти популярных устройствах):
Поискав подобные пути в интернете, нашёл ещё 3 возможных пункта:
Дополнение от Дмитрия Кузьменко :
Sony Xperia V - 4.1.2
Ещё немного:
Sony Xperia Go - 4.1.2
Название устройства – версия Android
Прямой путь до внутренней памяти
Прямой путь до внешней карты памяти
Прямые пути до USB устройств
Все пути начинаются с папки /mnt/.
Или скопируйте и вышлите мне файл "/etc/vold.fstab" на почту infocean @ gmail.com или в комменты (не забудьте указать модель устройства и версию Android"а). Пожалуйста, указывайте также все папки, которые есть в директории /mnt/, это очень важно.
Приложение:
Uses System.IOUtils; const pathmnt: Array of String = ("/mnt/sdcard", "/mnt/sdcard/external_sd", "/mnt/extSdCard", "/mnt/usb", "/mnt/UsbDriveA", "/mnt/UsbDriveB", "/mnt/UsbDriveC", "/mnt/UsbDriveD", "/mnt/UsbDriveE", "/mnt/UsbDriveF", "/mnt/external_sd", "/mnt/usb_storage", "/mnt/external", "/mnt/ext_card", "/mnt/usbdisk"); procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin Memo1.Lines.Clear; Memo2.Lines.Clear; for i:= 0 to Length(pathmnt) - 1 do begin if TDirectory.Exists(pathmnt[i]) AND not TDirectory.IsEmpty(pathmnt[i]) then begin Memo1.Lines.Add(pathmnt[i]); Memo2.Lines.Add("True"); end else begin Memo1.Lines.Add(pathmnt[i]); Memo2.Lines.Add("False"); end; end; end;
Вариант #2.
Первый вариант имеет как плюсы, так и минусы (главный из которых это неполнота списка возможных путей), поэтому попробуем решить данную задачу другим способом.
Есть такой файлик «vold.fstab », лежит тут «/etc/»(«/system/etc/»). Это один из конфигурационных файлов в UNIX-подобных системах, который содержит информацию о различных файловых системах и устройствах хранения информации. Описывает, как диск (раздел) будет использоваться или как будет интегрирован в систему.
И есть файл «mounts », лежит тут «/proc/». Содержит информацию обо всех точках монтирования, используемых в устройстве. Важно понимать, что если карта памяти не упоминается в данном файле, то она не подключена. Это означает, что файл постоянно обновляется.
Пошагово:
В этом варианте пока не будет кода, т.к. по какой-то неведомой мне причине, у меня не получается прочитать файл «mounts». В связи с этим предлагаю третий вариант.
Вариант #3.
Объединяем первый и второй варианты. Список будем брать из файла «vold.fstab », а проверять своими силами, не открывая при этом файл «mounts ». Зачем каждый раз мучать два файла, когда можно работать только с одним.
Пошагово:
Update-17.02.14: Благодаря Дмитрию Кузьменко и общим усилиям выяснили, что файл «/etc/vold.fstab» в Sony Xperia V немного отличается от остальных, поэтому были внесены изменения в исходный код приложения. Всё проверили, работает! :) Исходники везде обновил.
Update2-17.02.14:
В файле "/etc/vold.fstab" иногда встречаются (на некоторых устройствах) закомментированные строчки, которые очень похожи на искомые в моём коде, в связи с этим происходило ложное срабатывание. Эту особенность я пофиксил в новой версии кода.
Также пофиксил поиск нужных строчек, теперь он более универсален!
В общем, теперь код должен нормально отрабатывать на разных устройствах. Пробуйте, отписывайтесь в комменты, прикладывайте свой файл "/etc/vold.fstab" (не забывайте указывать модель устройства и версию Android).
Update3 - 15.07.14:
Читатель блога Sergey Yakimenko , обнаружил не правильную работу (чтение файла) третьего варианта на устройствах Huawei Ascend P6
и Reellex TAB-07
, о чём сообщил в комментариях.
После личной переписки и некоторого анализа, я выяснил, что за проблемы мешали работе.
Обнаруженные и исправленные проблемы:
Приложение:
Uses System.StrUtils, System.IOUtils; procedure TForm1.Button1Click(Sender: TObject); var OpenFileVold: TStringList; i: Integer; pathtemp: TStringDynArray; begin OpenFileVold:= TStringList.Create; try // Читаем файл OpenFileVold.LoadFromFile("/etc/vold.fstab"); for i:= 0 to OpenFileVold.Count - 1 do begin if (Pos("dev_mount", OpenFileVold.Strings[i]) > 0) OR (Pos("fuse_mount", OpenFileVold.Strings[i]) > 0) then begin // Update(15.07.14) // 1 - Удаляем пробелы в начале и в конце строке (избавляемся от AV) // 2 - Заменяем символы табуляции на пробелы pathtemp:= SplitString(StringReplace(Trim(OpenFileVold.Strings[i]), #9, " ", ), " "); // Проверяем первый символ строки на совпадение с символом "#" или "##", // чтобы не было ложных срабатываний if (pathtemp <> "#") AND (pathtemp <> "##") then begin if TDirectory.Exists(pathtemp) AND not TDirectory.IsEmpty(pathtemp) then begin Memo1.Lines.Add(pathtemp); end; end; end; end; finally OpenFileVold.Free; // FreeAndNil(SourceFile); end; end;
Итог: Научились получать список доступных устройств хранения информации (я использовал бы третий вариант). Текста (без кода и картинок) вышло на 3 страницы, скорее всего, заскучать не успели:)
Всем спасибо за внимание и удачной разработки.
P.s. Дополнения приветствуются.
p.s.2. Потратил немало времени на одни только эксперименты и сравнение файлов vold.fstab, mounts, с разных устройств...
p.s.3. В следующей статье, я покажу, как избавиться от проблемы обновления базы данных при обновлении приложения вручную.