SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
Motorola Mobility


                                    Peter van der Linden
                         Evangelista de la tecnología Android
                    Plataformas y Servicios del Desarrollador




Gráficos cada vez más rápidos. Cómo usar
NDK y RenderScript
MOTODEV App Summit 2011                                                                   Page 2




1      CÓMO INSTALAR LAS HERRAMIENTAS

2      ESCRIBA SU CÓDIGO

3      CREE SU CÓDIGO

4      CÓMO LLAMAR A C DESDE JAVA (la JNI)

5      RESUMEN. Síntesis, Control de calidad




                                               © 2011 Motorola Mobility, © 2011 Motorola Mobility, Inc.
                                                                         Inc. Versión 1.0
MOTODEV App Summit 2011                             Page 3




¿POR QUÉ C/C++ CÓDIGO EN ANDROID?



        • Open GL

        • Desempeño

        • Puerto




                                © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                  Page 4




Limitaciones de NDK C++
 •  Originalmente para escribir partes críticas de
    desempeño del código en C

      •  No necesita una abstracción POO para eso (y
         Dalvik VM es mucho más rápido, con el compilador
         JIT desde 2.2)

 •  El soporte de C++ es algo limitado
     •  no tiene soporte para las excepciones
     •  conocidas como bugs en invocaciones de destructor/
        constructor estático

 •  De manera es más probable que el código NDK se
    escriba en C en lugar de C++                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                      Page 5




Arquitecturas CON SOPORTE DE CPU
    •  NDK soporta dos conjuntos de instrucción ARM:
          •  ARMv5TE (incluye instrucciones Thumb-1). Este es el
             destino predeterminado y el código compilado para que
             esto se ejecute en todos los dispositivos basados en ARM
             Android. Elija otro destino al cambiar una línea en el
             archivo Application.mk.
          •  ARMv7-A (incluye Thumb-2 e instrucciones VFPv3-D16
             con soporte opcional para instrucciones NEON/VFPv3-
             D32). El código compilado para ARMv7-A se ejecutará
             sólo en dispositivos, tales como Verizon Droid o Motorola
             XOOM que tienen v7 CPU. El código para NEON se
             ejecutará sólo en un ARMv7 con soporte para NEON.

    •  Hay una tercera arquitectura "en los
       trabajos" (experimental, sin soporte):
          •  conjunto de instrucciones x86
                                                                         © 2011 Motorola Mobility, Inc.
CÓMO INSTALAR LAS
HERRAMIENTAS
 MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings,   Versión 1.0
 LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc.
 Todos los derechos reservados.
MOTODEV App Summit 2011                                                Page 7




Cómo descargar el Native Development Kit

 • Verifique compatibilidad: XP o Vista, MacOS X 10.5,
   Ubuntu

 • Descargue el archivo comprimido de 50 MB o el archivo
   tar.bz2 desde:
         http://developer.android.com/sdk/ndk/index.html

 • Descomprímalo en el lugar que elija; recuerde dónde en
   $NDK
      export NDK=~/android-ndk-r5b

 • Requiere GNU make y GNU awk! Usuarios de Windows:
   instalar Cygwin 1.7 o superior                  © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                         Page 8




Usuarios de Windows
 •  Descargar e instalar Cygwin 1.7 o superior


 •  Herramientas de la línea de comando Unix/Linux para los usuarios de
    Windows
            http://cygwin.com




                                                            © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                  Page 9




Sugerencias para Windows y MacOS X

• No dejar espacios en los nombres de rutas. ¡En ningún
  lugar!
• Cygwin sólo instala los paquetes base.
• Usted necesita los paquetes de desarrollo. Es más fácil
  instalar la rama completa de Devel.
    1.  Ejecute setup.exe .
    2.  Haga clic en la palabra "Default" al lado del nódulo
        Devel de la raíz.
    3.  "Default" cambia a "Install" para el nódulo Devel.
    4.  Haga clic en "next” para instalar. Vaya a almorzar
        mientras se instala.
    5.  Deje que cree un icono de la consola cygwin en su
        computadora.
    6.  Escriba "make –v" en la consola de cygwin para
                                                     © 2011 Motorola Mobility, Inc.

        verificar que está bien.
MOTODEV App Summit 2011                                          Page 10




Abra el Native Development Kit
• Hay 7 carpetas y varias cosas para leer:




                                             © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                  Page 11



Carpetas NDK




 • build : 4 carpetas con notas de awk & shell, archivos makefiles para construir
   sus archivos C/C++
 • docs: alrededor de 20 archivos de texto (preguntas frecuentes sobre NDK);
   acceda a ellas en documentation.html
 • platforms: archivos .h y system library.so p/los distintos niveles IPA
 • samples: una docena de ejemplos
 • sources: algunas fuentes para asuntos relacionados con el sistema
 • tests: notas para probar el mismo NDK. Probablemente aquí por error.
 • toolchains: cadena de herramientas para cross-compilación


                                                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                       Page 12




Agregar soporte C/C++ a Eclipse

•  Eclipse tiene un plugin para C/C++, como para Android

•  Cómo usar Eclipse
       Help > Install new software

•  Escriba http://download.eclipse.org/releases/helios/ en el
         campo "work with" (o en la versión que use)

•  Advertencias habituales sobre proxies de la red en el trabajo
   (configúrelas en MOTODEV Studio > Preferences >
   Network Conn.)

•  Haga clic en Programming Langs > C/C++ Development Tools

                                                           © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                  Page 13




    •  Hay un plugin para C/C++, como para Android

    •  Cómo usar Eclipse
          Help > Install new software




                                                     © 2011 Motorola Mobility, Inc.
Escriba su código C

  MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings,
  LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc.
  Todos los derechos reservados.
MOTODEV App Summit 2011                                                      Page 15




Enfoque general

      • Comience con una aplicación Java Android y agréguele
      piezas de NDK

      • Ponga sus fuentes nativas C/C++ en $PROJECT/jni:

      • Construya su código nativo en las bibliotecas.

      • Su código Android Java puede recibir estas bibliotecas
      nativas

      • El código nativo puede también retornar a Java y acceder
      a objetos de Java


                                                          © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                          Page 16




                          Cree el proyecto
                          Android de la
                          manera habitual




                                             © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                          Page 17




