2012-09-27 29 views
6

¿Hay alguna manera de ejecutar la aplicación del sistema Android sin permiso de root? Puedo ejecutar aplicación del sistema a través de adb tales como:¿Cómo ejecutar la aplicación del sistema Android sin root?

adb shell /system/bin/screencap -p /sdcard/screen.png

En mi propia aplicación, quiero correr un comando shell así sin comando "su". ¿Hay alguna manera? ¿Cómo evita Android que las aplicaciones de los usuarios ejecuten la aplicación del sistema?

Respuesta

7

Usted debe ser capaz de ejecutar este comando en el código de Java:

Runtime.getRuntime().exec("screencap -p /sdcard/screen.png"); 

Hay algunos comandos shell puede ejecutar sin tener raíz. Entonces no necesitas ejecutar "su". No estoy seguro de si puedes ejecutar el screencap. Ciertamente necesita permiso para escribir en SD_CARD en su aplicación.

android.permission.WRITE_EXTERNAL_STORAGE 

¿Pero por qué no usa la API de Android para hacer su captura de pantalla? Para obtener más información, lea esta publicación en stackoverflow: How to programmatically take a screenshot in Android?

El modelo de seguridad de androides se basa en identificadores de usuario, como Linux. Cada aplicación tiene su propia identificación de usuario. Por lo tanto, su aplicación tiene un ID de usuario como 1001. Si su usuario puede ejecutar el comando, puede recibir un error.

EDIT:
Es necesario root para realizar capturas de pantalla o ser una aplicación del sistema. Hay un permiso READ_FRAME_BUFFER pero solo puede obtenerlo cuando es una aplicación del sistema. Es un problema de seguridad cuando una aplicación puede tomar capturas de pantalla de tu dispositivo.

He encontrado esta API http://code.google.com/p/android-screenshot-library/ que promete tomar capturas de pantalla sin root. No lo probé. La biblioteca inicia un servicio nativo que luego toma las capturas de pantalla por usted. Pero debe ejecutar el servicio cada vez que se enciende el teléfono. Entonces obtiene los privilegios del sistema. Eso no es muy cómodo ...

Conclusión: No hay buena manera de tomar capturas de pantalla sin raíz del código ...

+0

AFAIK, sin API para capturar la captura de pantalla. Por lo tanto, trato de ejecutar screencap a través del comando de shell. Pero no puedo ejecutarlo sin el permiso de root. –

+0

Parece que sí. No hay API y necesita root para ejecutar screencap. Encontré esta biblioteca http://code.google.com/p/android-screenshot-library/ con esto, debería poder tomar capturas de pantalla sin root. Instala un servicio nativo, iniciado en el arranque a través del shell adb. Entonces es capaz de tomar capturas de pantalla. – mcia

+0

Lo he probado antes. No funciona en Android 3.xy Android 4.x ya que el framebuffer se rompió allí. La forma aceptable ahora es llamar call screencap mediante el comando de shell (bajo el permiso de root) –

2

Is there any way to run android system app without root permission?

que ser NO, pero algunas veces, algunas de las funciones que no son para uso público todavía se puede utilizar. He visto ejemplos usando el reflejo de Java.

I can execute system app via adb such as: ...

In my own application, I wanna run a shell command like that without "su" command. Is there any way? How does android prevent user apps to execute system app?

Creo que, no.

la cosa es adb shell y aplicación de usuario tienen diferentes niveles de seguridad en función del usuario y los ID de grupo (de UID y GID).

Más información: http://android-dls.com/wiki/index.php?title=Android_UIDs_and_GIDs

Además, hay limitaciones a través de permisos de aplicaciones y hiden & internos clases, procedimientos, etc., que hacen para uso interno.

P.S .: Acerca de las capturas de pantalla. En el mercado de Android (google play) hay algunas aplicaciones que proporcionan capturas de pantalla sin acceso ROOT.Entonces, es posible. Aunque, desde las capturas de pantalla de Android 4.0 están disponibles "desde la caja".

+0

¿Desea detallar qué aplicaciones pueden hacer esto? Podríamos descompilarlos y descubrir cómo funciona. –

Cuestiones relacionadas