Cómo depurar y rastrear el código fuente del marco de trabajo de Android
Este artículo presenta cómo importar el código fuente de Android (incluido el código de marco y de aplicación) en Eclipse y luego rastrear/depurar el código Java de Android a través del simulador o la máquina real, que es diferente de las aplicaciones puras generales. Basado en el desarrollo del SDK de Android, aquí puede rastrear/depurar el código en el Framework.
I.Preparación
Asegúrese de que la máquina tenga instalado y configurado el siguiente entorno de software: JDK/Eclipse/Android SDK/ADT
Es decir, la máquina. Se ha instalado el entorno necesario para el desarrollo de aplicaciones Eclipse para Android. Si aún no lo ha configurado, vaya a Creación de un entorno de desarrollo de aplicaciones de Android para Windows: Eclipse/Android/ADT.
Además, para poder rastrear y depurar el código fuente de Android, también es necesario tener el código fuente de Android y el entorno de compilación del código fuente, que puede ser:
El entorno de la máquina virtual se instala en la máquina virtual Linux y compila el código fuente de Android en Linux. En este entorno, si desea depurar en Eclipse en el host, también necesita compartir la ruta del código fuente de Android para que el host pueda acceder a él;
Tener un entorno de red independiente que pueda compilar Android en el cliente accede al servidor en la máquina cliente y comparte la ruta del código fuente de Android;
Entorno Linux El entorno Linux rastrea y depura directamente el código fuente de Android en la máquina local a través de Eclipse.
Nota: Independientemente de la forma en que trabaje, el código fuente de Android debe compilarse y compilarse en modo Eng (a diferencia del modo Usuario). Para conocer el proceso de compilación de la plataforma y el kernel de Android, consulte "Compilación de la plataforma Android 2.2 en Ubuntu 10.10" y "Compilación del kernel de Android 2.2 en Ubuntu 10.10".
II. Configuraciones básicas
Una vez completados los preparativos, realice algunas configuraciones básicas.
1. Copie el archivo .classpath en development/ide/eclipse en Android_ROOTgt; si necesita depurar en el simulador, debe copiar tres img (consulte /view/26d9063c87c24028915fc366.html). detalles)
2. Modificar la configuración de Eclipse
Modifique el archivo eclipse.ini y cambie el siguiente contenido:
Archivo 1.ini, cambie lo siguiente:
[simple]?ver copia simple
-Xms40m?
-Xmx384m?
Reemplazar con:
[java]?ver copia simple
-Xms128m?
-Xmx512m?
Aquí, aumenta el tamaño mínimo del montón de Java a 128 MB y aumenta el tamaño máximo del montón de Java
3. Cree el proyecto en Eclipse
1. ; Nuevo gt; Proyecto Java
2. Ingrese el nombre del proyecto
3. Cancelar Usar ubicación predeterminada, ingrese o seleccione Ruta de origen de Android en Ubicación lt; p>4. Seleccione Siguiente gt; Habrá un largo proceso de espera
El proyecto recién creado puede tener errores Según las indicaciones de error, agregue o elimine los paquetes configurados en el proyecto.
4. Configuración del entorno de depuración
1. Haga clic derecho en el proyecto recién creado en
2. Seleccione: Depurar como configuraciones de depuración. ..;
3. Haga clic con el botón derecho en "Aplicación Java remota" y seleccione "Depurar como > Configuraciones de depuración"
3. Nueva" o haga doble clic en "Aplicación Java remota" para crear una nueva aplicación remota.
4. Complete el nombre; seleccione el proyecto que acaba de crear, Android 2.3.7; complete el puerto 8700 (no necesariamente 8700; vaya a Vista de dispositivo en Perspectiva DDMS para ver el número de puerto requerido). ).
5. Guarde y salga de la aplicación.
V. Depuración
Puedes depurar a través del simulador o de la máquina real.
Ya sea un emulador o una máquina real, debes:
Iniciar la máquina primero (inicia el emulador, o enciende la máquina real y conéctate a la PC normalmente a través de USB ), es decir, debe ver la máquina conectada en la vista Dispositivos de la perspectiva DDMS;
Asegúrese de que el código en ejecución sea el mismo que el código que desea depurar.
Por ejemplo, queremos realizar un seguimiento de las llamadas de desbloqueo de la pantalla de bloqueo.
Sabemos que el desbloqueo se implementa en la función onGrabbedStateChange() de LockScreen.java, que se ejecuta en el proceso system_process.
Entonces,
1. Establezca un punto de interrupción en onGrabbedStateChange() para depurar;
2. Seleccione system_process en la vista del dispositivo y haga clic en el ícono de rastreador pequeño <. /p>
3. Utilice el depurador creado en la Sección 4 "Configuración", "Depuración";
4 En el simulador o computadora real, el código se ejecuta para La operación de desbloqueo se detiene en el. punto de interrupción;
De esta manera puedes
pasar el mouse sobre la variable y ver su valor. También puedes depurar tu código usando varias herramientas de depuración en Eclipse.
Controle la ejecución del programa mediante Paso a paso / Paso a paso / Reanudar / Suspender / Terminar, etc. en la vista de depuración.
Resumen
A través de este artículo, puede:
Este artículo está basado en el entorno Windows, pero no solo es aplicable al entorno Windows, sino que también para sistemas Mac OS y Linux. Algunas rutas y usos difieren;
Puedes rastrear/depurar todo el código fuente de Java en Android. (Ya sea código de Framework o código de aplicación), pero no el código c/c en Debug.Framework;
Para que todo el proyecto sea compilable en Eclipse, .classpath también contiene out/generado durante la compilación. contenido, por lo que debes asegurarte de que el código fuente de Android haya sido compilado.
El requisito previo para el seguimiento/depuración es establecer un punto de interrupción en el código que se va a depurar y saber en qué proceso se ejecuta el código. ==================================================== ==================================================== ===============
Si hay errores en el proyecto importado, puede consultar los siguientes métodos.
============================================ = =================================================== = ======================
Cuando importamos un proyecto que viene con aplicaciones de Android, suelen ocurrir muchos errores. Tomando AlarmClock como ejemplo, después de importarlo a eclipse, a menudo ocurren muchos errores, como se muestra en la siguiente figura:
Por ejemplo, no se puede acceder a Intent.ACTION_ALARM_CHANGED en la figura anterior. Aquí encontramos la fuente. código para ver por qué?
Según las especificaciones de programación Java, sabemos que la api (variable estática) está oculta y por tanto no se puede utilizar en el sdk. Después de comprender el motivo, tenemos varias soluciones (método recomendado 2):
1. Elimine @hide del código fuente usted mismo y luego compile un SDK para reemplazar el SDK predeterminado.
Utilice el comando make PRODUCT-sdk-sdk para compilar un nuevo SDK. Tenga en cuenta que no se requiere el SDK completo después de la compilación. Solo se necesita el archivo android.jar para reemplazar el SDK android.jar.
Por ejemplo: el directorio correspondiente del SDK del autor en el jar es:
F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar
El método específico para compilar SDK es utilizar el comando make PRODUCT-sdk-sdk en el entorno de compilación de Linux. Después de que el comando sea exitoso, aparecerá el siguiente mensaje:?
Paquete SDK: out/. host/linux-x86/sdk /android-sdk_eng.stevewang_linux-x86.zip
Entramos en el entorno de compilación de Linux de ?out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86. cremallera. En el entorno de compilación de Linux, en el directorio android-sdk_eng.stevewang_linux-x86/platforms/android-2.2/, podemos ver el archivo android.jar. Utilice este archivo para reemplazar el archivo F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar. Recuerde hacer una copia de seguridad antes de reemplazar
Este método es más problemático. Se recomienda utilizar el método 2
2. Agregue el archivo class.jar compilado por el marco a la ruta de compilación de eclipse.
En realidad, al compilar Android, compilamos el marco en un paquete jar temporal. La ruta de este jar suele ser:?
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
[font='dejavu]Solo necesitamos usar android en Linux Este archivo se puede generar usando el comando make en el directorio del código fuente.
[font='dejavu]
[font='dejavu]Dado que la API en este jar no se ha vuelto a empaquetar, la API oculta por @ no se ha eliminado. Por lo tanto, aún podemos hacer referencia a la @hide api
[font='dejavu] dentro de ella. El archivo android.jar en el SDK se volvió a empaquetar y se eliminaron las API marcadas con @hide.
[font='dejavu]Entonces, copiamos ?out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar a la computadora local.
Luego agregue este paquete jar al proyecto.
¿Cómo hacerlo?
1. Copie el paquete de compilación de Linux generado por "out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar" a la PC local.
2. En el proyecto de Android, seleccione Propiedades del proyecto-gt; Ruta de compilación de Java-gt; Agregar biblioteca-gt; En la interfaz de administración de bibliotecas de usuario, haga clic en Nuevo para crear una nueva biblioteca de usuario, como android_framework, y haga clic en Agregar Jars a la PC local.
3. Seleccione Propiedades del proyecto-gt; Ruta de compilación Java-gt; Ordenar y exportar y mueva la biblioteca de usuario creada a la parte superior del SDK de Android.
Imagen a continuación:
Después de eso, el error de nuestro proyecto desapareció: