SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Introducción Android NDK
                Barcelona GTUG
                     Marzo 2011


             fernando@ideaknow.com
                           @fegabe
GTUG, Habemus Logo!




     designed by Maria Orús Valls
       maria.orus@gmail.com
Introducción


         ¿Qué es?
         ¿Qué permite?
         Librerías incluidas
         ¿Cuándo usarlo?
¿Qué es?




Conjunto de herramientas para compilar
componentes nativos y poder utilizarlos
       en aplicaciones Android.
¿Qué es?



      ¡¡¿¿What??!!
¿Qué permite?

   Entre otras cosas permite
      Utilizar librerías C/C++
      Invocar código C/C++ desde Java (y al revés)


      OpenGL ES 1.0 y 2.0


   Desde NDKr5 (Gingerbread)
       Aplicación android escrita completamente en C/C++
        (activities nativas)
       Acceder input (teclado, touch screen)
       Acceder sensores (acelerómetro, brújula...)
       Reproducir audio
       Recuperar recursos incluidos en el APK (R.*)
Librerías incluidas

   JNI interface headers         libjnigraphics (Pixel buffer
                                   access) header (for
   libc (C library) headers
                                   Android 2.2 and above).
   libm (math library)           A Minimal set of headers
    headers
                                   for C++ support
   libz (Zlib compression)       OpenSL ES native audio
    headers
                                   libraries
   liblog (Android logging)      Android native application
    header
                                   APIS
   OpenGL ES 1.1 and
    OpenGL ES 2.0 (3D
    graphics libraries)
    headers
¿Cuándo usarlo?

   No recomendado para la mayoría de las aplicaciones

     No siempre aumenta el rendimiento pero siempe
               incrementa la complejidad

                 Sospechosos habituales

Operaciones de CPU intensivas, que no reserven mucha
  memoria: procesamiento de señales, simulaciones
                 físicas, juegos...
Primeros Pasos



             Requisitos
             Instalación
             Ejemplos
Requisitos

   Android SDK
      Android 1.5 SDK o superior
   Sistemas operativos soportados
      Windows XP (32-bit) o Vista (32- or 64-bit).
      Mac OS X 10.4.8 o superior (x86 only).


      Linux (32 o 64-bit).


   Herramienta de desarrollo requeridas
       GNU Make 3.81 o superior.
       Versión reciente de awk.
       Para Windows, Cygwin 1.7 o superior.
Instalación

   Descargar e instalar Android SDK
http://developer.android.com/sdk/index.html

   Descargar y descomprimir Android NDK
http://developer.android.com/sdk/ndk/index.html

   Incluir directorio NDK en el PATH
export NDK_ROOT=/home/fegabe/android-ndk-r5
export PATH=$PATH:$NDK_ROOT
Ejemplos incluidos con NDK

   La mejor manera de aprender NDK y saber qué
    se puede hacer


   hello-jni               hello-neon
   two-libs                bitmap-plasma
   san-angeles             native-activity
   hello-gl2               native-plasma
Calculadora NDK

   Código Java
   Código C
   Android.mk
   Compilar y ejecutar
Código Java. Calculator.java
Calculadora NDK

package org.gtug.bcn.fegabe.ndk.calculator;

// Cargamos la librería 'sample-calculator' durante
// el arranque de la aplicación.
static {
    System.loadLibrary("sample-calculator");
}

// Método nativo que se implementa en la librería
// nativa 'sample-calculator', se empaqueta junto a esta
// aplicación.
Private static native int operate(int value1, int value2,
String operation);

public static int performOperation(int value1, int value2,
String operation) {
    // Se invoca el método nativo como si fuera un método
    // normal
    return operate(value1, value2, operation);
}
Código C. calculator.c
    Calculadora NDK


// El nombre del método en el código nativo se
// forma concatenando el package donde está definido
// (org.gtug.bcn.fegabe.ndk.calculator), el nombre de la
// clase (Calculator) y el nombre del método (operate)
jint Java_org_gtug_bcn_fegabe_ndk_calculator_Calculator_operate
(JNIEnv *env,jclass clazz, jint value1, jint value2, jstring
operation) {

     int result = 0;
     const char* strOperation;
     strOperation = (*env)->GetStringUTFChars(env, operation, 0);

     if (strcmp(strOperation, "+") == 0)
        result = value1 + value2;

     LOGI("Calculator_operate: %d %s %d = %d", value1,
        strOperation, value2, result);
     return result;
}
Android.mk 1/2
Calculadora NDK



    Se trata de un Makefile que describe
     al compilador de NDK los ficheros
     C/C++.
    Crear estos makefiles es una de las
     partes más complicadas de NDK, por
     ello conviene echar una vistazo a los
     ejemplos que vienen para ver otros
     Android.mk que incluyen comentarios.
