C самого первого публичного появления OS Android на рынке история её развития неразрывно была связана с картами памяти. Шли годы, Android обрастал новыми фичами, сервисами и возможностями, а отношение разработчиков ОС к расширяемой памяти менялось чуть ли не каждый год. И теперь, кажется, найдено равновесие в виде опции Adoptable storage, доступной вместе с Android Marshmallow или 6.0.


В самых первых версиях 1.5-1.6 карте памяти была отведена скромная роль хранилища для медиа контента, и ни о какой возможности переноса туда части системы или приложений даже речи не шло. Шло время, магазин приложений рос по экспоненте, и стало очевидно, что объем ПЗУ в устройствах стал явно маловат, и тогда в 2010 году вместе с выходом Android 2.2 Froyo пользователям дали заветную возможность переносить приложения на карту памяти.

Для полного понимания сути процесса переноса необходимо уточнить, что приложения могут быть построены двумя разными способами. Первый предполагает, что приложение и data являются одним целым. Такой подход, как правило, используется в большинстве программ. Во втором действует принцип «приложение отдельно — данные отдельно». Это как раз сделано для игр и сервисов доступа к контенту с разного рода защитой по подписке, когда при размере в 100 мегабайт данные в виде текстур или ресурсов могут занимать до нескольких гигабайт.

Так в Android 2.2 та самая кнопка дала возможность переносить данные приложений, но только там, где разработчики это предусмотрели. Способ был не идеальный, но экономил приличное количество памяти. Тем временем, к моменту появления Android 2.3, все прогрессивные пользователи просто получали root права, ставили известный каждому Titanium backup и с его помощью переносили приложения целиком. Исключение из этого составляли только приложения с виджетами — они переноса просто не терпели.



С выходом Android 4.X и еще большим расцветом устройств на платформе чипмейкера MTK популярна стала опция default write disc, которая, по сути, вмешивалась в системную работу с памятью и позволяла ставить приложения сразу и целиком на карту памяти. Конечно же, опция пользовалась большой популярностью у пользователей.

Отлаженный механизм, как и альтернативную лазейку для энтузиастов, усложнил новый поворот в развитии Android. С появлением Android 5, или Lollipop, с невероятно красивым Material design работа с картой памяти для многих аспектов была серьезно затруднена. Даже просто полный перенос данных в том виде, как это было ранее, происходил не всегда, и те же игры держали часть файлов в одной памяти, а часть — в другой. Таким образом, пользователям предлагалось использовать расширяемую память только для хранения мультимедиа контента. На этом фоне случалось немало коллизий, ведь даже официальные приложения Google подчас не умели работать с переносом данных на карту памяти.

Эту задачу продвинутые пользователи могли бы решить посредством Root прав и редактирования файла конфигурации, но к тому моменту многие производители уже обзавелись механизмами детекции вмешательства в ПО и приравняли его к потере гарантии, что не лишено смысла. Таким образом, владельцам флагманов 2014-2015, например Samsung Galaxy Note 4 или LG G4 приходилось привыкать к новым реалиям ввиду полного отсутствия альтернатив.



Официальное или близкое к тому объяснение такого шага было построено на том, что, во-первых, данные на карте памяти хранились без шифрования, что опасно, а во-вторых, использование карт памяти низкого качества, которыми изобиловал рынок, могло привести не только к потере данных, но и серьезно повлиять на производительность устройства.

Разумеется, такой шаг вызвал бурю негодования, ведь уже стали широко доступны карты памяти объемом 128-256 Гбайт со сравнительно гуманной ценой, и сама возможность расширения памяти составляла ощутимое конкурентное преимущество перед «фруктовой компанией».

С выходом актуальной версии Android 6 (Marshmallow) команде, ответственной за разработку Android, наконец удалось найти баланс между полным упразднением возможностей карты памяти и теми проблемами, с которыми они пытались бороться.

