Código Android 3.2+ (inadvertidamente?) Impedindo o acesso de gravação ao armazenamento externo

Parece que o Google tem um bug em seu código AOSP que foi introduzido no Android 3.2, que afeta a forma como o sistema operacional lida com o armazenamento USB e pode impedir o acesso de gravação em cartões SD e pendrives. Desenvolvedor reconhecido XDA Elite, moderador sênior e Redator de notíciasFogo em cadeia resume a questão em seu postagem no blog:

No passado, um aplicativo solicitava o "WRITE_EXTERNAL_STORAGE"permissão, que concederia acesso de gravação a todos armazenamentos externos (usuário/grupo "sdcard_rw"). Aparentemente, isso foi alterado para conceder apenas acesso de gravação ao primário armazenamento externo. Uma segunda permissão foi introduzida chamada "WRITE_MEDIA_STORAGE", o que concederia acesso aos demais armazenamentos externos (usuário/grupo "mídia_rw").

O problema é que essa permissão não será concedida a terceiros; normalmente, apenas aplicativos do sistema e aplicativos fornecidos pelo fabricante do dispositivo receberão essa permissão. Há exceções, aparentemente em alguns dispositivos aplicativos de terceiros receberão essa permissão, mas de acordo com as fontes do AOSP, certamente não deveriam fazê-lo.

Enquanto Chainfire investigava o problema, ele encontrou um código no /system/vold/Volume.cpp que afirma explicitamente:

 if (armazenamento primário) {

//Caso especial o cartão SD primário.

// Para isso concedemos acesso de escrita ao grupo SDCARD_RW.

gid=AID_SDCARD_RW;

} outro {

// Para armazenamento externo secundário, mantemos as coisas trancadas.

gid=AID_MEDIA_RW;

}

Em muitos dispositivos, o flash interno é considerado o “cartão SD principal”. O real O cartão SD torna-se então o armazenamento externo secundário e é bloqueado e protegido pelo inatingível "WRITE_MEDIA_STORAGE"permissão.

Chainfire enviou sua pergunta ao Horário comercial dos desenvolvedores Android equipe, e eles acabaram discutindo isso em seus ponto de encontro ao vivo em 11 de abril. Infelizmente, os engenheiros do Google presentes no hangout não foram capazes de fornecer respostas reais, pois esta é uma questão complicada e a questão só foi levantada uma hora antes do programa ir ao ar. No entanto, eles prometeram chegar ao fundo desta questão e voltar ao Chainfire (e a nós) mais tarde.

Ainda de acordo com Chainfire, o problema também está presente nas compilações ICS para o SGS2, embora a Samsung "contornei isso usando um hack de permissão muito feio":

O que você vê aqui é Samsung pegando carona a permissão WRITE_MEDIA_STORAGE para a permissão WRITE_EXTERNAL_STORAGE, para que os aplicativos não tenham o problema descrito.

Ainda não se sabe se o Google pretendia ou não que os cartões SD e pendrives conectados fossem limitados para serem somente leitura para aplicativos de terceiros. No entanto, isso dá origem a um pensamento perturbador: e se o código e as notas que o acompanham forem os primeiros do Google? estágios de implementação de algum tipo de proteção contra gravação para armazenamento externo e, assim, limitando ainda mais nosso celular liberdade? Só podemos esperar que este seja um bug genuíno, já que a liberdade é uma das razões pelas quais todos evitamos o Lado escuro.

[Muito obrigado a Chainfire pelo aviso e ajuda!]