Android.mk 2/2
Calculadora NDK

# Android.mk debe comenzar con la variable LOCAL_PATH que localiza los
fuentes en el árbol de directorios. En este caso, la macro 'my-dir'
devuelve el path del directorio actual.
LOCAL_PATH := $(call my-dir)

# CLEAR_VARS limpia las variables LOCAL_XXX (LOCAL_MODULE,
LOCAL_SRC_FILES...) excepto LOCAL_PATH.
include $(CLEAR_VARS)

# LOCAL_MODULE debe ser definida para identificar cada módulo descrito en
el Android.mk. El nombre debe ser único y no contener espacios. La librería
dinámica recibirá el nombre del módulo, en este caso se generará el fichero
'libsample-calculator.so'.
LOCAL_MODULE    := sample-calculator

# LOCAL_SRC_FILES contiene la lista de ficheros C y/o C++.
LOCAL_SRC_FILES := calculator.c

# Lista de flags de linkado usados durante la compilación.
LOCAL_LDLIBS := -llog

# BUILD_SHARED_LIBRARY indica que el módulo ha acabado indicando qué
compilar. Existe también la variable BUILD_STATIC_LIBRARY para generar una
librería estática.
include $(BUILD_SHARED_LIBRARY)
Compilar y ejecutar
Calculadora NDK



          $ <directorio-proyecto-ndk>/ndk-build


    Se genera la librería 'libsample-calculator.so'
     en la carpeta 'libs'
    Finalmente compilamos el proyecto en Eclipse
     para generar el .APK y ya podemos ejecutarlo
     en el emulador o dispositivo.
What else?

    JNI Types
       Recibir/enviar Strings


    Cómo generar headers
    Invocar Java desde nativo
    Proyectos NDK
    Crystax, librerías comunes C/C++
JNI Types
    What else?



        Primitive Types            Reference Types




    Ejemplo
jint Java_org_gtug_bcn_fegabe_ndk_calculator_Calculator_operate
(JNIEnv *env,jclass clazz, jint value1, jint value2, jstring
operation)
Recibir/enviar Strings
What else?




     jstring to C/C++ strings      construct new String
         GetStringUTFChars               NewStringUTF
       ReleaseStringUTFChars



                   Demo Whatelse

     Con otras referencias como Arrays sucede similar
Generar Headers
What else?



    Utilizando javah podemos generar
     automáticamente los headers en código C


              /bin$ javah -jni
     org.gtug.bcn.fegabe.ndk.calculator
              .WhatelseActivity
Invocar Java desde nativo
    What else?



        Función nativa que invoca método Java
JNIEXPORT void JNICALL
Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth) {

    jclass cls = (*env)->GetObjectClass(env, obj);
    jmethodID method =(*env)->GetMethodID(env, cls, "callback", "(I)V");
    if (method == 0)
      return;

    (*env)->CallVoidMethod(env, obj, method, depth);
}



        Método Java
         private void callback(int depth) { … }
Proyectos que usan NDK
What else?



    Quake
     code.google.com/p/glesquake

    Quake 2
     code.google.com/p/quake2android

    Quake 3
     code.google.com/p/kwaak3

    Doom
     code.google.com/p/doom-for-android

    Box2D, librería físicas 2D
     code.google.com/p/akjava-android-project

    ARToolkit, librería realidad aumentada
     code.google.com/p/andar
CrystaX NDK
What else?



    Android NDK personalizado con soporte para
     excepciones C++, RTTI y STL
    Muy útil para compilar librerías ya existentes
     con NDK


      http://www.crystax.net/android/ndk.php
Parsec. Ejemplo real NDK

   Shoot'em old-school hecho por IdeaKnow para
    iPhone y Android gracias a NDK
       Addictive gameplay
       Cool vector graphics
       20 amazing levels
       GAME CENTER / Openfeint
        Online achievements & hiscores
       Weapon upgrades
       Bosses
       Items
       Allows to play your own
        music while in-game

parsec.ideaknow.com
Parsec. Experiencia

   90 % código C común
   Cada plataforma implementa:
      ciclo de vida,
      inicialización vista OpenGL,


      gamecenter/openfeint,


      gestión inputs,


      gestión audio


   Lo más complicado: conseguir crear un
    Android.mk para compilarlo (un par de días)
¿Preguntas?
The End




               ¡Gracias!

fernando@ideaknow.com
@fegabe

Más contenido relacionado

La actualidad más candente

