- Получение пути к карте памяти SD Card на Android
- Терминология
- Результаты поиска
- Описание кода
- Пример использования
- Заключение
- Как установить игру на Android с кэшем?
- Что такое КЭШ?
- Полезные видео
- Установка кэшей OBB
- Установка кэшей DATA
- Установка Кэшей OBB на Андроид 11 и выше
- Установка кэшей DATA на Android 11 и выше
- Использование карты памяти /sdcard/ приложениями в Android
- Нет папки obb в Андроид. Что делать
- Папка obb (sdcard/Android/obb) на андроид, для чего она нужна?
- Что делать если нет директории, папки sdcard/Android/obb?
Получение пути к карте памяти SD Card на Android
Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом.
Итак, начнем с теории.
Терминология
Гугл нам говорит, что есть следующие понятия:
- Внутренняя (internal) память — это часть встроенной в телефон карты памяти. При ее использовании по умолчанию папка приложения защищена от доступа других приложений (Using the Internal Storage).
- Внешняя (external) память — это общее «внешнее хранилище», т.е. это может быть как часть встроенной памяти, так и удаляемое устройство. Обычно это часть встроенной памяти, как удаляемое устройство я видел в последний раз на андройде 2.2, где встроенная память была около 2Гб, и подключаемая память становилась внешней (Using the External Storage).
- Удаляемая (removable) память — все хранилища, которые могут быть удалены из устройства без «хирургических» вмешательств.
До версии KitKat 4.4 API не предоставляло функционала для получения путей к внешней памяти. Начиная с этой версии (API 19) появилась функция public abstract File[] getExternalFilesDirs (String type), которая возвращает массив строк с путями к внутренней и внешней памяти. Но как же быть с нашей SD Card, которая вставлена в слот? Путь к ней мы опять не можем получить.
Результаты поиска
Чтобы ответить на поставленный вопрос я обратился к всезнающему гуглу. Но и он мне не дал четкого ответа. Было рассмотрено множество вариантов определения от использования стандартных функций, которые ведут к внешней памяти, но ничего общего с удаляемыми устройствами хранения данных они не имеют, до обработки правил монтирования устройств (Android же на ядре Linux работает). В последних случаях были использованы «зашитые» пути к папке с примонтироваными устройствами (в различных версиях эта директория разная). Не стоит забывать, что от версии к версии правила монтирования меняются.
В конечном итоге я решил объединить все полученные знания и написал свой класс, который может нам вернуть пути к внешним и удаляемым устройствам.
Описание кода
Был создан класс MountDevice, который содержит в себе путь к устройству, тип устройства и некий хэш.
Типов устройств выделено два (внутреннюю память я не стал трогать, так как к ней доступ можно получить через API системы).
И был создан класс StorageHelper, который и осуществляет поиск доступных карт памяти.
В классе StorageHelper реализовано два способа поиска — через системное окружение (Environment) и с использованием утилиты Linux mount, а точнее результата ее выполнения.
Способ первый — Environment
При работе с окружением я использую стандартную функцию getExternalStorageDirectory() для получения информации о внешней памяти. Чтобы получить информацию о удаляемой памяти, я использую переменную окружения «SECONDARY_STORAGE«.
Внешняя память всегда одна и обычно всегда есть, поэтому проверяем ее на читаемость, вычисляем хэш и запоминаем. Удаляемой памяти может быть много, поэтому необходимо полученную строку разбить по разделителю и проверять каждое значение.
Вариант решения взят со stackoverflow. Ответ где-то там внизу.
Способ второй — mount
Так как у меня долго не получалось заставить систему мне сказать путь к удаляемой памяти, я решил искать в сторону примонтированных устройств. В системе есть файлы конфигурации, в которых описаны правила монтирования внешних устройств. Все бы хорошо, но на Android версии 4.* к этому файлу простым смертным доступа нет, поэтому рассматривать этот способ не буду.
Вернемся к утилите mount. При запуске без параметров команда возвращает список смонтированных файловых систем. Удаляемые устройства имеют обычно формат файловой системы FAT, то будем выделять строки, в которых есть характеристика «fat«. Внешняя память будет характеризоваться параметром «fuse«.
Примечание: при использовании такого способа не всегда корректно (скорее всего я что-то не учел) определяются типы смотнтированных устройств. Разницу замечал на разных версиях Android. Поэтому этот способ можно использовать как дополнительный.
Вариант решения взят со stackoverflow. Ответов там несколько примерно одинаковых.
Про дублирование
Многие замечали в директории монтирования устройств такую картину:
И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:
- создаем StringBuilder
- записываем в него общий размер устройства и размер используемого пространства устройства
- обходим содержимое корня устройства
- записываем имя каталога
- записываем имя файла и размер
- вычисляем hash
Пример использования
Заключение
Подробные рассуждения по этому вопросу понимания памяти в Android, некоторые советы можно прочитать тут.
Исходный код всего класса расположен еще нигде не расположен. На днях постараюсь разместить на gitHub.
Источник
Как установить игру на Android с кэшем?
Что такое КЭШ?
Это один файл в папке или целый набор папок с подпапками и другими файлами. Обычно разработчики делают кэш для того, чтобы APK файл с самой игрой весил не так много. На данный момент в Google Play можно заливать apk-файлы, которые весят не более 100 мб. Если больше — то разработчикам придется делать кэш. Также cache присутствует не только по этим причинам, а еще по сотне других факторов, которые удобны конкретному разработчику.
Для распаковки скачанных кэшей из zip архивов, используйте любой файловый менеджер, обладающий такими возможностями, например: ES Проводник.
Полезные видео
Установка кэшей OBB
Установка кэшей DATA
Второй вид кэша — это такой вид, который часто используется в играх от GameLoft. Если Вы распакуете архив, зайдете в папку и не найдете там .obb файлов, то это однозначно второй вид и его нужно распаковывать по пути sdcard/Android/data. Есть индивидуальные случаи, когда кэши приходится размещать в других местах, но это очень редко и об этом всегда будет написано в описании взломанной или обычной игре на сайте.
Приведенные выше данные работают только с Андроид смартфонами, где установлена версия Android ниже 11. В некоторых моделях телефона имеется доступ к папке Android/obb, но в большинстве случаев нет. Ниже рассмотрим один из возможных примеров для выхода из ситуации.
Установка Кэшей OBB на Андроид 11 и выше
Установка кэшей DATA на Android 11 и выше
Для получения доступа к папке data, потребуется другое приложение, которое называется Файлы. Оно работает отлично на множестве смартфонов, но везде есть исключения. Это не гарантирует доступа к папке data. Если вдруг доступ к папке data ограничен, попробуйте выполнить все действия как и с программой X-plore.
Из этой инструкции можно понять, что устанавливать кэши на телефон стало не так-то просто, если у Вас Андроид 11 версии. Но рабочие решения есть. Не забывайте, что это может не работать для некоторых устройств, а также установленные кэши все равно не позволят запустить игру. Это настоящие «танцы с бубнами». Поэтому скрестите пальцы и надейтесь на лучшее 🙂
Источник
Использование карты памяти /sdcard/ приложениями в Android
Друзья, поклонники зеленых роботов, разработчики приложений, просто пользователи:
как Вы используете карту памяти /sdcard/ в Вашем Android-девайсе?
Рассмотрим, для начала данный вопрос на примере большинства рядовых пользователей устройства под управлением ОС Андроид:
Как и многие, я устанавливаю приложения на карту памяти — для экономии места в самом телефоне, но сами приложения, их кеши и т.д. — все это сохраняется прямо в корень карты памяти, в итоге я получаю на карте полную «кашу»:
огромное количество папок и т.д. среди которых достаточно неудобно (как через ФМ так и при подключении к ПК) искать нужные мне файлы, папки и т.д. Понятно, что можно обойтись костылями и, например, добавить мои папки в «избранное» в том же ФМ и т.д., но вопрос в другом.
Почему изначально большинство приложений устанавливаются на карту памяти так:
или, например, так:
или на худой конец — есть же скрытая системная
/sdcard/.android_secure
(понятно, что туда не всегда есть доступ и т.д., но все таки)
В итоге: что же получает юзер?
Среднестатистический юзер устанавливает достаточно много приложений и, зачастую, для экономии места, перемещает их на карту памяти. Все хорошо, но до того момента, когда нам вдруг понадобилось найти свой собственные документы на карте памяти, тут мы подключаем девайс с ПК в режиме карты памяти или же через ФМ самого смартфона заходим сюда: /sdcard/
И что же мы видим?
Да вот что:
habrastorage.org/storage1/e5deae9f/54a3c20b/8ba76329/55414a1a.jpg
Напрашивается, закономерный вопрос: почему так?
Насколько я понимаю, причины две:
1) это сама компания google, точнее ее политика в отношении это аспекта, то есть действия разработчиков программ никак тут не ограничены (тем же условием опубликования программы на market’e и т.д.)
2) разработчики программ, которые пишут софт, зачастую, создающий массу папок в корне /sdcard/
Ну и для любопытства ради воспользуемся любимым поиском:
habrahabr.ru/blogs/android_development/111868
Например тут указан некий Стандарт разработки приложений под Android
из которого четко следует:
Корневой каталог для всех файлов пользователя, кроме временных:
/sdcard/название проекта/, например /sdcard/TalentMania/
Каталог для музыки:
/sdcard/название проекта/sound/, например /sdcard/TalentMania/sound/
Каталог для MIDI:
/sdcard/название проекта/midi/, например /sdcard/TalentMania/midi/
Каталог для графики:
/sdcard/название проекта/img/, например /sdcard/TalentMania/img/
Подкаталоги для файлов различных активити:
/sdcard/название проекта/img/название активити/, например /sdcard/TalentMania/img/guitar/
И т.д.
Никаких претензий я разработчикам или вообще кому либо не предъявляю.
Просто хочу задать два вопроса:
1) Почему так? Почему все «сваливается» в корень карты памяти?
2) Одному мне это чертовски неудобно?
Спасибо за внимание!
PS: а пока юзеры выдают просто шедевральные методы облегчения использвания карты памяти:
открываешь карту памяти и создаешь
_Видео
_Документы
_Музыка
_Прочее
|-Карты
|-и т.д.
_Фото
как результат, то что мне нужно, хотя бы всегда сверху
как в телефоне
так и на ПК
Источник
Нет папки obb в Андроид. Что делать
Сегодняшняя статья на андроид тематику будет полезна любителям поиграть бесплатно в платные игры для смартфонов и планшетов. При установке платного контента могут возникать определенные трудности, например нет конфига, драйвера, нужного кодека или банально рут прав или просто нужной директории, папки. Для установки игр с кешем понадобиться папка obb в android. О ней и поговорим.
Папка obb (sdcard/Android/obb) на андроид, для чего она нужна?
Немного теории для начала, что бы вы могли понтануться перед друзьями. Данный каталог в системе служит для хранения файлов с расширением «.obb». Обычно там хранится кеш различных приложений или же игр. Существует два основных способа установки нового софта на телефон, планшет:
- Установка на прямую из Google Play. Единственное что потребуется — учетная запись Google
- Скачивание на устройство APK и всех необходимых файлов и последующая установка напрямую из смартфона;
С первым способом трудностей не возникает, со вторым дела обстоят несколько иначе. Существуют платные игры и приложения, в которые мы хотим поиграть и опробовать бесплатно. Они зачастую содержат кеш данные, например для установки на телефон GTA San Andreas необходимо скачать вместе с APK папку с кешем игры, который как раз устанавливается в папке obb. При покупке и последующей установке официального приложения папка obb создается сама. При скачивании пиратской версии телефоне изначально отсутствует папка obb, в которую нужно кидать кэш для игр.
Что делать если нет директории, папки sdcard/Android/obb?
Как догадался пытливый читатель данную папку нужно просто создать. Рекомендуем создавать ее в памяти смартфона, т.к. по умолчанию все игры и программы устанавливаются туда. Если устанавливаете утилиты на sd карте — создавайте на флешке. Первый вариант — создать папку напрямую со смартфона:
- Открываем любой файловый менеджер (на каждом аппарате есть встроенный). «Android» системная папка, по этому может быть скрыта. Если ее не видно — нажмите на кнопку контекстного меню и выберете пункт «Показать скрытые фалы и папки»;
Показать скрытые файлы или папки
Как создать папку obb
Второй вариант — берем в руки USB кабель, подключаемся к компьютеру. Идем по тому же пути — открываем нужный диск, заходим в папку android, создаем папку obb. Теперь, после установки кидаем туда файлы кеша и наслаждаемся любимыми играми.
Внимание! Не запускайте игру, пока не скопировали все необходимые файлы кеша, иначе придется повторять процесс установки заново.
Надеюсь все разобрались для чего нужна Android obb папка и что делать если нет папки obb.
В довесок бонусное видео как поставить GTA San Andreas на андроид:
Если у вас есть трудности с установкой каких-то конкретных игр — пишите в комментарии.
Евгений Загорский
IT специалист. Автор информационных статей на тему Андроид смартфонов и IOS смартфонов. Эксперт в области решения проблем с компьютерами и программами: установка, настройка, обзоры, советы по безопасности ваших устройств. В свободное время занимается дизайном и разработкой сайтов.
Источник