2010-10-21 8 views
5

Estoy planeando una aplicación donde necesito editar un archivo del sistema.Solicitar derechos de superusuario para editar el archivo

Solo puedo editar ese archivo con derechos de root. Tengo un teléfono dev enraizado con Superuser.apk instalado. Otras aplicaciones que requieren una raíz no solicitan acceso a la raíz el primer inicio. Quiero hacer lo mismo, pero no puedo encontrar ninguna pista sobre cómo solicitar derechos de superusuario para mi aplicación.

Encontré algo sobre un intento android.intent.action.superuser pero cuando trato de iniciar una actividad para esa acción intencionada obtengo un ActivityNotFoundException.

¿Alguna idea?

Respuesta

2

La intención en realidad no le otorga derechos de superusuario, solo interactúa con el mecanismo de concesión de permisos de la aplicación de superusuario.

La verdadera clave es entender que el Linux subyacente de Android no admite la escalada de los privilegios de un usuario. En cambio, admite (/ se ha modificado para admitir) un mecanismo para que un usuario solicite ejecutar _su_otro_proceso_ como superusuario.

Lo que esto significa es que la tarea de derechos de root real deberá ser ejecutada por un ejecutable diferente, probablemente una 'línea de comando' nativa que se iniciará bajo delegación mediante el comando su o cualquiera que sea su particular versión de Android modificada soportes. Será más fácil si puede averiguar cómo hacer la tarea usando uno de los programas de línea de comando incorporados en la caja de herramientas; por ejemplo, escriba el archivo en otro lugar y luego muéstrelo (y quizás cuélelo) al lugar que desee. También tenga en cuenta que/system normalmente está montado como de solo lectura, y que debería volver a montarlo antes de poder escribir allí.

Piensa bien en todo lo que trates de hacer como superusuario ... es fácil hacer un desastre o dejar atrás problemas. Si está implementando la aplicación a otros, también piense en los agujeros de seguridad que creará.

+0

gracias por la pista. Actualmente estoy tratando de leer un archivo con ese comando "cat". "su -c 'cat '" funciona bien desde adb shell. Desafortunadamente, el mismo comando no devuelve nada cuando se ejecuta desde mi aplicación (Runtime.getRuntime(). exec ("su -c 'cat '");). – Goddchen

+0

Tienes que pensar un poco sobre lo que debes esperar que haga, no va a 'devolver nada' útil. Si engancha el stdout de cómo lo lance, es posible que obtenga algo (consulte la fuente de la aplicación del terminal). Pruebe un caso sin privilegios sin la su para simplificar, o use algo que sea archivo a archivo en lugar de depender de stdout o stdin. –

+0

ahora está trabajando: tuve que ejecutar ("su sh") para abrir un shell. luego crea un dataoutputstream y escribe comandos en ese shell. – Goddchen

0

Tal vez porque debe elegir "android.intent.action.superuser" en su lugar? Supongo que este podría ser el problema. Encontrado el origen de esto en: http://forum.xda-developers.com/showpost.php?p=2954887&postcount=7

+0

perdón por el error tipográfico, por supuesto, quise decir android.intent.action.superuser. y ese es exactamente el ejemplo al que me refiero. – Goddchen

+0

Supongo que tiene que instalar una aplicación de superusuario diferente, tal vez la que se explica al comienzo del hilo: http://forum.xda-developers.com/showthread.php?p=2954887 – mreichelt

+0

me acabo de enterar que Runtime.getRuntime(). exec ("su"); activa el cuadro de diálogo de superusuario derecha. pero ¿cómo puedo leer y escribir un archivo de esta manera? – Goddchen

Cuestiones relacionadas