Cree la carpeta jni para su proyecto

        •  Resalte el proyecto Eclipse que usará el código nativo

        •  El nombre de su paquete se usa para acceder al código
           nativo, por eso, hágalo corto y simple, ej. "com.greet" p/
           fines de capacitación

        •  File > New > Folder
              •  póngale el nombre "jni"

        •  Dentro de esa carpeta jni recién creada, agregaremos
            •  un archivo makefile
            •  algunos archivos C

                                                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                           Page 18



Agregue dos archivos a la carpeta "jni" en su
proyecto

        •  File > New > Other …
        •  Seleccione "General", luego "file", luego navegue
        •  Seleccione la carpeta jni c/un nombre de archivo
           "Android.mk">Finish
        •  Repita, al crear un archivo "myhello.c", también en
           la carpeta jni
        •  Eso le da
            •  jni/Android.mk
            •  jni/myhello.c


                                                               © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                       Page 19




Complete la carpeta jnien la carpeta jni
 Cómo crear archivos en su proyecto

    salud
    ar




                                           © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                  Page 20




Cómo crear mkfile en la carpeta jni




                                      © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                           Page 21




Complete el archivo Android.mk makefile
        •  Corrija el archivo jni/Android.mk que recién creó
        •  Ponga estas palabras mágicas en makefile


       LOCAL_PATH := $(call my-dir)!

       include $(CLEAR_VARS)!

       # numere nuestro archivo fuente y la biblioteca!
       # desde él!
       LOCAL_MODULE    := hello!
       LOCAL_SRC_FILES := hello.c!

       include $(BUILD_SHARED_LIBRARY)!



                                                               © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                          Page 22




Acerca de make
        •  Make fue creado por Stu Feldman en 1977 en los Laboratorios Bell
        •  En 2003, Dr. Feldman recibió el premio ACM Software System Award
          por publicar esta herramienta de gran difusión.
        •  Usted no sabía de mí, pero el conocimiento del software tiene eso que…




        # cada comando que sigue la línea de dependencia,
        # por ejemplo, el DESTINO a la izquierda, debe ser indentado por un
        # caracter de TAB.

        target: component-to-build
            <TAB>commands-to-build-it!




                                                                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                            Page 23




