Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: Cómo restringir una aplicación con ADB shell am start

Necesito ayuda para extender las aplicaciones de Android en el emulador de SDK.

Aquí está mi configuración:

Tengo un emulador del androide SDK que funciona con la cáscara del ADB de la API 4.03 ADB conectada al emulador.

Puedo instalar un APK usando el ADB install filename.apk

Soy capaz de ejecutar la aplicación utilizando el shell ADB am start -a android.intent.action.Main -n com.akproduction.notepad/com.akproduction.notepad.NoteList

Trato de strace utilizando (strap de ADB) strace am start -a android.intent.action.Main -n com.akproduction.notepad/com.akproduction.notepad.NoteList pero no tengo nada!

¿Cómo rastrea el comportamiento en tiempo de ejecución de las aplicaciones de Android y su instalación?

(PS La aplicación de prueba se encuentra aquí .

5 Solutions collect form web for “Android: Cómo restringir una aplicación con ADB shell am start”

El comando "am start" no ejecuta directamente su aplicación; Simplemente le dice a Android que haga lo que sea necesario para, en su ejemplo, iniciar una actividad específica.

El comando strace se utiliza normalmente como en el strace commandname command args y se inicia commandname – fácil, pero en este caso de uso de Android, no es útil. Sin embargo, strace tiene una opción -p que es útil para ti: strace -p <process id> te permitirá iniciar el rastreo del proceso con el id especificado.

Si escribe ps en su sistema Android, puede localizar el proceso con el nombre com.akproduction.notepad (probablemente, por defecto los procesos tienen el nombre de su paquete de Android, pero es posible cambiarlo en el manifiesto). Entonces usted puede comenzar stracing él, dondequiera que suceda ser.

Si necesita captar las cosas temprano en el proceso, tendrá que modificar el código para que demore hasta que esté listo para localizarlo, o al menos tendrá que ejecutar el proceso antes de iniciar el proceso. actividad. La segunda opción suele ser tan fácil como iniciar la actividad, luego usar el botón de retroceso, luego preparar la traza, iniciar la actividad de nuevo, pero esto siempre es específico del código de la aplicación.

En realidad, las aplicaciones de Android se inician al bifurcar el proceso de zygote, de modo que puede rastrear la inicialización de la aplicación rastreando el proceso zygote y siguiendo los procesos secundarios ('-f'):

 setenforce 0 # In Android 4.3 and later, if SELinux is enabled, strace will fail with "strace: wait: Permission denied" set `ps | grep zygote` ; strace -p $2 -f -tt -T -s 500 -o /sdcard/strace.txt 

Este es un corte de un solo forro que usé hoy para resolver este problema. Suponiendo que el programa tenga algún nombre conocido, intente adjuntar al proceso tan pronto como aparezca. En este ejemplo, estoy interesado en todas las llamadas para abrir.

 while true; do while ! ps | grep -q -i MyProgram; do :; done; ps | grep -i MyProgram | while read abc; do strace -e open -f -p $b; done; done 

He aquí un one-liner que agarra la identificación del proceso y las tuberías a strace derecho después de que am lanza la aplicación. No obtendrá las primeras instrucciones ejecutadas, pero se inicia lo suficientemente temprano para mis necesidades.

am start -n com.packagename.here\.ActivityName && set `ps | grep com.packagename.here` && strace -p $2

Recomendaría antes de comenzar su strace de la aplicación en el proceso del zygote y seguir los forks. El proceso Zygote es el proceso principal desde el que cada nuevo proceso se basa en Android, incluida la aplicación. A continuación, es posible que desee filtrar el registro basado en PID que le interesa. Ejemplo:

Zygote ps

Obtener el PID del cigoto, entonces

Strace -f -p <zygote_PID>

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.