Red de conocimiento informático - Material del sitio web - Cómo implementar una aplicación de depuración de modo adicional en Android Studio

Cómo implementar una aplicación de depuración de modo adicional en Android Studio

En el proceso de aprendizaje, personalmente experimenté algo así: el equipo del proyecto tuvo que hacer un proyecto complejo, que se dividió en un proyecto SDK y un proyecto de demostración, que incluía una capa Java y una capa JNI

Entonces, de nuevo, el aar se genera en el proyecto SDK, se copia en el proyecto de demostración y se compila en el apk final.

Depurar la capa Java es muy sencillo. Puede adjuntar la aplicación al proyecto SDK en Android Studio en tiempo de ejecución; si la adjunta directamente a la demostración, parte del código fuente en el SDK no será visible y solo podrá verlo a través del archivo jar en el directorio del proyecto.

La capa adicional no es factible de forma predeterminada, porque la depuración de la capa jni comienza a depurar. Echemos un vistazo al proceso de Android Studio que maneja varios comportamientos de depuración:

Depuración de la capa Java: <. /p>

adb push 1.apk /data/local/tmp/1.apk

am start -D -n com.example.test/.MainActivity

android studio espera a que el estado de la aplicación sea normal

Establecer puntos de interrupción

Realizar conexión remota y utilizar un protocolo de depuración de Java adicional

Depuración de capa JNI:

adb push 1.apk /data/local/tmp/1.apk

am start -D -n com.example.test/.MainActivity

android studio espera la aplicación el estado es normal

adb push lldb_server

./lldb_server............Configurar el servidor de depuración de lldb

lldbfrontend .exe ......................Conectarse al servidor de depuración lldb

Enviar comandos de depuración adicionales a lldb_server

Establecer java/ puntos de interrupción de la capa c

Realizar conexión remota, usar protocolo de depuración de Java adicional

Depuración adicional:

Establecer puntos de interrupción

Realizar conexión remota, usar protocolo de depuración adicional de Java

1. Durante el proceso de investigación, se encontró que dos so estaban compilados en la capa jni. El so firmado estaba en el directorio obj/local y el so estaba compilado en el apk. no se pudo firmar En este momento, use gdb para depurar. El archivo bar está configurado para firmar y se puede depurar. Al continuar con la investigación, descubrimos que los bytes anteriores de firmado y sin firmar son exactamente iguales.

2. Cuando Android Studio crea un proyecto jni, necesita instalar lldb automáticamente, modificar el script gradle, build.gradle

depurar {

jniDebuggable true.

}

3. El botón adjuntar de Android Studio solo usa configuración remota en Configuración de ejecución/depuración

Del proceso anterior, se puede ver que adjuntar no activa los pasos de depuración de la capa jni, y después de escribir el paso de depuración de la capa jni, la parte que cargó previamente el apk debe eliminarse, por lo que es necesario modificar android-ndk.jar

El efecto fue finalmente logrado.

Algunas clases importantes:

IDevice: describe el dispositivo móvil

Cliente: describe el proceso del paquete de aplicaciones

AndroidNativeDebugProcess controla la depuración jni y la comunicación lldb_server

AndroidNativeDeubgRunner controla la parte del depurador

AndroidNativeRunConfiguration configura la opción Natvie-Debug en la configuración de ejecución/depuración, y agregué la lista de procesos de la aplicación del usuario para facilitar la depuración

Control de la interfaz de configuración de AndroidNativeRunConfigurationEditor

Capa jni AndroidLLDBDebuggerContext, utilizada para construir el depurador lldb

Implementación de funciones básicas de depuración de AndroidLLDBDriver