Cree el código C en su carpeta jni

       • Corrija el archivo jni/myhello.c que recién creó
       • Ponga estas palabras mágicas en el archivo
       • Usa el objeto JNIEnv p/crear 1 cadena Java desde 1 literal



        #include <string.h>
        #include <jni.h>

        jstring Java_com_greet_MyActivity_myCFunction
                    (JNIEnv* env, jobject javaThis) {
          return (*env)->NewStringUTF(env, "Hello from native
        code!");
        }
                                                                © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                   Page 24




Código C explicado
      Cuando JVM invoca una función nativa, pasa
      •  un puntero JNIEnv (estructura que tiene la interfaz a JVM p/C)
      •  un puntero jobject (el objeto "this")
      •  cualquier argumento Java declarado por el método Java.

      Estos tipos vienen de #include <jni.h> (consulte en "platforms")
      Su método C debe escribirse para esperar estos argumentos
      El método C se denomina "Java"_classname_activity_methodname

      #include <string.h>
      #include <jni.h>

      jstring Java_com_greet_MyActivity_myCFunction
                  (JNIEnv* env, jobject javaThis) {
        return (*env)->NewStringUTF(env, "Hello from native code!");
      }!

      •  … parece, pero no es, ¿una pérdida de memoria?
                                                                       © 2011 Motorola Mobility, Inc.
Cree su código C

 MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings,
 LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc.
 Todos los derechos reservados.
MOTODEV App Summit 2011                                                       Page 26



Cómo llamar entre idiomas



    • Android sigue el camino estándar para hablar entre Java
    yC

    • JNI: Java Native Interface (Interfaz nativa Java)

    • Enlace a documentos JNI
    http://java.sun.com/docs/books/jni/

    • Eso incluye un libro completo, un tutorial, ejemplos, etc.


                                                          © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                           Page 27



Cree su biblioteca C
   •  Traiga 1 emulador de terminal y cd en su carpeta jni d/proyecto
   •  Use la nota "ndk-build" del directorio NDK (un contenido adicional
      GNU Make) (puede poner $NDK en su ruta, si desea)
   •  La nota compila su código C, lo convierte en una biblioteca
      compartida
   •  Pasa libhello.so a una nueva carpeta de proyecto libs/armeabi




                                                               © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                  Page 28



Enfoque general para crear una biblioteca
  •  Guarde los archivos en Eclipse
  •  Traiga un emulador de terminal y cd en su carpeta jni del proyecto
  •  Ejecute el script ndk-build para convertir su código C en un .so
  •  Ese lib*.so se agregará en su archivo de aplicación .apk
  •  File > Refresh en Eclipse (para sincronizar con el sistema de archivos)




$ cd MYECLIPSEPROJECT/jni!
$ $NDK/ndk-build !

Compilar thumb : hello <= hello.c!
SharedLibrary : libhello.so!
Instalar       : libhello.so => libs/armeabi/libhello.so!



                                                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                       Page 29



CONSTRUYA SU BIBLIOTECA: resumen


  •  Eclipse no construye su código NDK, GNU Make sí

  •  El plugin C/C++ le da colores de sintaxis y corrección
     (solamente)

  •  Ejecute el scrip "ndk-build" después de cada corrección de
     su código C

  •  Luego, haga clic en File > Refresh, (F5), para mantener a
     Eclipse en sincronismo c/ sus archivos nativos



                                                          © 2011 Motorola Mobility, Inc.
El lado Java de JNI

  MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings,
  LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc.
  Todos los derechos reservados.
MOTODEV App Summit 2011                                                Page 31



El código Java que llama al código nativo

   •  Comience c/la aplicación básica que le da Eclipse

package com.greet;!

import android.app.Activity;!
import android.os.Bundle;!

public class MyActivity extends Activity {!
    /** Llamado cuando la actividad se crea por primera
vez. */!
    @Override!
    public void onCreate(Bundle savedInstanceState) {!
         super.onCreate(savedInstanceState);!
         setContentView(R.layout.main);!
    }!
}!
                                                    © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                 Page 32



Agregar la carga de biblioteca

   •  Agregue la llamada para cargar nuestra biblioteca
      nativa libhello.so
   •  el nombre debe coincidir con el nombre de la
      biblioteca sin "lib" ni ".so“
   •  entonces libhello.so es "hello"

static {!
    System.loadLibrary("hello");!
}!




                                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                           Page 33



Agregar la declaración de la función nativa

   •  Agregar la declaración del prototipo de la función C

   •  Del lado de C, tiene dos argumentos explícitos, un envp, un this

   •  Del lado de Java, esos argumentos son implícitos


private native String myCFunction(); !




                                                               © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                          Page 34



Agregar el llamado a la función nativa

     •  Vamos a obtener la cadena de C y mostrarla como una
     notificación (“toast”).


 import static android.widget.Toast.*;!
 import android.widget.Toast;!

        . . .!

    String msg = myCFunction();!
    Toast.makeText(this, msg, LENGTH_LONG).show();!




                                                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                           Page 35



Cómo juntamos las piezas
 package com.greet;!

 Import    android.app.Activity;!
 import    android.os.Bundle;!
 import    static android.widget.Toast.*;!
 import    android.widget.Toast;!

 public class MyActivity extends Activity {!

 static {     System.loadLibrary("hello"); }!

 private native String myCFunction(); !

      @Override!
      public void onCreate(Bundle savedInstanceState) {!
          super.onCreate(savedInstanceState);!
          setContentView(R.layout.main);!

            String msg = myCFunction();!

            Toast.makeText(this, msg, LENGTH_LONG).show();!
      }!
 }!

                                                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                       Page 36




                          © 2011 Motorola Mobility, Inc.
Resumen
MOTODEV App Summit 2011                                                  Page 38




EL COMIENZO

 Este puede ser un hermoso comienzo de un largo camino

 • http://groups.google.com/group/android-ndk/topics

 •  http://java.sun.com/docs/books/jni/

 • http://developer.android.com/sdk/ndk/index.html




                                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                               Page
                                                                                      Página39




Renderscript
•  Nuevo, API de gráficos en 3D de alto
   desempeño
•  Se usó en Froyo para papel tapiz en
   vivo
•  Se usa en Honeycomb para
   aplicaciones de Books y YouTube
•  Honeycomb presenta Renderscript
   como una API pública
•  Para código crítico de desempeño
   donde las API del marco tradicional
   Open GL ES no son los
   suficientemente rápidas.

                                          © 2010 Motorola Mobility, Inc. Versión 1.0
                                                                  © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                               Page
                                                                       Página40



Ejemplo de Renderscript




                           © 2010 Motorola Mobility, Inc. Versión 1.0
                                                   © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                               Page
                                                                       Página41




App Books y Renderscript




                           © 2010 Motorola Mobility, Inc. Versión 1.0
                                                   © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                       Page
                                                                                               Página42




API de Renderscript

•  Una API de "computing" para localizar puntos móviles en 3D
•  Una API de "rendering" para dibujar texturas sobre los puntos
•  Un lenguaje de script basado en C para acceder a esta API
•  Única meta: exprimir hasta la última onza de desempeño de
   los gráficos
•  Enfoque: API es una capa delgada sobre las características con
   soporte de hardware
•  http://community.developer.motorola.com/t5/MOTODEV-Blog/
   Introduction-to-Renderscript/ba-p/12136



                                                   © 2010 Motorola Mobility, Inc. Versión 1.0
                                                                           © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                            Page
                                                                                    Página43




API de Renderscript

•  Android construye elementos que compilan su archivo Renderscript .rs
   a bytecode intermedio
•  Y lo empaquetan dentro de su archivo de aplicación .apk
•  En el dispositivo, el bytecode se compila (justo a tiempo – JIT) en el
   código de máquina que se optimiza para el dispositivo exacto que
   se está ejecutando
•  El código de la máquina se pone en caché para uso futuro
•  Así se elimina la necesidad de apuntar a una arquitectura específica
   durante le proceso de desarrollo. ¡Excelente!




                                                                © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                     Page
                                                                                             Página44

Ejemplo de archivo .rs (de muestras de Honeycomb)
    #pragma rs java_package_name(com.android.rs.helloworld)!

    #include "rs_graphics.rsh" // header de API de gráficos!

    // gTouchX y gTouchY son variables que se reflejarán para uso!
    // por la API de java. Podemos usarlas para notificar la nota de!
    // eventos táctiles.!
    int gTouchX;!
    int gTouchY;!

    // Esto se invoca automáticamente cuando se crean las instrucciones!
    void init() {!
        gTouchX = 50.0f;!
        gTouchY = 50.0f;!
    }!

    int root(int launchID) {!
        // Borrar el color de fondo!
        rsgClearColor(0.0f, 0.0f, 0.0f, 0.0f);!
        // Decir al tiempo de ejecución cuál será el color de la fuente!
        rsgFontColor(1.0f, 1.0f, 1.0f, 1.0f);!
        // Presentarnos al mundo al diseñar un saludo!
        // en la posición que el usuario tocó la pantalla!
        rsgDrawText("Hello World!", gTouchX, gTouchY);!

          // El valor de retorno le dice a RS la frecuencia para rediseñar!
          // en este caso 20 ms!
                                                                    © 2011 Versión 1.0
                                                                           Motorola Mobility, Inc.
          return 20;!
    }!
MOTODEV App Summit 2011                                                     Page 45




             ¿Desea	
  formular	
  alguna	
  
                   pregunta?
                            Brasil - #appsum11br
                          Argentina - #appsum11ar
                           México - #appsum11mx


                     community.developer.motorola.com
                                                        © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                 Page 46




                          gracias




                                    © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                                     Page 47




Licencias

Los ejemplos del código fuente que se exhiben en esta presentación pueden estar bajo la licencia
   de Apache, Versión 2 según lo siguiente:


    Copyright © 2010, Android Open Source Project. Todos los derechos reservados, salvo indicación
    expresa en contrario.


    Con licencia de Apache, Versión 2.0 (la "Licencia"); no podrá usar este archivo, salvo que cumpla con
    lo que establece la Licencia. Puede conseguir una copia de la licencia en
    http://www.apache.org/licenses/LICENSE-2.0.


    Salvo que lo exija la legislación vigente o se preste conformidad por escrito, el software se distribuye
    bajo la Licencia "EN EL ESTADO EN QUE SE ENCUENTRA", SIN GARANTÍAS NI CONDICIONES
    DE NINGÚN TIPO, explícitas o implícitas. Consulte la Licencia para ver los permisos y las limitaciones
    que rigen para la Licencia según el idioma específico.




                                                                                         © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                                                   Page 48




Licencias
Los ejemplos del código fuente que se muestran en esta presentación pueden estar bajo la
   licencia BSD, según lo siguiente:

Copyright © 2010-2011, Motorola, Inc. Todos los derechos reservados, salvo indicación expresa en contrario.
Se permite la redistribución y el uso en forma de fuente o binaria, con o sin modificación, siempre y cuando se cumpla con
   las siguientes condiciones:
  Las redistribuciones del código fuente deben conservar el aviso de derechos de autor arriba mencionado, la presente
   lista de condiciones y el siguiente descargo de responsabilidad.
  Las redistribuciones en forma binaria deben reproducir el aviso de derechos de autor arriba mencionado, la presente
   lista de condiciones y el siguiente descargo de responsabilidad en la documentación y/u otros materiales suministrados
   con la distribución.
  Ni el nombre de Motorola, Inc. ni los nombres de sus distribuidores pueden usarse para avalar o promover productos
   que deriven de este software sin previa autorización específica por escrito.


EL PRESENTE SOFTWARE SE SUMINISTRA POR LOS TITULARES DE LOS DERECHOS DE AUTOR Y
   CONTRIBUYENTES EN EL ESTADO "EN QUE SE ENCUENTRA" Y SE RECHAZA TODA RESPONSABILIDAD DE
   GARANTÍA IMPLÍCITA O EXPLÍCITA, A TÍTULO ENUNCIATIVO, LAS GARANTÍAS IMPLÍCITAS DE
   COMERCIALIZACIÓN Y DE APTITUD PARA UN PROPÓSITO PARTICULAR. EN NINGÚN CASO PODRÁ EL
   TITULAR DE LOS DERECHOS DE AUTOR O LOS CONTRIBUYENTES SER RESPONSABLE POR NINGÚN DAÑO
   Y PERJUICIO DIRECTO, INDIRECTO, INCIDENTAL, ESPECIAL, PUNITIVO, O CONSECUENCIAL (A TÍTULO
   ENUNCIATIVO DE ABASTECIMIENTO DE BIENES O SERVICIOS DE SUSTITUCIÓN; PÉRDIDA DE USO, DATOS O
   GANANCIAS O INTERRUPCIÓN DE ACTIVIDADES) INDEPENDIENTEMENTE DE SU ORIGEN Y DE TODA TEORÍA
   DE RESPONSABILIDAD, YA SEA EN EL CONTRATO, RESPONSABILIDAD ESTRICTA O POR LESIÓN JURÍDICA
   (INCLUSO NEGLIGENCIA O DE OTRO MODO) QUE SURJA DE ALGUNA MANERA DEL USO DE ESTE
   SOFTWARE, INCLUSO SI SE ADVIRTIÓ DE LA POSIBILIDAD DE DICHO DAÑO.
                                                                                                       © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                       Page 49




                          © 2011 Motorola Mobility, Inc.

Contenu connexe

Tendances

Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
sena
 

Tendances (19)

Hack x crack_java
Hack x crack_javaHack x crack_java
Hack x crack_java
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
Compiladores (python)
Compiladores (python)Compiladores (python)
Compiladores (python)
 
[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
 
Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.java
 
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)
 
Arquitectura y diseño de un entorno de desarrollo - decharlas
Arquitectura y diseño de un entorno de desarrollo - decharlasArquitectura y diseño de un entorno de desarrollo - decharlas
Arquitectura y diseño de un entorno de desarrollo - decharlas
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
Code block
Code blockCode block
Code block
 
Ut
UtUt
Ut
 
Lenguaje cc++
Lenguaje cc++Lenguaje cc++
Lenguaje cc++
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 
Lenguaje de programación java. Detalles
Lenguaje de programación java. DetallesLenguaje de programación java. Detalles
Lenguaje de programación java. Detalles
 
Java de erlin
Java de erlinJava de erlin
Java de erlin
 
Ionic 2
Ionic 2 Ionic 2
Ionic 2
 
JAVA
JAVAJAVA
JAVA
 
Que Es Java
Que Es JavaQue Es Java
Que Es Java
 

Similaire à Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript

Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
Motorola Mobility - MOTODEV
 
Android 24 01 getting started with android
Android 24 01 getting started with androidAndroid 24 01 getting started with android
Android 24 01 getting started with android
Arturo Linares Valverde
 

Similaire à Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript (20)

Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforum
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
 
Software en la actualidad
Software en la actualidadSoftware en la actualidad
Software en la actualidad
 
Topicos Avanzados de Programacion - Unidad 5 programacion movil
Topicos Avanzados de Programacion -  Unidad 5 programacion movilTopicos Avanzados de Programacion -  Unidad 5 programacion movil
Topicos Avanzados de Programacion - Unidad 5 programacion movil
 
Android 24 01 getting started with android
Android 24 01 getting started with androidAndroid 24 01 getting started with android
Android 24 01 getting started with android
 
Tópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movilTópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movil
 
6 Lenguajes para dispositivos móviles
6 Lenguajes para dispositivos móviles 6 Lenguajes para dispositivos móviles
6 Lenguajes para dispositivos móviles
 
Introducción a la programación androide
Introducción a la programación androideIntroducción a la programación androide
Introducción a la programación androide
 
Lenguajes de programacion rivas maldonado
Lenguajes de programacion  rivas maldonadoLenguajes de programacion  rivas maldonado
Lenguajes de programacion rivas maldonado
 
Introducción a la Plataforma para Móviles Android
Introducción a la Plataforma  para Móviles AndroidIntroducción a la Plataforma  para Móviles Android
Introducción a la Plataforma para Móviles Android
 
Tutorial de- c. ++
Tutorial de- c. ++ Tutorial de- c. ++
Tutorial de- c. ++
 
Tutorial de-c ++
Tutorial de-c ++Tutorial de-c ++
Tutorial de-c ++
 
Tutorial de-c ++
Tutorial de-c ++Tutorial de-c ++
Tutorial de-c ++
 
Introducion a Mono
Introducion a  MonoIntroducion a  Mono
Introducion a Mono
 
Meetup app-moviles
Meetup app-movilesMeetup app-moviles
Meetup app-moviles
 
U1 p5 entornos_desarrollo_moviles
U1 p5 entornos_desarrollo_movilesU1 p5 entornos_desarrollo_moviles
U1 p5 entornos_desarrollo_moviles
 
Tutorial de-c
Tutorial de-cTutorial de-c
Tutorial de-c
 
Tutorial de-c
Tutorial de-cTutorial de-c
Tutorial de-c
 
NetBeanside
NetBeansideNetBeanside
NetBeanside
 
De Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreDe Windows Phone App Studio a la Store
De Windows Phone App Studio a la Store
 

Plus de Motorola Mobility - MOTODEV

HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the Future
Motorola Mobility - MOTODEV
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Motorola Mobility - MOTODEV
 
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioCómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Motorola Mobility - MOTODEV
 
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptGráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Motorola Mobility - MOTODEV
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testes
Motorola Mobility - MOTODEV
 
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Motorola Mobility - MOTODEV
 

Plus de Motorola Mobility - MOTODEV (20)

HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the Future
 
The Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. WebThe Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. Web
 
Kill the Laptop!
Kill the Laptop!Kill the Laptop!
Kill the Laptop!
 
MOTODEV App Validator
MOTODEV App ValidatorMOTODEV App Validator
MOTODEV App Validator
 
Beautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens TooBeautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens Too
 
Getting the Magic on Android Tablets
Getting the Magic on Android TabletsGetting the Magic on Android Tablets
Getting the Magic on Android Tablets
 
Getting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & BeyondGetting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & Beyond
 
Introducing Fragments
Introducing FragmentsIntroducing Fragments
Introducing Fragments
 
Taking Advantage of Webtop
Taking Advantage of WebtopTaking Advantage of Webtop
Taking Advantage of Webtop
 
Building Quality Into Your Apps Through Testing
Building Quality Into Your Apps Through TestingBuilding Quality Into Your Apps Through Testing
Building Quality Into Your Apps Through Testing
 
Top Tips for Android UIs
Top Tips for Android UIsTop Tips for Android UIs
Top Tips for Android UIs
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
Diseñando aplicaciones para el Motorola XOOM
Diseñando aplicaciones para el Motorola XOOM Diseñando aplicaciones para el Motorola XOOM
Diseñando aplicaciones para el Motorola XOOM
 
Presentación de los fragmentos
Presentación de los fragmentos Presentación de los fragmentos
Presentación de los fragmentos
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
 
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioCómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
 
Principais dicas para UIs do Android
Principais dicas para UIs do AndroidPrincipais dicas para UIs do Android
Principais dicas para UIs do Android
 
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptGráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testes
 
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
 

Dernier

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Dernier (15)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript

  • 1. Motorola Mobility Peter van der Linden Evangelista de la tecnología Android Plataformas y Servicios del Desarrollador Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
  • 2. MOTODEV App Summit 2011 Page 2 1 CÓMO INSTALAR LAS HERRAMIENTAS 2 ESCRIBA SU CÓDIGO 3 CREE SU CÓDIGO 4 CÓMO LLAMAR A C DESDE JAVA (la JNI) 5 RESUMEN. Síntesis, Control de calidad © 2011 Motorola Mobility, © 2011 Motorola Mobility, Inc. Inc. Versión 1.0
  • 3. MOTODEV App Summit 2011 Page 3 ¿POR QUÉ C/C++ CÓDIGO EN ANDROID? • Open GL • Desempeño • Puerto © 2011 Motorola Mobility, Inc.
  • 4. MOTODEV App Summit 2011 Page 4 Limitaciones de NDK C++ •  Originalmente para escribir partes críticas de desempeño del código en C •  No necesita una abstracción POO para eso (y Dalvik VM es mucho más rápido, con el compilador JIT desde 2.2) •  El soporte de C++ es algo limitado •  no tiene soporte para las excepciones •  conocidas como bugs en invocaciones de destructor/ constructor estático •  De manera es más probable que el código NDK se escriba en C en lugar de C++ © 2011 Motorola Mobility, Inc.
  • 5. MOTODEV App Summit 2011 Page 5 Arquitecturas CON SOPORTE DE CPU •  NDK soporta dos conjuntos de instrucción ARM: •  ARMv5TE (incluye instrucciones Thumb-1). Este es el destino predeterminado y el código compilado para que esto se ejecute en todos los dispositivos basados en ARM Android. Elija otro destino al cambiar una línea en el archivo Application.mk. •  ARMv7-A (incluye Thumb-2 e instrucciones VFPv3-D16 con soporte opcional para instrucciones NEON/VFPv3- D32). El código compilado para ARMv7-A se ejecutará sólo en dispositivos, tales como Verizon Droid o Motorola XOOM que tienen v7 CPU. El código para NEON se ejecutará sólo en un ARMv7 con soporte para NEON. •  Hay una tercera arquitectura "en los trabajos" (experimental, sin soporte): •  conjunto de instrucciones x86 © 2011 Motorola Mobility, Inc.
  • 6. CÓMO INSTALAR LAS HERRAMIENTAS MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings, Versión 1.0 LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc. Todos los derechos reservados.
  • 7. MOTODEV App Summit 2011 Page 7 Cómo descargar el Native Development Kit • Verifique compatibilidad: XP o Vista, MacOS X 10.5, Ubuntu • Descargue el archivo comprimido de 50 MB o el archivo tar.bz2 desde: http://developer.android.com/sdk/ndk/index.html • Descomprímalo en el lugar que elija; recuerde dónde en $NDK export NDK=~/android-ndk-r5b • Requiere GNU make y GNU awk! Usuarios de Windows: instalar Cygwin 1.7 o superior © 2011 Motorola Mobility, Inc.
  • 8. MOTODEV App Summit 2011 Page 8 Usuarios de Windows •  Descargar e instalar Cygwin 1.7 o superior •  Herramientas de la línea de comando Unix/Linux para los usuarios de Windows http://cygwin.com © 2011 Motorola Mobility, Inc.
  • 9. MOTODEV App Summit 2011 Page 9 Sugerencias para Windows y MacOS X • No dejar espacios en los nombres de rutas. ¡En ningún lugar! • Cygwin sólo instala los paquetes base. • Usted necesita los paquetes de desarrollo. Es más fácil instalar la rama completa de Devel. 1.  Ejecute setup.exe . 2.  Haga clic en la palabra "Default" al lado del nódulo Devel de la raíz. 3.  "Default" cambia a "Install" para el nódulo Devel. 4.  Haga clic en "next” para instalar. Vaya a almorzar mientras se instala. 5.  Deje que cree un icono de la consola cygwin en su computadora. 6.  Escriba "make –v" en la consola de cygwin para © 2011 Motorola Mobility, Inc. verificar que está bien.
  • 10. MOTODEV App Summit 2011 Page 10 Abra el Native Development Kit • Hay 7 carpetas y varias cosas para leer: © 2011 Motorola Mobility, Inc.
  • 11. MOTODEV App Summit 2011 Page 11 Carpetas NDK • build : 4 carpetas con notas de awk & shell, archivos makefiles para construir sus archivos C/C++ • docs: alrededor de 20 archivos de texto (preguntas frecuentes sobre NDK); acceda a ellas en documentation.html • platforms: archivos .h y system library.so p/los distintos niveles IPA • samples: una docena de ejemplos • sources: algunas fuentes para asuntos relacionados con el sistema • tests: notas para probar el mismo NDK. Probablemente aquí por error. • toolchains: cadena de herramientas para cross-compilación © 2011 Motorola Mobility, Inc.
  • 12. MOTODEV App Summit 2011 Page 12 Agregar soporte C/C++ a Eclipse •  Eclipse tiene un plugin para C/C++, como para Android •  Cómo usar Eclipse Help > Install new software •  Escriba http://download.eclipse.org/releases/helios/ en el campo "work with" (o en la versión que use) •  Advertencias habituales sobre proxies de la red en el trabajo (configúrelas en MOTODEV Studio > Preferences > Network Conn.) •  Haga clic en Programming Langs > C/C++ Development Tools © 2011 Motorola Mobility, Inc.
  • 13. MOTODEV App Summit 2011 Page 13 •  Hay un plugin para C/C++, como para Android •  Cómo usar Eclipse Help > Install new software © 2011 Motorola Mobility, Inc.
  • 14. Escriba su código C MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings, LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc. Todos los derechos reservados.
  • 15. MOTODEV App Summit 2011 Page 15 Enfoque general • Comience con una aplicación Java Android y agréguele piezas de NDK • Ponga sus fuentes nativas C/C++ en $PROJECT/jni: • Construya su código nativo en las bibliotecas. • Su código Android Java puede recibir estas bibliotecas nativas • El código nativo puede también retornar a Java y acceder a objetos de Java © 2011 Motorola Mobility, Inc.
  • 16. MOTODEV App Summit 2011 Page 16 Cree el proyecto Android de la manera habitual © 2011 Motorola Mobility, Inc.
  • 17. MOTODEV App Summit 2011 Page 17 Cree la carpeta jni para su proyecto •  Resalte el proyecto Eclipse que usará el código nativo •  El nombre de su paquete se usa para acceder al código nativo, por eso, hágalo corto y simple, ej. "com.greet" p/ fines de capacitación •  File > New > Folder •  póngale el nombre "jni" •  Dentro de esa carpeta jni recién creada, agregaremos •  un archivo makefile •  algunos archivos C © 2011 Motorola Mobility, Inc.
  • 18. MOTODEV App Summit 2011 Page 18 Agregue dos archivos a la carpeta "jni" en su proyecto •  File > New > Other … •  Seleccione "General", luego "file", luego navegue •  Seleccione la carpeta jni c/un nombre de archivo "Android.mk">Finish •  Repita, al crear un archivo "myhello.c", también en la carpeta jni •  Eso le da •  jni/Android.mk •  jni/myhello.c © 2011 Motorola Mobility, Inc.
  • 19. MOTODEV App Summit 2011 Page 19 Complete la carpeta jnien la carpeta jni Cómo crear archivos en su proyecto salud ar © 2011 Motorola Mobility, Inc.
  • 20. MOTODEV App Summit 2011 Page 20 Cómo crear mkfile en la carpeta jni © 2011 Motorola Mobility, Inc.
  • 21. MOTODEV App Summit 2011 Page 21 Complete el archivo Android.mk makefile •  Corrija el archivo jni/Android.mk que recién creó •  Ponga estas palabras mágicas en makefile LOCAL_PATH := $(call my-dir)! include $(CLEAR_VARS)! # numere nuestro archivo fuente y la biblioteca! # desde él! LOCAL_MODULE := hello! LOCAL_SRC_FILES := hello.c! include $(BUILD_SHARED_LIBRARY)! © 2011 Motorola Mobility, Inc.
  • 22. MOTODEV App Summit 2011 Page 22 Acerca de make •  Make fue creado por Stu Feldman en 1977 en los Laboratorios Bell •  En 2003, Dr. Feldman recibió el premio ACM Software System Award por publicar esta herramienta de gran difusión. •  Usted no sabía de mí, pero el conocimiento del software tiene eso que… # cada comando que sigue la línea de dependencia, # por ejemplo, el DESTINO a la izquierda, debe ser indentado por un # caracter de TAB. target: component-to-build <TAB>commands-to-build-it! © 2011 Motorola Mobility, Inc.
  • 23. MOTODEV App Summit 2011 Page 23 Cree el código C en su carpeta jni • Corrija el archivo jni/myhello.c que recién creó • Ponga estas palabras mágicas en el archivo • Usa el objeto JNIEnv p/crear 1 cadena Java desde 1 literal #include <string.h> #include <jni.h> jstring Java_com_greet_MyActivity_myCFunction (JNIEnv* env, jobject javaThis) { return (*env)->NewStringUTF(env, "Hello from native code!"); } © 2011 Motorola Mobility, Inc.
  • 24. MOTODEV App Summit 2011 Page 24 Código C explicado Cuando JVM invoca una función nativa, pasa •  un puntero JNIEnv (estructura que tiene la interfaz a JVM p/C) •  un puntero jobject (el objeto "this") •  cualquier argumento Java declarado por el método Java. Estos tipos vienen de #include <jni.h> (consulte en "platforms") Su método C debe escribirse para esperar estos argumentos El método C se denomina "Java"_classname_activity_methodname #include <string.h> #include <jni.h> jstring Java_com_greet_MyActivity_myCFunction (JNIEnv* env, jobject javaThis) { return (*env)->NewStringUTF(env, "Hello from native code!"); }! •  … parece, pero no es, ¿una pérdida de memoria? © 2011 Motorola Mobility, Inc.
  • 25. Cree su código C MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings, LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc. Todos los derechos reservados.
  • 26. MOTODEV App Summit 2011 Page 26 Cómo llamar entre idiomas • Android sigue el camino estándar para hablar entre Java yC • JNI: Java Native Interface (Interfaz nativa Java) • Enlace a documentos JNI http://java.sun.com/docs/books/jni/ • Eso incluye un libro completo, un tutorial, ejemplos, etc. © 2011 Motorola Mobility, Inc.
  • 27. MOTODEV App Summit 2011 Page 27 Cree su biblioteca C •  Traiga 1 emulador de terminal y cd en su carpeta jni d/proyecto •  Use la nota "ndk-build" del directorio NDK (un contenido adicional GNU Make) (puede poner $NDK en su ruta, si desea) •  La nota compila su código C, lo convierte en una biblioteca compartida •  Pasa libhello.so a una nueva carpeta de proyecto libs/armeabi © 2011 Motorola Mobility, Inc.
  • 28. MOTODEV App Summit 2011 Page 28 Enfoque general para crear una biblioteca •  Guarde los archivos en Eclipse •  Traiga un emulador de terminal y cd en su carpeta jni del proyecto •  Ejecute el script ndk-build para convertir su código C en un .so •  Ese lib*.so se agregará en su archivo de aplicación .apk •  File > Refresh en Eclipse (para sincronizar con el sistema de archivos) $ cd MYECLIPSEPROJECT/jni! $ $NDK/ndk-build ! Compilar thumb : hello <= hello.c! SharedLibrary : libhello.so! Instalar : libhello.so => libs/armeabi/libhello.so! © 2011 Motorola Mobility, Inc.
  • 29. MOTODEV App Summit 2011 Page 29 CONSTRUYA SU BIBLIOTECA: resumen •  Eclipse no construye su código NDK, GNU Make sí •  El plugin C/C++ le da colores de sintaxis y corrección (solamente) •  Ejecute el scrip "ndk-build" después de cada corrección de su código C •  Luego, haga clic en File > Refresh, (F5), para mantener a Eclipse en sincronismo c/ sus archivos nativos © 2011 Motorola Mobility, Inc.
  • 30. El lado Java de JNI MOTOROLA y el logotipo estilizado "M" son marcas de fábrica o marcas registradas de Motorola Trademark Holdings, LLC. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. © 2011 Motorola Mobility, Inc. Todos los derechos reservados.
  • 31. MOTODEV App Summit 2011 Page 31 El código Java que llama al código nativo •  Comience c/la aplicación básica que le da Eclipse package com.greet;! import android.app.Activity;! import android.os.Bundle;! public class MyActivity extends Activity {! /** Llamado cuando la actividad se crea por primera vez. */! @Override! public void onCreate(Bundle savedInstanceState) {! super.onCreate(savedInstanceState);! setContentView(R.layout.main);! }! }! © 2011 Motorola Mobility, Inc.
  • 32. MOTODEV App Summit 2011 Page 32 Agregar la carga de biblioteca •  Agregue la llamada para cargar nuestra biblioteca nativa libhello.so •  el nombre debe coincidir con el nombre de la biblioteca sin "lib" ni ".so“ •  entonces libhello.so es "hello" static {! System.loadLibrary("hello");! }! © 2011 Motorola Mobility, Inc.
  • 33. MOTODEV App Summit 2011 Page 33 Agregar la declaración de la función nativa •  Agregar la declaración del prototipo de la función C •  Del lado de C, tiene dos argumentos explícitos, un envp, un this •  Del lado de Java, esos argumentos son implícitos private native String myCFunction(); ! © 2011 Motorola Mobility, Inc.
  • 34. MOTODEV App Summit 2011 Page 34 Agregar el llamado a la función nativa •  Vamos a obtener la cadena de C y mostrarla como una notificación (“toast”). import static android.widget.Toast.*;! import android.widget.Toast;! . . .! String msg = myCFunction();! Toast.makeText(this, msg, LENGTH_LONG).show();! © 2011 Motorola Mobility, Inc.
  • 35. MOTODEV App Summit 2011 Page 35 Cómo juntamos las piezas package com.greet;! Import android.app.Activity;! import android.os.Bundle;! import static android.widget.Toast.*;! import android.widget.Toast;! public class MyActivity extends Activity {! static { System.loadLibrary("hello"); }! private native String myCFunction(); ! @Override! public void onCreate(Bundle savedInstanceState) {! super.onCreate(savedInstanceState);! setContentView(R.layout.main);! String msg = myCFunction();! Toast.makeText(this, msg, LENGTH_LONG).show();! }! }! © 2011 Motorola Mobility, Inc.
  • 36. MOTODEV App Summit 2011 Page 36 © 2011 Motorola Mobility, Inc.
  • 38. MOTODEV App Summit 2011 Page 38 EL COMIENZO Este puede ser un hermoso comienzo de un largo camino • http://groups.google.com/group/android-ndk/topics •  http://java.sun.com/docs/books/jni/ • http://developer.android.com/sdk/ndk/index.html © 2011 Motorola Mobility, Inc.
  • 39. MOTODEV App Summit 2011 Page Página39 Renderscript •  Nuevo, API de gráficos en 3D de alto desempeño •  Se usó en Froyo para papel tapiz en vivo •  Se usa en Honeycomb para aplicaciones de Books y YouTube •  Honeycomb presenta Renderscript como una API pública •  Para código crítico de desempeño donde las API del marco tradicional Open GL ES no son los suficientemente rápidas. © 2010 Motorola Mobility, Inc. Versión 1.0 © 2011 Motorola Mobility, Inc.
  • 40. MOTODEV App Summit 2011 Page Página40 Ejemplo de Renderscript © 2010 Motorola Mobility, Inc. Versión 1.0 © 2011 Motorola Mobility, Inc.
  • 41. MOTODEV App Summit 2011 Page Página41 App Books y Renderscript © 2010 Motorola Mobility, Inc. Versión 1.0 © 2011 Motorola Mobility, Inc.
  • 42. MOTODEV App Summit 2011 Page Página42 API de Renderscript •  Una API de "computing" para localizar puntos móviles en 3D •  Una API de "rendering" para dibujar texturas sobre los puntos •  Un lenguaje de script basado en C para acceder a esta API •  Única meta: exprimir hasta la última onza de desempeño de los gráficos •  Enfoque: API es una capa delgada sobre las características con soporte de hardware •  http://community.developer.motorola.com/t5/MOTODEV-Blog/ Introduction-to-Renderscript/ba-p/12136 © 2010 Motorola Mobility, Inc. Versión 1.0 © 2011 Motorola Mobility, Inc.
  • 43. MOTODEV App Summit 2011 Page Página43 API de Renderscript •  Android construye elementos que compilan su archivo Renderscript .rs a bytecode intermedio •  Y lo empaquetan dentro de su archivo de aplicación .apk •  En el dispositivo, el bytecode se compila (justo a tiempo – JIT) en el código de máquina que se optimiza para el dispositivo exacto que se está ejecutando •  El código de la máquina se pone en caché para uso futuro •  Así se elimina la necesidad de apuntar a una arquitectura específica durante le proceso de desarrollo. ¡Excelente! © 2011 Motorola Mobility, Inc.
  • 44. MOTODEV App Summit 2011 Page Página44 Ejemplo de archivo .rs (de muestras de Honeycomb) #pragma rs java_package_name(com.android.rs.helloworld)! #include "rs_graphics.rsh" // header de API de gráficos! // gTouchX y gTouchY son variables que se reflejarán para uso! // por la API de java. Podemos usarlas para notificar la nota de! // eventos táctiles.! int gTouchX;! int gTouchY;! // Esto se invoca automáticamente cuando se crean las instrucciones! void init() {! gTouchX = 50.0f;! gTouchY = 50.0f;! }! int root(int launchID) {! // Borrar el color de fondo! rsgClearColor(0.0f, 0.0f, 0.0f, 0.0f);! // Decir al tiempo de ejecución cuál será el color de la fuente! rsgFontColor(1.0f, 1.0f, 1.0f, 1.0f);! // Presentarnos al mundo al diseñar un saludo! // en la posición que el usuario tocó la pantalla! rsgDrawText("Hello World!", gTouchX, gTouchY);! // El valor de retorno le dice a RS la frecuencia para rediseñar! // en este caso 20 ms! © 2011 Versión 1.0 Motorola Mobility, Inc. return 20;! }!
  • 45. MOTODEV App Summit 2011 Page 45 ¿Desea  formular  alguna   pregunta? Brasil - #appsum11br Argentina - #appsum11ar México - #appsum11mx community.developer.motorola.com © 2011 Motorola Mobility, Inc.
  • 46. MOTODEV App Summit 2011 Page 46 gracias © 2011 Motorola Mobility, Inc.
  • 47. MOTODEV App Summit 2011 Page 47 Licencias Los ejemplos del código fuente que se exhiben en esta presentación pueden estar bajo la licencia de Apache, Versión 2 según lo siguiente: Copyright © 2010, Android Open Source Project. Todos los derechos reservados, salvo indicación expresa en contrario. Con licencia de Apache, Versión 2.0 (la "Licencia"); no podrá usar este archivo, salvo que cumpla con lo que establece la Licencia. Puede conseguir una copia de la licencia en http://www.apache.org/licenses/LICENSE-2.0. Salvo que lo exija la legislación vigente o se preste conformidad por escrito, el software se distribuye bajo la Licencia "EN EL ESTADO EN QUE SE ENCUENTRA", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, explícitas o implícitas. Consulte la Licencia para ver los permisos y las limitaciones que rigen para la Licencia según el idioma específico. © 2011 Motorola Mobility, Inc.
  • 48. MOTODEV App Summit 2011 Page 48 Licencias Los ejemplos del código fuente que se muestran en esta presentación pueden estar bajo la licencia BSD, según lo siguiente: Copyright © 2010-2011, Motorola, Inc. Todos los derechos reservados, salvo indicación expresa en contrario. Se permite la redistribución y el uso en forma de fuente o binaria, con o sin modificación, siempre y cuando se cumpla con las siguientes condiciones: Las redistribuciones del código fuente deben conservar el aviso de derechos de autor arriba mencionado, la presente lista de condiciones y el siguiente descargo de responsabilidad. Las redistribuciones en forma binaria deben reproducir el aviso de derechos de autor arriba mencionado, la presente lista de condiciones y el siguiente descargo de responsabilidad en la documentación y/u otros materiales suministrados con la distribución. Ni el nombre de Motorola, Inc. ni los nombres de sus distribuidores pueden usarse para avalar o promover productos que deriven de este software sin previa autorización específica por escrito. EL PRESENTE SOFTWARE SE SUMINISTRA POR LOS TITULARES DE LOS DERECHOS DE AUTOR Y CONTRIBUYENTES EN EL ESTADO "EN QUE SE ENCUENTRA" Y SE RECHAZA TODA RESPONSABILIDAD DE GARANTÍA IMPLÍCITA O EXPLÍCITA, A TÍTULO ENUNCIATIVO, LAS GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN Y DE APTITUD PARA UN PROPÓSITO PARTICULAR. EN NINGÚN CASO PODRÁ EL TITULAR DE LOS DERECHOS DE AUTOR O LOS CONTRIBUYENTES SER RESPONSABLE POR NINGÚN DAÑO Y PERJUICIO DIRECTO, INDIRECTO, INCIDENTAL, ESPECIAL, PUNITIVO, O CONSECUENCIAL (A TÍTULO ENUNCIATIVO DE ABASTECIMIENTO DE BIENES O SERVICIOS DE SUSTITUCIÓN; PÉRDIDA DE USO, DATOS O GANANCIAS O INTERRUPCIÓN DE ACTIVIDADES) INDEPENDIENTEMENTE DE SU ORIGEN Y DE TODA TEORÍA DE RESPONSABILIDAD, YA SEA EN EL CONTRATO, RESPONSABILIDAD ESTRICTA O POR LESIÓN JURÍDICA (INCLUSO NEGLIGENCIA O DE OTRO MODO) QUE SURJA DE ALGUNA MANERA DEL USO DE ESTE SOFTWARE, INCLUSO SI SE ADVIRTIÓ DE LA POSIBILIDAD DE DICHO DAÑO. © 2011 Motorola Mobility, Inc.
  • 49. MOTODEV App Summit 2011 Page 49 © 2011 Motorola Mobility, Inc.