Hago esto por la asombrosa aplicación del terminal Termux que para razones que no entiendo tampoco solicita este permiso.
El procedimiento es bastante complicado, ya que implica copiar y editar un archivo xml manualmente, y corre el riesgo de impedir que el sistema arranque. Además, tendrás que volver a hacerlo cada vez que la aplicación se actualice. Supongo que si usas un editor que tenga acceso Root no tendrías que preocuparte por la parte de la copia. Hmm. Tal vez debería hacerlo así también, en realidad.
Los siguientes son los pasos que utilizo para arreglar las permanentes de Termux. Tendrás que adaptarlos para que funcionen con tu aplicación. Probablemente deberían ser los mismos excepto por el nombre completo de la aplicación.
Si no estás familiarizado con XML deberías dudar mucho en intentar esto ya que probablemente harás que tu teléfono no pueda arrancar si cometes un error.
- Asegúrate de que no estás actualizando aplicaciones (desactiva la actualización automática) o haciendo cualquier otra cosa que pueda provocar modificaciones en el archivo xml de los paquetes mientras lo estás editando.
- Inicie una sesión en el emulador de terminal.
su -
en esta sesión para otorgarte permisos de Root.
cd /data/system
ls -l packages.xml
- anotar los permisos y la propiedad de
packages.xml
. Serán esenciales más adelante.
- Cuando hice esto hace diez minutos, estos valores todavía estaban
-rw-rw---- system:system
como lo han sido durante todos los años que he estado haciendo esto. Podría ser diferente en un tipo diferente de teléfono.
cp packages.xml packages.xml.orig
para hacer una copia de seguridad de este archivo de sistema tan importante
cp packages.xml /storage/emulated/0/tmp
o alguna otra ubicación, dependiendo de cómo esté distribuido el sistema de archivos de tu teléfono. Si ese directorio no existe, simplemente créalo.
Ahora edita el archivo de la manera que prefieras (yo uso vim
en Termux
pero utilice cualquier editor de texto) para realizar el siguiente cambio:
- Encuentre la segunda línea que contiene
/name="com.termux"/
. Debería ser un shared-user
(es decir, una línea que comienza con <shared-user
)
- En el caso de su aplicación, esto podría terminar siendo una línea diferente que contenga el nombre completo de su aplicación, dependiendo de si su aplicación tiene una entrada en la sección anterior de este archivo. También es posible que no haya una entrada de permisos para tu aplicación, en cuyo caso tendrás que hacer una desde cero, supongo. Creo que esto probablemente estaría bien, pero realmente no lo sé; podrías causar problemas en el sistema al hacerlo. Caveat emptor. Pero sí, si encuentras este nodo para Termux y lo copias y pegas la copia debajo de la entrada de Termux, probablemente funcione.
- Copiar el último
<item ... />
y pegarlo justo debajo.
- Edite la línea pegada para cambiar el permiso (actualmente el mío tiene
WAKE_LOCK
) para leer WRITE_MEDIA_STORAGE
.
- por lo que el último nodo dentro del
<perms>
El nodo debe ser
<item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />
Guarde el archivo y salga de su editor y vuelva a su ventana de Terminal (donde todavía tiene una sesión Root ejecutándose en /data/system
).
cp /storage/emulated/0/tmp/packages.xml .
- Utilice
cp
aquí y NO mv
como mv
no establece los permisos correctamente.
- VERIFICAR que los permisos sean los mismos que cuando se inició. Esto es MUY IMPORTANTE porque el teléfono no arrancará si los permisos están mal. Esto lo hice una vez y logré rescatarlo de alguna manera, se me olvida cómo.
En este punto deberías estar bien para reiniciar. Probablemente sea prudente hacer un diff packages.xml packages.xml.orig1
o lo que sea para verificar que has hecho el cambio correctamente.
Después de reiniciar la aplicación debería tener acceso de escritura a la tarjeta SD externa. Buena suerte.
Si alguien conoce una forma más limpia de hacer esto, por favor, hágamelo saber. Esto es torpe AF y conlleva no poco riesgo de tener que pasar otra hora después de la fijación de mi teléfono.
0 votos
Esto parece ser un problema XY. Tu problema es X y crees que Y es la solución, por lo que toda la pregunta parece referirse a hacer Y en lugar de resolver X. // Si tu aplicación se cuelga, ponte en contacto con el desarrollador y pídele ayuda. Ten en cuenta que no puedes conceder un permiso que no ha sido solicitado (en realidad puedes pero no conseguirías nada) por una aplicación.
0 votos
Aprecio su punto de vista. Sin embargo, "lograría" algo en el sentido de que la aplicación es perfectamente capaz de escribir en estas carpetas y, de hecho, está intentando hacerlo. Android se lo impide.
0 votos
Otros permisos se pueden conceder sin ser solicitados - por ejemplo, el uso de las aplicaciones anteriores en versiones anteriores de Android (cuando se rootea), o la concesión de permisos en la pantalla de configuración actual. El problema es que este permiso no aparece en la lista.
0 votos
@ShankarG Los permisos a los que solicitará acceso una aplicación cuando se está instalando se definen en su
androidmanifest.xml
que se almacena en la carpetabase.apk
que se encuentra en/data/app/<app's package name>
0 votos
No estoy seguro de si el enlace que proporcionaste es para Android, pero si lo que estás usando es Wrapper de syncthing para Android entonces ya está solicitando permiso de escritura en almacenamiento externo
0 votos
Y creo que el informe de error correspondiente en GitHub