13 марта 2018 г.

Форматирование карты памяти как внутренней памяти. Возвращение Android Adoptable Storage

Получаем вот этот экран
    В 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 Гигабайт)
Это другой эмулятор, но разницы нет

Комментариев нет:

Отправить комментарий