Configuración del entorno Nativo de desarrollo para Android

Al momento de optar para las performancias en un desarrollo de Aplicaciones en Android, en su entorno de desarollo podremos encontrar la opción de elaborar un proyecto en su entorno nativo. El Java de la máquina virtual Dalvik ofrece la posibilidad de trabajar en código nativo a través de JNI, y donde se puede dialogar con librerías en C, C++.

El Native Development Kit es un complemento del sdk de Android, que está disponible en el sitio de Desarrollladores de Google, con la reciente publicación del sdk de Gingerbread ya se puede escribir completamente en código nativo sin tener ninguna necesidad de un wrapper en java.

Para nuestro primer proyecto, que se puede realizar mediante la NativeActivity Class, vamos a poder empezar a codear en C o en C++.

Algunos pasos para entender como se compila :

  • Primero se baja el NDK desde la pagina de google ( android-ndk-r5-linux-x86.tar.bz2), luego se descomprime el archivo comprimido, y se cambia el nombre del directorio. Por ejemplo en /opt/android-ndk/
  • Luego se genera un makefiles, por ejemplo en su directorio projects: /home/projects/jni/Android.mk
  • Si queremos agregar nuestro directorio del NDK al PATH de nuestro entorno.
PATH=$PATH:/opt/android-ndk
export PATH
  • O sino podemos crear un enlaces simbólico en la carpeta del NDK haciendo referencia a nuestro proyecto.
sudo ln -s /home/projects/jni /opt/android-ndk

Cómo se compila? :
Al momento de compilar su proyecto existe varias opciones, se puede usar un standalone programm hecho en un makefile en C. Buscamos a ejecutar el ndk-build que se encuentra en el directorio del ndk y que agregamos en el PATH de nuestro sistema.

Con un makefile podemos libremente llamar el compilador para que haga un deploy en C.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)
$ ndk-build clean      # clean all generated binaries
$ ndk-build -C /home/projects/jni      # builds the .so files

ndk-build es a su turno un pequeño wrapper para gnu make:

$ GNUMAKE -f $NDK/build/core/build-local.mk [parameters]

usar Ant para el deploy:
Con el proyecto AndroidAnt, es ANT que se encarga de ejecutar las clases, las configuración se hacen mediante xml antes de hacer el deploy con el ADT.

ant compile    # builds the Java app and embeds the .so within the final .apk
ant install

usar la toolchain de Android o compilar una toolchain propia
Hay que tener en cuenta que el hecho de tener ya la toolchain completa de Android, ya te facilita, la tarea, pero podemos compilar nuestra propia toolchain con el source del NDK, por ejemplo este tutorial ndk r5 con ubuntu y este: android ndk makefile. Esto obliga a concebir la mejor forma de cross-compiling. NDK provee esta toolchain que facilita la integración de código nativo adentro de la arquitectura del SDK de Android.

Embeber las librerías
La gran ventaja, es que si el proyecto necesita embeber librerías de código nativo, se puede usar LD_LIBRARY_PATH en linux. O sino en un dispositivo Android es /system/lib/ pero en este nivel se encuentra en read-only. Justamente el NDK resuelve este problema, y permite embeber cualquiera librería en código nativo como parte del Application Package en /data/data/your.package/lib/ .

Como el NDK es literalmente Open Source, ya existen variaciones para facilitar la integracion con otras librerías en C++ como las de boost. Y la librerías que se puede usar son Standard C Library, opengl ES 1.1, opengl ES 2.0, media, stlport, libc, libm (math library), libz (zlib compression library), libjnigraphics, openSL.


papachan

papachan

Consultor IT y desarollador Java de aplicaciones Móviles sobre la plataforma Android, actualmente reside en Bogota Colombia. Con una experiencia en desarrollo internet de +10 años, se ha involucrado como desarollador senior en varias empresas de desarrollos y servicios en Internet. Ahora es desarrollador Android en Tappsi.co
papachan
papachan

About papachan

Consultor IT y desarollador Java de aplicaciones Móviles sobre la plataforma Android, actualmente reside en Bogota Colombia. Con una experiencia en desarrollo internet de +10 años, se ha involucrado como desarollador senior en varias empresas de desarrollos y servicios en Internet. Ahora es desarrollador Android en Tappsi.co
This entry was posted in Android and tagged , , , . Bookmark the permalink.

Deja un comentario

  • Facebook AndroidCol