Introducción a jupyter (antes i python notebook)
Introducción a jupyter (antes i python notebook)Introducción a jupyter (antes i python notebook)
Introducción a jupyter (antes i python notebook)Juan Rodríguez
 
Virtualziación de Sistema Operativo: la niña bonita sin novio
Virtualziación de Sistema Operativo: la niña bonita sin novioVirtualziación de Sistema Operativo: la niña bonita sin novio
Virtualziación de Sistema Operativo: la niña bonita sin novioRodolfo Pilas
 
Información básica Java
Información básica JavaInformación básica Java
Información básica JavaFordBull2er
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java Eudris Cabrera
 
Documentación1
Documentación1Documentación1
Documentación1conifeliz
 
Tema 1 el entorno de desarrollo de java
Tema 1 el entorno de desarrollo de javaTema 1 el entorno de desarrollo de java
Tema 1 el entorno de desarrollo de javaSabinaChambi
 

La actualidad más candente (11)

Java 2010: presente, límites y futuro
Java 2010: presente, límites y futuroJava 2010: presente, límites y futuro
Java 2010: presente, límites y futuro
 
Introducción a jupyter (antes i python notebook)
Introducción a jupyter (antes i python notebook)Introducción a jupyter (antes i python notebook)
Introducción a jupyter (antes i python notebook)
 
Virtualziación de Sistema Operativo: la niña bonita sin novio
Virtualziación de Sistema Operativo: la niña bonita sin novioVirtualziación de Sistema Operativo: la niña bonita sin novio
Virtualziación de Sistema Operativo: la niña bonita sin novio
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Systemd en Centos 7
Systemd en Centos 7Systemd en Centos 7
Systemd en Centos 7
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java
 
Documentación1
Documentación1Documentación1
Documentación1
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
Paralela9
Paralela9Paralela9
Paralela9
 
Tema 1 el entorno de desarrollo de java
Tema 1 el entorno de desarrollo de javaTema 1 el entorno de desarrollo de java
Tema 1 el entorno de desarrollo de java
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 

Similar a Introducción Android NDK

Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelSoftware Guru
 
Optimización de Aplicaciones Android para X86
Optimización de Aplicaciones Android para X86Optimización de Aplicaciones Android para X86
Optimización de Aplicaciones Android para X86Software Guru
 
Intel Android @ HackMTY
Intel Android @ HackMTYIntel Android @ HackMTY
Intel Android @ HackMTYSoftware Guru
 
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
 
Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel videos
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfodryemeliGomez
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumvideos
 
Android de la A a la Z - Unidad 3
Android de la A a la Z - Unidad 3Android de la A a la Z - Unidad 3
Android de la A a la Z - Unidad 3Jorge Ulises
 
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
 
C1 intro java
C1 intro javaC1 intro java
C1 intro javaalenco
 
Unidad 1 Instalacion Android Studio
Unidad 1 Instalacion Android StudioUnidad 1 Instalacion Android Studio
Unidad 1 Instalacion Android StudioLorena García Arnau
 
Entornodedesarrollodejava
EntornodedesarrollodejavaEntornodedesarrollodejava
EntornodedesarrollodejavaVictor Zapata
 
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
 

Similar a Introducción Android NDK (20)

Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente Nivel
 
Introducción a ndk
Introducción a ndkIntroducción a ndk
Introducción a ndk
 
Optimización de Aplicaciones Android para X86
Optimización de Aplicaciones Android para X86Optimización de Aplicaciones Android para X86
Optimización de Aplicaciones Android para X86
 
Estructuras de datos para realidad virtual
Estructuras de datos para realidad virtualEstructuras de datos para realidad virtual
Estructuras de datos para realidad virtual
 
Intel Android @ HackMTY
Intel Android @ HackMTYIntel Android @ HackMTY
Intel Android @ HackMTY
 
Desarrollo android - 3 - entorno de desarrollo
Desarrollo android  - 3 - entorno de desarrolloDesarrollo android  - 3 - entorno de desarrollo
Desarrollo android - 3 - entorno de desarrollo
 
Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
 
Taller deandroid
Taller deandroidTaller deandroid
Taller deandroid
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforum
 
Android de la A a la Z - Unidad 3
Android de la A a la Z - Unidad 3Android de la A a la Z - Unidad 3
Android de la A a la Z - Unidad 3
 
Guia 03 periodo 3
Guia 03 periodo 3Guia 03 periodo 3
Guia 03 periodo 3
 
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
 
16.10.24 robots jus intro ros s4-5
16.10.24 robots jus intro ros s4-516.10.24 robots jus intro ros s4-5
16.10.24 robots jus intro ros s4-5
 
