|
Получаем вот этот экран |
В Android 6, кроме прочего, появилась встроенная возможность форматировать карточки памяти как часть внутренней памяти —
adoptable storage. Это отлично, это удобно. Конечно, мрази-производители убирали эту возможность, но МОЖЕТ БЫТЬ решение ниже может помогать и в случае таких производителей.
В моём же варианте речь про Android Emulator. Дело в том, что
ещё недавно образы в эмуляторе позволяли форматировать «карты памяти» так, чтобы они становились внутренней памятью. Без этого вы не можете, к примеру, выполнить простое
adb push myDir /sdcard/
Потому что в этом случае каталог будет закинут исключительно во внутреннюю память. Конечно, потом вы можете переместить этот каталог из внутренней памяти на карточку:
|
Выделяем элемент, который хотим перенести |
|
|
|
|
|
|
Переносим на внешнюю карту |
Но блин, это реально неудобно сразу по нескольким причинам:
- Если объект занимает больше места, чем вообще есть на внутренней памяти, то вы изначально не сможете его забросить туда
- Карточка монтируется через хитрую жопу, отчего ваш файловый мендежер не будет иметь к ней прямой доступ. Он запросит отдельное разрешение и, по-сути, будет перенаправлять все запросы вот этому менеджеру, который изображён на скриншоте. Т.е. вы теряете многие плюшки любимого файлового менеджера
- Как вы не могли сделать adb push, так вы не сможете сделать adb pull
Значит нам нужно заставить Android снова начать использовать когда-то работающую фичу.
Создаём новое устройство. На некоторых шаблонных конфигурациях можно увидеть, что вы не можете менять параметры устройства:
|
Всё отключено. Ну офигеть теперь |
Это обойти не так уж и сложно. Мы просто создаём устройство, но не запускаем эмулятор. Далее заходим в папку с этим эмулятором и открываем в ней config.ini. Меняем нужные нам параметры. Однако для SD карты простое изменение цифры ничего не даст. Более того, этого и не потребуется. Так что меняйте ядра процессора, оперативу, но не размеры хранилищ.
Для управления объёмом карты памяти в составе Android SDK есть специальная утилита. Вот как было сразу после создания эмулятора:
|
Ну и что мне делать с этими 100 мегабайтам? |
Теперь пересоздадим образ карты памяти. Для этого используем mksdcard. Вот справка этой утилиты:
umnik@myachin:~/DATA/!/SDK_Android> mksdcard
mksdcard: create a blank FAT32 image to be used with the Android emulator
usage: mksdcard [-l label] <size> <file>
if <size> is a simple integer, it specifies a size in bytes
if <size> is an integer followed by 'K', it specifies a size in KiB
if <size> is an integer followed by 'M', it specifies a size in MiB
if <size> is an integer followed by 'G', it specifies a size in GiB
Minimum size is 9M. The Android emulator cannot use smaller images.
Maximum size is 1099511627264 bytes, 1073741823K, 1048575M or 1023G
Мне нужно было 10 гигов, так что я выполнил команду
mksdcard 10G sdcard.img
|
Вот теперь норм |
Но в эмуляторе мы не можем использовать эту память как внутреннюю. Он не даст отформатировать карту памяти так, как хочется:
|
Вот здесь раньше была возможность
отформатировать флешку как внутреннюю память |
Мы подошли к нужной волшебной команде, которая заставит Android считать эту карточку пригодной к форматированию во внутренюю память. Достаточно выполнить
adb shell sm set-force-adoptable true
...и всё станет хорошо. Android резко начнёт считать карточку хорошей и предлагать выбрать, что же с ней сделать:
|
Да! Вот оно! |
Жмём Set up и видим желанное:
|
Теперь можно отформатировать карточку как внутреннюю память |
Аналогично эта возможность есть и на экране, в которой мы попадаем не из области уведомлений, а из настроек:
|
Да, всё так, как надо |
После форматирования карта будет помечена как не сменная и adb push object /sdcard/ запулит объект на карточку, которую вы сделали такого объёма, как вам вам нужно (но не менее 9 Мегабайт и не более 1023 Гигабайт)
|
Это другой эмулятор, но разницы нет |
Комментариев нет:
Отправить комментарий