Итак, мы подобрались к сути. Функция Adoptable storage сохраняет возможность использования карты памяти в ограниченном режиме, как это было ранее, а также позволяет пользователю сделать единый массив из карты памяти и ПЗУ устройства. Ввиду того, что в Nexus 5X и 6P нет карт памяти, самым первым с этой опцией стал продукт HTC One A9, а позже ее получил уже прошлогодний флагман HTC One M9.


Где искать?


Возможность настройки режима работы карты памяти появляется сразу, как только система «видит» её, и не важно, происходит ли это при первом старте или много позже. При выборе опции использования «Внутренней памяти» телефон сначала отформатирует карту памяти, а потом виртуально присоединит ее к системе.

Важно! Данные, которые были на карте памяти «до», пропадут навсегда, так что сохраняйте их заранее.

После успешного форматирования и логического объединения телефон предложит перенести мультимедийные данные (фото, изображения, музыку и так далее) на ту часть памяти, которая относится к карте памяти. Стоит выбрать перманентный перенос и подождать несколько минут, так как процесс сопровождается некоторыми ограничениями в работе Android.



Согласно описанию, система должна сама решать, куда ей ставить приложения, но перепроверить вручную будет не лишним.

Эксперимент


Для теста выберем два приложения (игры), каждое из которых содержит и исполняемый, и большой объемы дополнительных ресурсов, а также проверим, насколько полно можно перенести небольшое приложение.

Итак, скачиваем Asphalt 8 и запускаем его, чтобы игра смогла докачать 830 мегабайт текстур и прочих данных. После этого даже не обязательно ее запускать сам процесс игры, в разделе «Хранилище» уже будет видна статистика по распределению памяти: игра окажется полностью в памяти телефона. Теперь идем в настройку внутреннего хранилища и выбираем перемещение на карту памяти, после чего снова смотрим статистику распределения памяти. Как и до установки игры, в памяти устройства занято 2,89 ГБ, а в деталях игры явно указано, что и сам файл, и данные «переехали» на карту памяти.



Повторим эксперимент с ещё одной игрой, разработчик которой хранит дополнительные файлы непосредственно на стороне магазина Google. Скачиваем и устанавливаем Reckless Racing 3 и повторяем те же действия. И снова приложение хранится в памяти телефона, и снова после перемещения в памяти устройства занято 2,89 ГБ.



После проведенных манипуляций игры были запущены без проблем с производительностью.

В качестве заключительного этапа эксперимента пробуем перенести простой и «лёгкий» Facebook Messenger.



И это приложение также полностью переносится на карту памяти. Ура? Ура!

Особенности


  • При объединенной памяти и подключении к ПК/MAC будет виден только один накопитель, и это нормально, ведь логический раздел тоже один.

  • Не стоит соблазняться картами памяти с AliExpress за два доллара: система будет на них ругаться при переносе, предупреждая о возможных проблемах, среди которых могут быть и снижение производительности устройства, и пропадание приложений при перезагрузке телефона. Кроме того, карта памяти в целом все еще уступает топовым решениям, таким как UFS 2.0 в Samsung Galaxy S7/S 7 EDGE.


  • Карта памяти в таком режиме форматируется до объединения (не забудьте сохранить данные!) и шифруется по умолчанию. Это не даст использовать её в другом телефоне или устройстве в режиме as-is, только после очередного форматирования.


  • Сброс телефона с такой картой памяти до заводских настроек снова приведет нас к форматированию, казалось бы, уже родной карты, так как телефон откажется читать с нее старый контент. Поэтому если и выполнять объединение памяти, то только с настроенной резервной копией всего самого нужного в облако. И это уже не шутки.

Резюмируя


Опция, безусловно, предлагает крайне полезную и удобную возможность, особенно после того, что сделали в Android 5.