C1 intro java
C1 intro javaC1 intro java
C1 intro java
 
Android studio
Android studioAndroid studio
Android studio
 
Unidad 1 Instalacion Android Studio
Unidad 1 Instalacion Android StudioUnidad 1 Instalacion Android Studio
Unidad 1 Instalacion Android Studio
 
01 - Introducción al lenguaje C
01 - Introducción al lenguaje C01 - Introducción al lenguaje C
01 - Introducción al lenguaje C
 
Entornodedesarrollodejava
EntornodedesarrollodejavaEntornodedesarrollodejava
Entornodedesarrollodejava
 
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
 

Último

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

Introducción Android NDK

  • 1. Introducción Android NDK Barcelona GTUG Marzo 2011 fernando@ideaknow.com @fegabe
  • 2. GTUG, Habemus Logo! designed by Maria Orús Valls maria.orus@gmail.com
  • 3. Introducción  ¿Qué es?  ¿Qué permite?  Librerías incluidas  ¿Cuándo usarlo?
  • 4. ¿Qué es? Conjunto de herramientas para compilar componentes nativos y poder utilizarlos en aplicaciones Android.
  • 5. ¿Qué es? ¡¡¿¿What??!!
  • 6. ¿Qué permite?  Entre otras cosas permite  Utilizar librerías C/C++  Invocar código C/C++ desde Java (y al revés)  OpenGL ES 1.0 y 2.0  Desde NDKr5 (Gingerbread)  Aplicación android escrita completamente en C/C++ (activities nativas)  Acceder input (teclado, touch screen)  Acceder sensores (acelerómetro, brújula...)  Reproducir audio  Recuperar recursos incluidos en el APK (R.*)
  • 7. Librerías incluidas  JNI interface headers  libjnigraphics (Pixel buffer access) header (for  libc (C library) headers Android 2.2 and above).  libm (math library)  A Minimal set of headers headers for C++ support  libz (Zlib compression)  OpenSL ES native audio headers libraries  liblog (Android logging)  Android native application header APIS  OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers
  • 8. ¿Cuándo usarlo?  No recomendado para la mayoría de las aplicaciones No siempre aumenta el rendimiento pero siempe incrementa la complejidad  Sospechosos habituales Operaciones de CPU intensivas, que no reserven mucha memoria: procesamiento de señales, simulaciones físicas, juegos...
  • 9. Primeros Pasos  Requisitos  Instalación  Ejemplos
  • 10. Requisitos  Android SDK  Android 1.5 SDK o superior  Sistemas operativos soportados  Windows XP (32-bit) o Vista (32- or 64-bit).  Mac OS X 10.4.8 o superior (x86 only).  Linux (32 o 64-bit).  Herramienta de desarrollo requeridas  GNU Make 3.81 o superior.  Versión reciente de awk.  Para Windows, Cygwin 1.7 o superior.
  • 11. Instalación  Descargar e instalar Android SDK http://developer.android.com/sdk/index.html  Descargar y descomprimir Android NDK http://developer.android.com/sdk/ndk/index.html  Incluir directorio NDK en el PATH export NDK_ROOT=/home/fegabe/android-ndk-r5 export PATH=$PATH:$NDK_ROOT
  • 12. Ejemplos incluidos con NDK  La mejor manera de aprender NDK y saber qué se puede hacer  hello-jni  hello-neon  two-libs  bitmap-plasma  san-angeles  native-activity  hello-gl2  native-plasma
  • 13. Calculadora NDK  Código Java  Código C  Android.mk  Compilar y ejecutar
  • 14. Código Java. Calculator.java Calculadora NDK package org.gtug.bcn.fegabe.ndk.calculator; // Cargamos la librería 'sample-calculator' durante // el arranque de la aplicación. static { System.loadLibrary("sample-calculator"); } // Método nativo que se implementa en la librería // nativa 'sample-calculator', se empaqueta junto a esta // aplicación. Private static native int operate(int value1, int value2, String operation); public static int performOperation(int value1, int value2, String operation) { // Se invoca el método nativo como si fuera un método // normal return operate(value1, value2, operation); }
  • 15. Código C. calculator.c Calculadora NDK // El nombre del método en el código nativo se // forma concatenando el package donde está definido // (org.gtug.bcn.fegabe.ndk.calculator), el nombre de la // clase (Calculator) y el nombre del método (operate) jint Java_org_gtug_bcn_fegabe_ndk_calculator_Calculator_operate (JNIEnv *env,jclass clazz, jint value1, jint value2, jstring operation) { int result = 0; const char* strOperation; strOperation = (*env)->GetStringUTFChars(env, operation, 0); if (strcmp(strOperation, "+") == 0) result = value1 + value2; LOGI("Calculator_operate: %d %s %d = %d", value1, strOperation, value2, result); return result; }
  • 16. Android.mk 1/2 Calculadora NDK  Se trata de un Makefile que describe al compilador de NDK los ficheros C/C++.  Crear estos makefiles es una de las partes más complicadas de NDK, por ello conviene echar una vistazo a los ejemplos que vienen para ver otros Android.mk que incluyen comentarios.
  • 17. Android.mk 2/2 Calculadora NDK # Android.mk debe comenzar con la variable LOCAL_PATH que localiza los fuentes en el árbol de directorios. En este caso, la macro 'my-dir' devuelve el path del directorio actual. LOCAL_PATH := $(call my-dir) # CLEAR_VARS limpia las variables LOCAL_XXX (LOCAL_MODULE, LOCAL_SRC_FILES...) excepto LOCAL_PATH. include $(CLEAR_VARS) # LOCAL_MODULE debe ser definida para identificar cada módulo descrito en el Android.mk. El nombre debe ser único y no contener espacios. La librería dinámica recibirá el nombre del módulo, en este caso se generará el fichero 'libsample-calculator.so'. LOCAL_MODULE := sample-calculator # LOCAL_SRC_FILES contiene la lista de ficheros C y/o C++. LOCAL_SRC_FILES := calculator.c # Lista de flags de linkado usados durante la compilación. LOCAL_LDLIBS := -llog # BUILD_SHARED_LIBRARY indica que el módulo ha acabado indicando qué compilar. Existe también la variable BUILD_STATIC_LIBRARY para generar una librería estática. include $(BUILD_SHARED_LIBRARY)
  • 18. Compilar y ejecutar Calculadora NDK $ <directorio-proyecto-ndk>/ndk-build  Se genera la librería 'libsample-calculator.so' en la carpeta 'libs'  Finalmente compilamos el proyecto en Eclipse para generar el .APK y ya podemos ejecutarlo en el emulador o dispositivo.
  • 19. What else?  JNI Types  Recibir/enviar Strings  Cómo generar headers  Invocar Java desde nativo  Proyectos NDK  Crystax, librerías comunes C/C++
  • 20. JNI Types What else?  Primitive Types  Reference Types  Ejemplo jint Java_org_gtug_bcn_fegabe_ndk_calculator_Calculator_operate (JNIEnv *env,jclass clazz, jint value1, jint value2, jstring operation)
  • 21. Recibir/enviar Strings What else?  jstring to C/C++ strings  construct new String GetStringUTFChars NewStringUTF ReleaseStringUTFChars Demo Whatelse  Con otras referencias como Arrays sucede similar
  • 22. Generar Headers What else?  Utilizando javah podemos generar automáticamente los headers en código C /bin$ javah -jni org.gtug.bcn.fegabe.ndk.calculator .WhatelseActivity
  • 23. Invocar Java desde nativo What else?  Función nativa que invoca método Java JNIEXPORT void JNICALL Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth) { jclass cls = (*env)->GetObjectClass(env, obj); jmethodID method =(*env)->GetMethodID(env, cls, "callback", "(I)V"); if (method == 0) return; (*env)->CallVoidMethod(env, obj, method, depth); }  Método Java private void callback(int depth) { … }
  • 24. Proyectos que usan NDK What else?  Quake code.google.com/p/glesquake  Quake 2 code.google.com/p/quake2android  Quake 3 code.google.com/p/kwaak3  Doom code.google.com/p/doom-for-android  Box2D, librería físicas 2D code.google.com/p/akjava-android-project  ARToolkit, librería realidad aumentada code.google.com/p/andar
  • 25. CrystaX NDK What else?  Android NDK personalizado con soporte para excepciones C++, RTTI y STL  Muy útil para compilar librerías ya existentes con NDK http://www.crystax.net/android/ndk.php
  • 26. Parsec. Ejemplo real NDK  Shoot'em old-school hecho por IdeaKnow para iPhone y Android gracias a NDK  Addictive gameplay  Cool vector graphics  20 amazing levels  GAME CENTER / Openfeint Online achievements & hiscores  Weapon upgrades  Bosses  Items  Allows to play your own music while in-game parsec.ideaknow.com
  • 27. Parsec. Experiencia  90 % código C común  Cada plataforma implementa:  ciclo de vida,  inicialización vista OpenGL,  gamecenter/openfeint,  gestión inputs,  gestión audio  Lo más complicado: conseguir crear un Android.mk para compilarlo (un par de días)
  • 29. The End ¡Gracias! fernando@ideaknow.com @fegabe