Compilar y Debug en Android

9,347 views

Published on

compilar y depurar en Android NDK con Eclipse

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
9,347
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
56
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Compilar y Debug en Android

  1. 1. Compilar y depurar con NDK usando Eclipse Windows Iván Pajuelo [email_address] twitter.com/DrQubit
  2. 2. Compilación de aplicaciones nativas con Eclipse
  3. 3. Valores utilizados en este montaje <ul><li>{CYGWIN} = c:/android/cygwin
  4. 4. {HOME} = c:/android/ndk/samples
  5. 5. {JDK} = c:/android/jdk
  6. 6. {NDK} = c:/android/ndk
  7. 7. {SDK} = c:/android/sdk
  8. 8. HOME = /cygdrive/c/ndk/samples
  9. 9. NDK = /cygdrive/c/ndk </li></ul>Las variables de entorno utilizadas por Cygwin (NDK y HOME) es mejor definirlas con el formato 'cygdrive/...' para evitar el warning que da Cygwin al usarlas.
  10. 10. Pre-requisitos <ul><li>Instalar Eclipse
  11. 11. Instalar JDK
  12. 12. Instalar Android SDK
  13. 13. Instalar Eclipse ADT
  14. 14. Instalar Cygwin (incluyendo gcc y make)
  15. 15. Instalar Eclipse CDT
  16. 16. Instalar Sequoyah Android Native Code Support
  17. 17. Añadir las variables de entorno NDK y HOME
  18. 18. Añadir al path {JDK}/bin, {SDK}/tools y {SDK}/platform-tools </li></ul>
  19. 19. Uso del ayudante Sequoyah <ul><li>Botón derecho sobre el proyecto.
  20. 20. Android tools
  21. 21. Add native support </li></ul>Esto básicamente lo que hace es crear el proyecto C++ integrado en el proyecto Java. También añade una nueva perspectiva a Eclipse diseñada para trabajar con aplicaciones mixtas.
  22. 22. Compilar desde Eclipse Para que la parte nativa de un proyecto compile, hay que ir a sus propiedades y rellenar [Build command] dentro de [C/C++ Build]* con la siguiente instrucción: {CYGWIN}/bin/bash.exe --login -c &quot;cd {ProjectPath} && $NDK/ndk-build 2>&1 | awk '{gsub(/{ProjectPath}/,&quot;&quot;);print}'&quot; Esto ejecuta bash.exe y dentro, ejecuta los siguientes comandos: cd {ProjectPath} Nos posiciona en la raiz del directorio del proyecto. $NDK/ndk-build 2>&1 | awk '{gsub(/{ProjectPath}/,&quot;&quot;);print}' Ejecuta el script ndk-build el cual compila la parte nativa. Con gsub, lo que hacemos es recortar el path de los errores para que eclipse pueda ir a ellos con doble clic NOTA: No olvidéis usar los caracteres de escape en el primer parámetro de gsub. *Ha de estar en una perspectiva de C/C++ (Android Native también sirve)
  23. 23. Ej: (para hello-jni) c:/android/cygwin/bin/bash.exe –login -c “cd $HOME/hello-jni && $NDK/ndk-build 2>&1 | awk '{gsub(//cygdrive/c/android/ndk/samples/hello-jni//,&quot;&quot;);print}'”
  24. 24. Extra <ul><li>En este punto ya se pueden compilar y ejecutar aplicaciones con código nativo. </li></ul>Añadir las referencias de las APIs del NDK al Indexer de Eclipse. En propiedades del proyecto, dentro de [C/C++ General]:[Paths and Symbols], en la pestaña Includes. Añadir los paths necesarios a GNU C y/o GNU C++, dependiendo de si nuestro proyecto está en C, C++ o ambos. Ej: (para API level 9) c:/android/ndk/platforms/android-9/arch-arm/usr/include
  25. 26. Depuración de aplicaciones nativas con Eclipse
  26. 27. Cambiar el lanzador C++ por defecto <ul><li>En el menu Window -> Preferences, ir al apartado Run/debug -> Launching -> Default Launchers
  27. 28. Y en C/C++ Application, elegimos Standard Create Process Launcher
  28. 29. Esto sirve para que cuando creemos configuraciones de depuración, nos utilice ese lanzador por defecto. </li></ul>
  29. 31. Modificar el script ndk-gdb Comentar la última linea: #$GDBCLIENT -x $GDBSETUP -e $APP_PROCESS Y la 5ª linea empezando por el final #echo &quot;target remote :$DEBUG_PORT&quot; >> $GDBSETUP La 1ª impide que se lance el cliente de GDB ya que vamos a usar Eclipse como cliente. Y la 2ª es para que el script no cree la linea “ target remote:5039 ” en el fichero gdb.setup . El cliente GDB de Eclipse no admite ese parámetro a través del fichero de configuración.
  30. 32. Preparar la sesión de depuración Poner un breakpoint al principio de la ejecución de la aplicación. Por ejemplo en onCreate. No interrumpáis antes de System.loadLibrary ya que si no, la librería no estará cargada y no podréis añadir breakpoints desde el CDT. Iniciar la sesión de depuración y esperar a que el punto de interrupción sea alcanzado. ¿Para que sirve esto?: Desafortunadamente, GDB sólo se puede vincular a un proceso ya activo. Por eso necesitamos que la aplicación haya arrancado y tenga un PID válido. Este método no sirve para una aplicación nativa pura, ya que no podemos pararla con un breakpoint en la máquina virtual. NOTA: Poner Debugable=true en AndroidManifest.xml
  31. 33. En este punto la aplicación está lista para que le vinculemos el GDB.
  32. 34. Vincular GDB con nuestra aplicación Abrir una sesión en la consola de Cygwin. Esta sesión conviene no cerrarla para futuras depuraciones. cd {ProjectPath} Desde el directorio de nuestra aplicación, ejecutar el script: $NDK/ndk-gdb Esto, entre otras cosas, arrancará GDB y lo vinculará a nuestra aplicación.
  33. 35. Configurar el cliente GDB en Eclipse para este proyecto (sólo se hace la 1ª vez) Primero hemos de crear una configuración de depuración para nuestro proyecto. Vamos al menú Run y Debug Configurations... En C/C++ Application, botón derecho -> New. En la pestaña Main: En el campo C/C++ Aplication, ponemos: {ProjectPath}/obj/local/armeabi/app_process Este fichero lo crea el script ndk-gdb, así que si no lo hemos ejecutado con éxito, no estará. Seleccionamos “Disable auto build” ya que cuando iniciemos la sesión de depuración, la aplicación ya la tenemos compilada y corriendo. (Aunque parada en un VM Breakpoint)
  34. 37. En la pestaña Debugger: Elegimos gdbserver como Debugger y desmarcamos la casilla: [X] Stop on startup at: En la subpestaña Main: En el campo GDB debugger, ponemos: {NDK}/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-gdb En el campo GDB command file, ponemos: {ProjectPath}/obj/local/armeabi/gdb.setup Y marcamos la casilla: [X] Verbose console mode En la subpestaña Connection: Type: TCP Host name or IP address: localhost Port number: 5039
  35. 39. Depuración de aplicaciones nativas puras con Eclipse

×