Флагманы с очень быстрой памятью, как правило, располагают и приличным объемом ПЗУ, и производители, понимая это, уже удаляют данную функцию. А вот для среднего и бюджетного сегментов поддержка Adoptable storage сможет решить частую проблему нехватки места при установке более чем Х приложений.

Недорогих устройств с последней на сегодняшний день версией Android становится все больше и больше, но вместе с тем растет и необходимость облачного копирования данных, и этим не стоит пренебрегать

Комментарии (50)


  1. en1gma
    04.05.2016 18:40
    -1

    да ну нафиг…
    по моему опыту, самое удобное распределение таково:
    /data отдельным разделом на нанд/еммс;
    /cache симлинк на папку /data/cache (да, я в курсе, что гугол объявил /cache устаревшей, осталось вендорам soc это услышать и выпилить из bsp);
    /sdcard или симлинк на на папку /data/sdcard или симлинк на внешнюю карточку (с путём, зависимым от вендора soc и от версии андроида) в зависимости от настройки пользователем.

    тот сон разума, что на текущем sgn3 на а5.0 — нет, спасибо… а описанный — так вообще…


    1. maximfilin
      04.05.2016 18:54

      Ну симлинк тоже не самое идеальное решение, хотя работает в большинстве случаев. Тут больше всего вопросов вызывает невозможность расшифровать карту памяти если сброс уже случился.


  1. denis_g
    04.05.2016 19:12
    +1

    Помню, давным-давно, еще на девайсе с Андроидом 2.3 и 150 с хвостиком мегабайтами (!) внутренней памяти вполне успешно пользовался приложением Link2SD, которое создавало дополнительный ext2-раздел на карточке, физически (mv )перекидывало туда те приложения, которые ты отмечал, а потом создавало на перекинутые файлы симлинки в основной памяти. Не идеальный вариант, конечно, но работало, блин.

    Интересно было бы почитать, как в 6-м Андроиде вышеописанный механизм реализован. Может быть, он даже имеет что-то общее с тем, как это было сделано в Link2SD :)


    1. maximfilin
      04.05.2016 19:48

      По факту там есть общее, тут просто логическое объединение массивов.


      1. Lsh
        04.05.2016 22:11

        А точнее? Чего и как монтируется? Там ведь нет никакого raid или lvm, не может быть полфайла там, а полфайла тут. Я правильно понимаю?


        1. maximfilin
          04.05.2016 22:30
          +1

          adb shell
          sm list-disks (получаем ID диска где у нас карта памяти)
          sm partition disk:179:160 (если целиком) или
          sm partition disk:179:160 (если целиком) или mixed XX, где XX процент от карты памяти, который забираем под память

          И вот если мы идем по пути целого диска, то было до

          shell@p1:/ $ sm list-disks
          disk:179,64
          shell@p1:/ $ sm list-volumes all
          private mounted null
          public:179,65 mounted 9F29-15FD
          emulated mounted null

          Стало после

          shell@p1:/ $ sm set-force-adoptable false
          shell@p1:/ $ sm list-volumes all
          private:179,66 mounted 0ef3b40b-103f-4331-b0ce-92f105f8xxxx
          private mounted null
          emulated mounted null
          emulated:179,66 unmounted null


    1. Lsh
      04.05.2016 20:01

      А у меня на стареньком p500 просто вся /data монтируется с карточки. И приложения никакого не надо.


      1. Mato
        05.05.2016 01:47

        То же самое, все еще пользуюсь оптимусом. Но скоро буду менять, наконец-то появились достойные варианта апгрейда.


  1. vikarti
    04.05.2016 19:29

    c Adaptable Storage проблема в том что некоторые производители вроде Sony берут… и вырезают функционал просто


    1. maximfilin
      04.05.2016 19:50

      Ну тут пока его наличие не обязательно, но в младших и средних устройствах наверняка не будут. (Как минимум то, что я вижу в стадии «скоро на прилавок» опцию имеет)


  1. nochkin
    04.05.2016 19:52

    > Не стоит соблазняться картами памяти с AliExpress за два доллара

    Там даже не в скорости проблема, а в том, что многие продавцы толкают подделки (например, пишет что 64GB, а на самом деле там работает только 4 или 8).


    1. maximfilin
      04.05.2016 20:32

      ну сколько бы памяти там не было, скорости, как правило там никакие.


      1. ClearAirTurbulence
        04.05.2016 20:49

        Низкую скорость видно сразу, а то, что данные переписываются по кругу — не всегда.


        1. maximfilin
          04.05.2016 20:50

          Кстати такого давно уже не видел.


          1. Sleepwalker_ua
            05.05.2016 01:13
            +1

            Все еще бывает. недавно надо было стопочку дешевых флешек взять, сугубо файлопомоечные затычки, на работу (удобно, т.к. и ноут, и планшет, и комп их понимаю прекрасно через копеечный адаптер или вообще без оного. и стоят чуть дешевле чем USB), microSD, а на али в горячих товарах восьмигиговые шли чуть ли не дешевле 2гб, скидка 65%, ну заказал 20 штук, пришли, начал тестить — 12 штук на честные 8Гб, еще 6 двухгиговых и 2 штучки — на 128 мегабайт. Проверял просто — кидал файл на 6,5 Гб и вытаскивал его обратно, ежели все норм — значит честная, если плохо — кидал файл меньшего размера. Вот те которые на 128 метров оказались самыми шустрыми (запись аж 9мб, чтение чуть меньше 11), но и самыми маленькими (всего один PDF на 96 метров влез, и дальше все). А у остальных так, чтение в районе 5 мб, запись — от 3 до 6. В принципе жить можно, с учетом цены (около 1,3 бакса за штучку-то! у нас самые-самые дешевые вдвое дороже стоят, на 4гб, а 2гб, как ни странно, еще дороже), но диспут открыл и претензию высказал, еще пять баксов вернули за проблемные…


            1. maximfilin
              05.05.2016 10:17

              Занятно, спасибо.


      1. nochkin
        04.05.2016 23:15

        На честных картах обычно скорость честная и вполне нормальная.


    1. isden
      05.05.2016 11:36

      Да даже объем может быть в порядке, но вот только чип может быть дефектный, либо проблемный, другого производителя (т.е. та же подделка). Что приводит к внезапным отвалам карточки, проблемам с файловой системой и т.п. Лично такое наблюдал несколько раз.


      1. nochkin
        05.05.2016 18:18

        Слышал про такое по поводу скорости, но ни разу не встречал лично. А карточки такие я покупаю достаточно часто.


  1. Areso
    04.05.2016 20:03

    Правильно ли я понимаю, что, к примеру, если устройство умерло, а карточка — целая, то информация на карте (фото, видео) будут утеряны? Ведь часть разметки логического тома была на устройстве? И наоборот, если умерла (или её просто извлекли) карту, то будут какие-то особенности работы оставшихся приложений? Т.е. уместна ли здесь аналогия с raid-0? Как тут с избыточностью и контролем целостности? Можете объяснить эти моменты подробнее?


    1. Lsh
      04.05.2016 20:08

      Маловероятно, что создается RAID или т.п. Но, данные всё равно фиг достанешь, т.к.:
      «The platform randomly generates an encryption key for each adopted device, and that key is stored on the internal storage of the Android device.»


      1. Areso
        04.05.2016 20:10

        Т.е. не то что на повторное использование кэша программ/игр можно не расчитывать, но даже фотки/видео потом не вытащить с такой флешки?


    1. maximfilin
      04.05.2016 20:33

      Если устройство умерло, а карта памяти осталась, данные утеряны;
      Если карту просто извлечь система сообразит и будет работать с тем что осталось как надо (без проблем);


  1. Lsh
    04.05.2016 20:03

    Всё равно костыли «Apps can be placed on adopted storage media only when the developer has indicated support through the android:installLocation attribute.».
    https://source.android.com/devices/storage/adoptable.html


    1. maximfilin
      04.05.2016 20:39

      50/50 тут использование параметра влияет только на умолчания, а так система сама решит куда (где больше памяти, чего я не увидел в реальной жизни), но просто переместить руками его можно всегда.


  1. vstr
    04.05.2016 21:07

    Товарищи из Мвидео, у вас по ссылке из 9 абзаца доступна карта только на 128 гигов. На 256 гигабайт карт я не нашёл. Исправьте пожалуйста текст или ссылку.


  1. Giriia
    04.05.2016 21:40

    Честно говоря я не понимаю, накой это нужно. Взяли, и довольно удобную фичу превратили в жуков на костылях.

    Раньше, я к примеру мог взять карту памяти с телефона и по быстрому перекинуть в комп через картридер, минуя дата кабели и установку всяких драйверов.
    Или к примеру мог подключить телефон как флешку и это было удобно, ибо пропадала надобность таскать с собой кучи флешек.

    А теперь, под лозунгом борьбы «за приватность и скорость», вводят какую сомнительную фигню.
    Не, серьёзно. Кто хранит действительно важные данные в телефоне? Я понимаю борьбу за приватность на настольных компьютерах или ноутбуках, там, где действительно работают с чем то, что лучше не разглашать. Но на телефоне? Что там шифровать? Фоточки с отпуска «не для всех»? Для этого вполне хватит и обычного пароля(что кстати вполне поддерживается для microsd карт, ещё со времён j2me платформы).

    А скорость работы… Ну так выведите предупреждение, мол «ваша карта может нарушать работу системы» и всё. Может быть я намеренно купил такую карту из-за отсутствия денег или душащей жабы.
    Как же мне припекает от этого, когда отказываются от реально удобных интерфейсов и фич в пользу каких то сомнительных преимуществ.


    1. Lsh
      04.05.2016 22:00

      Не, проблемы и костыли были с самого начала.

      На заре андроида, например, было внутренней памяти мало, а карточка большая. Как перенести приложения? Костыли!
      Потом некоторые вендоры стали использовать фат раздел на внутренней памяти как карточку.
      Вставил карточку, а приложения всё равно валят весь хлам на внутренний раздел. Как исправить? Костыли!
      А потом еще лучше! Давайте складывать всё на /data! С одной стороны идея, может быть, и неплохая, т.к. место используется более эффективно.
      Но выбора как всегда не завезли. Поэтому, костыли, костыли, костыли!
      А иногда такие, мать их, костылищи! Паяльник им в зад!
      Это вот как надо извращаться, чтобы от вставленной в Samsung Galaxy карточки польза появилась
      Просто система изначально ущербная.


      1. maximfilin
        04.05.2016 22:12

        Самс еще раньше любил бить встроенную ПЗУ на целый зоопарк разделов.


        1. Lsh
          04.05.2016 22:13

          В смысле, больше чем стандартных было? А что это давало?


          1. maximfilin
            04.05.2016 22:15

            Да, там было еще 2-3 лишних, они так делили память на контент пользователя (а иногда и два), предустановки и их «неубиваемость».


      1. Alexey2005
        05.05.2016 00:40

        Android первых версий вообще производил впечатление наколеночной поделки, слепленной студентами во время Google Summer of Code. Только к 5.0 там начали вырисовываться контуры полноценной ОС, но до выработки нормальной архитектуры и избавления от костылей нас ещё лет 5-7 отделяет, не меньше.


        1. fuser
          06.05.2016 14:00

          Symbian OS еще лет 5 назад спрашивала: куда устанавливать jar — во внутр. память или на карточку.


      1. Giriia
        05.05.2016 11:42

        Я примерно так же извращался, когда у меня появился мой первый смартфон(samsung galaxy ace). После явы и китайфонов(тех самых, с .mrp и телевизором), это было вполне нормально и не вызывало какого-то удивления. И даже наоборот, это научило меня лучше понимать что происходит в ОС и как починить ту или иную ошибку.

        В принципе да, костылей там дофига, но уже давно найдены способы как их обойти и превратить в достоинства. Ну, или хотя бы сделать так, что б эти костыли не мешали работе девайса.

        А теперь сделали какую-то не совсем понятную фичу, которая сводит на нет все достоинства реализации работы с картой памяти, и вводит кучу ограничений и недостатков(как то, невозможность скопировать данные в случае смерти телефона).


  1. CyberAndrew
    04.05.2016 21:48

    Что мешает создателем системы и приложений Android сделать все как в Windows, т.е. чтобы можно было ставить любое приложение на любой диск?


    1. Lsh
      04.05.2016 22:01

      Вы про настольный Windows? Я просто мобильным не пользовался. Кстати, интересно как там с этими проблемами?


      1. maximfilin
        04.05.2016 22:05

        на WM просто был выбор «куда» при установке, там и создавалась папка и на стол/пуск кидался ярлык.


        1. Lsh
          04.05.2016 22:08

          А как с этим на современных мобильных виндах? Под что там можно карточку занять?


          1. maximfilin
            04.05.2016 22:11

            Там сделано отчасти как на MTK — опция default write disc + возможность переместить приложения руками. Но вот кейсы с картой в другом устройстве и шифрованием не смотрел.


            1. Lsh
              04.05.2016 22:14

              Кстати, интересно, почему, когда говорят про возможность смены накопителей местами, говорят про МТК? Это что, какая-то аппаратная фича?


              1. maximfilin
                04.05.2016 22:16

                Они просто первые вкрутили это в BSP и вмести с оным выдавали всем от noname до Huawei, и по факту оно неплохо работало.


    1. peacemakerv
      04.05.2016 22:05

      Разумный контроль над бардаком (разбрасываением файлов).


  1. peacemakerv
    04.05.2016 22:04

    del


  1. Lsh
    04.05.2016 22:12

    Вот если бы они сделали lvm, было бы прикольно.
    (Да, я осознаю риски, связанные с отвалом карточки)


  1. unwrecker
    04.05.2016 23:01

    Я из шестых версий Андроида видел только CM13 — там с картой работа была как обычно, отдельным разделом.

    А вот объединять в один массив несъёмное и съёмное устройство, быстрое и медленное — это весьма странно по-моему.
    Лучше б поддержку ext4fs для карт сделали.


    1. maximfilin
      04.05.2016 23:25

      В MOD просто добавили не все на текущем этапе.


      1. about
        05.05.2016 19:39

        @maximfilin подскажите, пожалуйста, при использовании Adoptable storage, смогу ли я без проблем пользоваться TWRP на своём устройстве (не возникает ли проблем с запись на зашифрованную флешку)? И что происходит с внутренней памятью после объединения? Если на моём Swift 16 ГБ внутренней памяти + 32 от SD, то после объединение я буду иметь возможность юзать эти два объёма в виде одного массива для хранения моих данных?


        1. maximfilin
          05.05.2016 22:06

          вот с TWRP вопрос, но скорее всего для банальных вещей да — ибо бэкап он и есть бэкап, а zip со всяким ставятся в system, общий объем будет 16+32 просто. Логически он будет один, да.


  1. LAG_LAGbI4
    05.05.2016 15:13

    Я вот не понимаю, что мешает сделать такую же систему, как в винде. Диск С, диск Д, сам выбираешь куда что устанавливать.


  1. denticulus
    09.05.2016 20:37

    Когда было установлено 20+ приложений на карту, ресурса флеша хватало на 1-2 месяца. При этом тормоза были страшные. Transcend Premium UHS-I 32 и 64 Гб. Три карты поменял, забил, коплю на новый телефон.