Me gustaría otorgar a la aplicación Syncthing acceso de escritura al almacenamiento externo en Marshmallow. La aplicación no lo solicita explícitamente (a diferencia de otras aplicaciones que parecen usar Storage Access Framework para hacerlo).
En la pantalla de permisos de la aplicación, no aparece ningún permiso para el almacenamiento externo, solo para el "almacenamiento" (que parece significar almacenamiento interno). Por lo tanto, no parece haber ninguna forma directa de otorgar este permiso.
Mi teléfono está rooteado y podría ejecutar Syncthing como root, pero esta opción crea muchos problemas y, a veces, hace que la aplicación se cuelgue indefinidamente.
¿Hay alguna otra forma de evitar este problema?
Puede agregar manualmente el permiso relacionado para escribir en el almacenamiento externo, AndroidManifest.xml
pero no funcionará.
Me encontré en una situación similar a la suya y también intenté descompilar la aplicación, agregar la solicitud de permiso WRITE_EXTERNAL_STORAGE al AndroidManifest.xml y volver a compilar el paquete, pero no funcionó.
Desde Lollipop, la nueva política de Android con respecto a la SD externa requiere que cualquier aplicación que necesite acceso a la mencionada anteriormente use la interfaz de DocumentProvider. A menos que prefiera trabajar en Smali, no hay forma de implementarlo sin el código fuente de Java. No basta con editar el Manifiesto.
Entonces, no. No hay forma de agregar manualmente un permiso de WRITE_EXTERNAL_STORAGE que funcione , ni en Lollipop ni en Marshmallow. Su única opción es pedirle al desarrollador que lo implemente.
Hago esto para la INCREÍBLE aplicación de terminal Termux que, por razones que no entiendo, tampoco solicita este permiso.
El procedimiento es bastante complicado, implica copiar y editar un archivo xml manualmente y lo pone en riesgo de evitar que su sistema arranque. También deberá volver a hacerlo cada vez que se actualice la aplicación. Supongo que si usa un editor que tiene acceso de root, no tendría que preocuparse por la parte de copia. Mmm. Tal vez debería hacerlo de esa manera también, en realidad.
Los siguientes son los pasos que utilizo para arreglar las permanentes de Termux. Tendrá que adaptarlos para que funcionen para su aplicación. Probablemente deberían ser iguales excepto por el nombre completo de la aplicación.
Si no está familiarizado con XML, debe dudar mucho en probar esto, ya que probablemente hará que su teléfono no se pueda iniciar si comete un error.
su -
en esta sesión para darse permisos de root.cd /data/system
ls -l packages.xml
packages.xml
. Serán imprescindibles más adelante.-rw-rw---- system:system
siendo los mismos durante los años que llevo haciendo esto. Puede 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 importantecp packages.xml /storage/emulated/0/tmp
, o alguna otra ubicación dependiendo de cómo esté dispuesto el sistema de archivos de su teléfono. Si ese directorio no existe, simplemente créelo.Ahora edite el archivo de la forma que prefiera (yo uso vim
under Termux
, pero uso cualquier editor de texto) para realizar el siguiente cambio:
/name="com.termux"/
. Debería ser una shared-user
etiqueta (es decir, una línea que comience con <shared-user
)
<item ... />
línea y péguela justo debajo.WAKE_LOCK
) para leer WRITE_MEDIA_STORAGE
.<perms>
nodo debe ser
<item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />
Guarde el archivo y salga de su editor y regrese a su ventana de Terminal (donde todavía tiene una sesión raíz ejecutándose /data/system
).
cp /storage/emulated/0/tmp/packages.xml .
cp
aquí y NO mv
ya que mv
no establece los permisos correctamente.En este punto deberías estar listo para reiniciar. Probablemente sea prudente hacer una diff packages.xml packages.xml.orig1
o lo que sea para verificar que realizó el cambio correctamente.
Después de reiniciar, su 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, ¡hágamelo saber! Este es un AF torpe y conlleva un riesgo no pequeño de tener que pasar otra hora después de arreglar mi teléfono.
Señor del Fuego
ShankarG
ShankarG
SarpSTA
androidmanifest.xml
archivo que se almacena en elbase.apk
archivo que se puede encontrar en/data/app/<app's package name>
andres t
andres t