SlideShare uma empresa Scribd logo
1 de 22
Compilar y depurar con NDK usando Eclipse Windows Iván Pajuelo [email_address] twitter.com/DrQubit
Compilación de aplicaciones nativas con Eclipse
Valores utilizados en este montaje ,[object Object]
{HOME} = c:/android/ndk/samples
{JDK} = c:/android/jdk
{NDK} = c:/android/ndk
{SDK} = c:/android/sdk
HOME = /cygdrive/c/ndk/samples
NDK = /cygdrive/c/ndk 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.
Pre-requisitos ,[object Object]
Instalar JDK
Instalar Android SDK
Instalar Eclipse ADT
Instalar Cygwin (incluyendo gcc y make)
Instalar Eclipse CDT
Instalar Sequoyah Android Native Code Support
Añadir las variables de entorno NDK y HOME
Añadir al path {JDK}/bin, {SDK}/tools y {SDK}/platform-tools
Uso del ayudante Sequoyah ,[object Object]
Android tools
Add native support 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.
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 "cd {ProjectPath} && $NDK/ndk-build 2>&1 | awk '{gsub(/{ProjectPath}/,amp;quot;amp;quot;);print}'" 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}/,amp;quot;amp;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)

Mais conteúdo relacionado

Mais procurados

Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Codeanywhere ejercicio practico
Codeanywhere ejercicio practicoCodeanywhere ejercicio practico
Codeanywhere ejercicio practicojeison143
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
 
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)Jose Juan R. Zuñiga
 

Mais procurados (7)

Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Codeanywhere ejercicio practico
Codeanywhere ejercicio practicoCodeanywhere ejercicio practico
Codeanywhere ejercicio practico
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
 
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
 

Semelhante a Compilar y Debug en Android

Instalacion y configuracion de Android Studio
Instalacion y configuracion de Android StudioInstalacion y configuracion de Android Studio
Instalacion y configuracion de Android StudioJuan Vladimir
 
Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...
Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...
Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...Omar Diaz Esquivel
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumvideos
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparencytrustparency
 
Desarrollo android - 3 - entorno de desarrollo
Desarrollo android  - 3 - entorno de desarrolloDesarrollo android  - 3 - entorno de desarrollo
Desarrollo android - 3 - entorno de desarrolloEmilio Aviles Avila
 
Configuración y uso Google Drive en Android
Configuración y uso Google Drive en AndroidConfiguración y uso Google Drive en Android
Configuración y uso Google Drive en AndroidJosé López Pérez
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Construyendo una app Android sobre la nube App Engine
Construyendo una app Android sobre la nube App EngineConstruyendo una app Android sobre la nube App Engine
Construyendo una app Android sobre la nube App EngineGDG Lima
 
Ingeniería inversa básica en android tomo ii
Ingeniería inversa básica en android tomo iiIngeniería inversa básica en android tomo ii
Ingeniería inversa básica en android tomo iiFreelance
 
Tutorial android fundamentos
Tutorial android fundamentosTutorial android fundamentos
Tutorial android fundamentosVictor Chalian
 
Mi primera App con GAE
Mi primera App con GAEMi primera App con GAE
Mi primera App con GAEGDG Lima
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para DockerAngel Borroy López
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)videos
 
Mi primera app con GAE y GWT
Mi primera app con GAE y GWTMi primera app con GAE y GWT
Mi primera app con GAE y GWTGDG Lima
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Androidjubacalo
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Ignacio Muñoz Vicente
 

Semelhante a Compilar y Debug en Android (20)

Instalacion y configuracion de Android Studio
Instalacion y configuracion de Android StudioInstalacion y configuracion de Android Studio
Instalacion y configuracion de Android Studio
 
Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...
Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...
Guía para desplegar una aplicación Java en AppEngine de Google Cloud Platform...
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforum
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparency
 
Desarrollo android - 3 - entorno de desarrollo
Desarrollo android  - 3 - entorno de desarrolloDesarrollo android  - 3 - entorno de desarrollo
Desarrollo android - 3 - entorno de desarrollo
 
Configuración y uso Google Drive en Android
Configuración y uso Google Drive en AndroidConfiguración y uso Google Drive en Android
Configuración y uso Google Drive en Android
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Construyendo una app Android sobre la nube App Engine
Construyendo una app Android sobre la nube App EngineConstruyendo una app Android sobre la nube App Engine
Construyendo una app Android sobre la nube App Engine
 
Ingeniería inversa básica en android tomo ii
Ingeniería inversa básica en android tomo iiIngeniería inversa básica en android tomo ii
Ingeniería inversa básica en android tomo ii
 
Tutorial android fundamentos
Tutorial android fundamentosTutorial android fundamentos
Tutorial android fundamentos
 
Mi primera App con GAE
Mi primera App con GAEMi primera App con GAE
Mi primera App con GAE
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para Docker
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)
 
Mi primera app con GAE y GWT
Mi primera app con GAE y GWTMi primera app con GAE y GWT
Mi primera app con GAE y GWT
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Android
 
Gwt
GwtGwt
Gwt
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
Gwt II - trabajando con gwt
Gwt II - trabajando con gwtGwt II - trabajando con gwt
Gwt II - trabajando con gwt
 

Compilar y Debug en Android

  • 1. Compilar y depurar con NDK usando Eclipse Windows Iván Pajuelo [email_address] twitter.com/DrQubit
  • 2. Compilación de aplicaciones nativas con Eclipse
  • 3.
  • 9. NDK = /cygdrive/c/ndk 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.
  • 16. Instalar Sequoyah Android Native Code Support
  • 17. Añadir las variables de entorno NDK y HOME
  • 18. Añadir al path {JDK}/bin, {SDK}/tools y {SDK}/platform-tools
  • 19.
  • 21. Add native support 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. 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 "cd {ProjectPath} && $NDK/ndk-build 2>&1 | awk '{gsub(/{ProjectPath}/,amp;quot;amp;quot;);print}'" 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}/,amp;quot;amp;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. Ej: (para hello-jni) c:/android/cygwin/bin/bash.exe –login -c “cd $HOME/hello-jni && $NDK/ndk-build 2>&1 | awk '{gsub(/cygdrivecandroidndksampleshello-jni/,amp;quot;amp;quot;);print}'”
  • 24.
  • 25.  
  • 26. Depuración de aplicaciones nativas con Eclipse
  • 27.
  • 28. Y en C/C++ Application, elegimos Standard Create Process Launcher
  • 29. Esto sirve para que cuando creemos configuraciones de depuración, nos utilice ese lanzador por defecto.
  • 30.  
  • 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 "target remote :$DEBUG_PORT" >> $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.
  • 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
  • 33. En este punto la aplicación está lista para que le vinculemos el GDB.
  • 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.
  • 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)
  • 36.  
  • 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
  • 38.  
  • 39. Depuración de aplicaciones nativas puras con Eclipse
  • 40.