Compilar y Debug en Android

download Compilar y Debug en Android

If you can't read please download the document

Transcript of Compilar y Debug en Android

Compilar y depurar con NDK usando EclipseWindows

Ivn [email protected]/DrQubit

Compilacin de aplicaciones nativas con Eclipse

Valores utilizados en este montaje

{CYGWIN} = c:/android/cygwin

{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

Instalar Eclipse

Instalar JDK

Instalar Android SDK

Instalar Eclipse ADT

Instalar Cygwin (incluyendo gcc y make)

Instalar Eclipse CDT

Instalar Sequoyah Android Native Code Support

Aadir las variables de entorno NDK y HOME

Aadir al path {JDK}/bin, {SDK}/tools y {SDK}/platform-tools

Uso del ayudante Sequoyah

Botn derecho sobre el proyecto.

Android tools

Add native support

Esto bsicamente lo que hace es crear el proyecto C++ integrado en el proyecto Java.
Tambin aade una nueva perspectiva a Eclipse diseada 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 instruccin:{CYGWIN}/bin/bash.exe --login -c "cd {ProjectPath} && $NDK/ndk-build 2>&1 | awk '{gsub(/{ProjectPath}/,\"\");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}/,\"\");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 clicNOTA: No olvidis usar los caracteres de escape en el primer parmetro de gsub.*Ha de estar en una perspectiva de C/C++ (Android Native tambin sirve)

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\//,\"\");print}'

Extra

En este punto ya se pueden compilar y ejecutar aplicaciones con cdigo nativo.

Aadir 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 pestaa Includes. Aadir 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

Depuracin de aplicaciones nativas con Eclipse

Cambiar el lanzador C++ por defecto

En el menu Window Preferences, ir al apartado Run/debug Launching Default Launchers

Y en C/C++ Application, elegimos Standard Create Process Launcher

Esto sirve para que cuando creemos configuraciones de depuracin, nos utilice ese lanzador por defecto.

Modificar el script ndk-gdb

Comentar la ltima linea:#$GDBCLIENT -x $GDBSETUP -e $APP_PROCESSY 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 parmetro a travs del fichero de configuracin.

Preparar la sesin de depuracin

Poner un breakpoint al principio de la ejecucin de la aplicacin. Por ejemplo en onCreate. No interrumpis antes de System.loadLibrary ya que si no, la librera no estar cargada y no podris aadir breakpoints desde el CDT.Iniciar la sesin de depuracin y esperar a que el punto de interrupcin sea alcanzado.Para que sirve esto?:Desafortunadamente, GDB slo se puede vincular a un proceso ya activo. Por eso necesitamos que la aplicacin haya arrancado y tenga un PID vlido.Este mtodo no sirve para una aplicacin nativa pura, ya que no podemos pararla con un breakpoint en la mquina virtual.

NOTA:Poner Debugable=true en AndroidManifest.xml

En este punto la aplicacin est lista para que le vinculemos el GDB.

Vincular GDB con nuestra aplicacin

Abrir una sesin en la consola de Cygwin. Esta sesin conviene no cerrarla para futuras depuraciones.cd {ProjectPath}Desde el directorio de nuestra aplicacin, ejecutar el script:$NDK/ndk-gdbEsto, entre otras cosas, arrancar GDB y lo vincular a nuestra aplicacin.

Configurar el cliente GDB en Eclipse para este proyecto (slo se hace la 1 vez)

Primero hemos de crear una configuracin de depuracin para nuestro proyecto. Vamos al men Run y Debug Configurations...En C/C++ Application, botn derecho New.En la pestaa Main:En el campo C/C++ Aplication, ponemos:{ProjectPath}/obj/local/armeabi/app_processEste 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 sesin de depuracin, la aplicacin ya la tenemos compilada y corriendo. (Aunque parada en un VM Breakpoint)

En la pestaa Debugger:Elegimos gdbserver como Debugger y desmarcamos la casilla: [X] Stop on startup at:En la subpestaa Main:En el campo GDB debugger, ponemos:{NDK}/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-gdbEn el campo GDB command file, ponemos:{ProjectPath}/obj/local/armeabi/gdb.setupY marcamos la casilla: [X] Verbose console modeEn la subpestaa Connection:Type: TCPHost name or IP address: localhostPort number: 5039

Depuracin de aplicaciones nativas puras con Eclipse