Код Android 3.2+ (случайно?), запрещающий доступ на запись во внешнее хранилище

click fraud protection

Похоже, что у Google есть ошибка в коде AOSP, появившаяся в Android 3.2, которая влияет на то, как ОС обрабатывает USB-накопитель, и может препятствовать доступу для записи на SD-карты и USB-накопители. Признанный разработчик XDA Elite, старший модератор и Автор новостейЦепной огонь резюмирует проблему в своем Сообщение блога:

Раньше приложение запрашивало «ЗАПИСАТЬ_EXTERNAL_STORAGE" разрешение, которое предоставит доступ на запись к все внешние хранилища (пользователь/группа "sdcard_rw"). Очевидно, это было изменено, чтобы предоставить доступ только для записи в начальный внешнее хранилище. Было введено второе разрешение под названием «WRITE_MEDIA_STORAGE", что предоставит доступ к другим внешним хранилищам (пользователю/группе "media_rw").

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

Исследуя проблему, Chainfire наткнулся на код в /system/vold/Volume.cpp в котором прямо указано:

 если (primaryStorage) {

// Особый случай основная SD-карта.

// Для этого мы предоставляем доступ на запись группе SDCARD_RW.

гид = AID_SDCARD_RW;

} еще {

// Что касается вторичного внешнего хранилища, мы держим все под замком.

Гид = ​​AID_MEDIA_RW;

}

На многих устройствах внутренняя флэш-память считается «основной SD-картой». настоящий SD-карта становится дополнительным внешним хранилищем и блокируется, защищенная недостижимым "WRITE_MEDIA_STORAGE" разрешение.

Чейнфайр передал свой вопрос Часы работы разработчиков Android команде, и в итоге они обсудили это в своем живая тусовка 11 апреля. К сожалению, инженеры Google, присутствовавшие на видеовстрече, не смогли дать реальных ответов, поскольку это сложный вопрос, и вопрос был поднят всего за час до начала шоу. Однако они пообещали разобраться в этой проблеме и вернуться к Chainfire (и нам) позже.

Также, по словам Chainfire, проблема действительно присутствует и в сборках ICS для SGS2, хотя Samsung "обошёл это, используя очень уродливый хак с разрешениями":

Здесь вы видите Samsung контрейлерные перевозки разрешение WRITE_MEDIA_STORAGE на разрешение WRITE_EXTERNAL_STORAGE, чтобы в приложениях не возникала описанная проблема.

Еще неизвестно, намерен ли Google сделать подключенные SD-карты и USB-накопители доступными только для чтения для сторонних приложений. Однако это порождает тревожную мысль: а что, если код и сопроводительные примечания являются первым продуктом Google? этапы реализации какой-либо защиты от записи для внешнего хранилища и, таким образом, еще больше ограничивают наши мобильные устройства. свобода? Мы можем только надеяться, что это настоящая ошибка, поскольку свобода — одна из причин, по которой мы все избегаем Темная сторона.

[Огромное спасибо Chainfire за внимание и помощь!]