Este documento presenta varias estrategias y herramientas para desarrollar aplicaciones para Android, incluyendo desarrollo nativo usando Eclipse/Android Studio y Java, desarrollo híbrido usando Cordova o Xamarin, y desarrollo de código nativo usando el Kit de Desarrollo Nativo de Android. También proporciona detalles sobre cómo compilar código C/C++ para usarlo en aplicaciones Android a través de JNI y makefiles.
4. Apps verdaderamente nativas
(native^2)
• Código nativo (C, C++, ASM) compilado como
librerías binarias que invocas desde tu app.
• Android NDK (Native Development Kit)
5. Antes de aventurarnos
con NDK
• Existen distintas arquitecturas de procesador
(ej.ARM, ARM v7, x86, x86 64, MIPS).
• Por su naturaleza, Android puede soportar distintas
arquitecturas.
• Cada arquitectura tiene su propio “lenguaje
máquina”, así que hay que compilar binarios para
cada arquitectura.
6. Pasos para Android NDK
1. Instalar Android NDK (https://
developer.android.com/tools/sdk/ndk)
2. Compilar tu código como librería (.so) usando el
comando ndk-build
3. Modificar tu código Java para que invoque tu
librería (usando JNI).
4. Generar apk que contenga tu código Java +
librería.
7. Proceso a grandes rasgos
C/C++
Code
Makefile ndk-build Mix with Java* GDB debug
Java
SDK APIs
Native Libs
Android* Application
NDK APIs
C/C++
Using JNI
JNI
8. Android NDK:
Arquitectura
Android* NDK Application
Dalvik* Application
Java Class
Java Source
Compile with
Javac
Java Class
Java Source
Compile with
Javac
Create C header
with javah -jni
Header file
C/C++ Source
Code
Compile and Link C
Code (ndk-build)
Dynamic
Library (.so)
*.mk
Makefiles
10. Uso de javah
“javah” genera los stubs de header de JNI a partir de
las clases compiladas de Java.
Ejemplo:
javah –d jni –classpath bin/classes com.example.hellojni.HelloJni
Generaría el archivo
com_example_hellojni_HelloJni.h
JNIEXPORT jstring JNICALL
Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv *, jobject);
11. Makefiles
Android.mk
module settings and declarations
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
Predefined macro can be:
BUILD_SHARED_LIBRARY,
BUILD_STATIC_LIBRARY,
PREBUILT_SHARED_LIBRARY, PREBUILT_STATIC_LIBRARY
Other useful variables:
LOCAL_C_INCLUDES := ./headers/
LOCAL_EXPORT_C_INCLUDES := ./headers/
LOCAL_SHARED_LIBRARIES := module_shared
LOCAL_STATIC_LIBRARIES := module_static
Application.mk
Application-wide settings
APP_PLATFORM := android-15
#~=minSDKVersion
APP_CFLAGS := -O3
APP_STL := gnustl_shared #or other STL if
you need extended C++ support
APP_ABI := all #or all32, all64…
APP_OPTIM := release #default
NDK_TOOCLHAIN_VERSION := 4.8 #4.6 is
default, 4.8 brings perfs, 4.9 also but
less stable
12. Aprende más de NDK en
http://software.intel.com/es-es/android
14. Intel XDK
• IDE para desarrollo de apps híbridas.
• Ventajas:
• Gratuito y disponible para Win, Mac, Linux.
• Juega bien con Cordova y otros frameworks.
• Depuración y testing.
• Capacidades de building/deployment de apps.
https://software.intel.com/en-us/html5/tools
15. Crosswalk
• Motor de ejecución de apps híbridas basado en
Chromium y Blink.
• El motor se empaqueta como parte de tu app.
• Ya no dependes de qué sistema operativo o versión
tenga el dispositivo donde se ejecuta la app.
• Es software libre.
https://crosswalk-project.org
17. Pro tips
• Si pruebas con emulador, utiliza HAXM.
• Mejora significativamente desempeño del emulador.
• Haz testing en la nube con múltiples dispositivos.
• http://appthwack.com
• http://testdroid.com
¡En dispositivos Intel es gratis!
21. ¡Gracias!
• Visita la Zona de Desarrolladores Intel en Español:
http://software.intel.com/es-es
• Avísame si desarrollas una app NDK.
pedro@sg.com.mx
• Síguenos en Google+
(Intel Software en Español)