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
Top Related