Documente Academic
Documente Profesional
Documente Cultură
en Android
Mobile Linux
ANDROID
Ezequiel Aceto
Senior Mobile Application Developer
Temas
Introduccin a Android
ADB
Drivers desde Java
Drivers desde el Kernel
ANDROID
ANDROID
Sistema Operativo multi-usuario basado en
Linux
Desarrollado por Android Inc. y adquirido
por Google en 2005
Dispositivos mviles
Aplicaciones nativas en Java (Dalvik VM)
Aplicaciones viven en un Sandbox
Android 1.5 (Cupcake)
ANDROID
Versiones
Cupcake (1.5) [Abril 2009]
Donut (1.6) [Septiembre 2009]
Eclair (2.0) [Octubre 2009]
Eclair (2.1)
Froyo (2.2) [Mayo 2010]
Gingerbread (2.3) [Diciembre 2010]
Honeycomb (3.0) [Febrero 2011]
Ice Cream Sandwich (4.0) [Octubre 2011]
ANDROID
Versiones
Astro (Android OS 1.0) [Sept 2008]
Bender (Android OS 1.1) [Feb 2009]
Jelly Bean (Android OS 4.1) [Jun 2012]
Jelly Bean (Android OS 4.2) [Nov 2013]
Jelly Bean (Android OS 4.3) [Jul 2013]
ANDROID
Versiones
ANDROID
Android
No es solo un OS. Android es un gran
framework para desarrollo de aplicaciones.
Sistema Operativo
Emuladores
Herramientas de Desarrollo
Amplio conjunto de APIs
Creciente comunidad de desarrolladores
Muchos usuarios evangelizados
ANDROID
Linux Kernel
Kernel 2.6 (pre OS 4.0) - Kernel 3.0 (OS 4.0)
binder: Comunicacin entre procesos (IPC)
ashmem: Android Shared Memory (Virtual)
pmem: Memoria de Procesos (Fisica)
ashmem: Una nueva implementacin de un
allocator de memoria compartida, similar a
POSIX pero con un comportamiento
logger (logcat)
ANDROID
Linux Kernel
Power Management
Wakelocks
Alarmas programadas
Low Memory Handler
Paranoid Network
Sockets IPv4/IPv6/Bluetooth, RFCOMM,...
Aprox. 200 parches respecto al Kernel 2.6.38
ANDROID
Dalvik VM
Java VM Dalvik VM
Java Bytecode Dalvik Bytecode
ANDROID
Dalvik VM
Diseada para funcionar con menos de
100MB de RAM
Procesadores lentos (500Mhz y FSB
100MHz)
Espacio para aplicaciones entre 16MB y
48MB (depende de la plataforma)
Cada aplicacin inicia su propia instancia de
Dalvik VM
ANDROID
NDK
Conjunto de herramientas para incorporar
cdigo nativo (C & C++)
Soporte para Arquitecturas
MIPS & x86 -> OS 2.3
ARM -> OS 1.5
NDK libs
MIPS
libc
libm
libz
x86
openGL
JNI
v7a
Thumb2
ANDROID
Componentes
Principales
Activity
Service
Broadcast Receiver
Content Provider
ANDROID
Activity
ANDROID
ANDROID
Service
ANDROID
Broadcast Receiver
ANDROID
Content Provider
ANDROID
ADB
ANDROID
ADB
Android Debug Bridge
ANDROID
ADB
Instalar aplicaciones
Ver el log del sistema operativo (logcat)
Copiar archivos desde y hacia el dispositivo
Ejecutar test de stress (Monkey)
$ adb usb
$ adb tcp 6543
$ adb logcat
ANDROID
ADB
Conexin remota
$ adb devices
List of devices attached
0A3BF9160300600B device
$ adb usb
$ adb tcpip 5555
$ adb connect 192.168.1.102:5555
ANDROID
ADB
en BeagleBoard xM
ethernet
usb
ANDROID
USB Debugging
Por default esta deshabilitado en el todas las
distribuciones de Android
Junto con Origenes Desconocidos son las
dos opciones del OS que permiten instalar
apps por fuera del Google Play
ANDROID
USB Debugging
Men de Apps -> Settings -> Developer
Options -> USB Debugging
ANDROID
En el Host
Permitir que el servicio UDEV reconozca al
dispositivo
$ vim /etc/udev/rules.d/51-
android.rules
SUBSYSTEM=="usb",
SYSFS{idVendor}=="18d1",
MODE="0666"
SUBSYSTEM=="usb",
SYSFS{idVendor}=="0451",
MODE="0666"
ANDROID
En el Host
Cambiar permisos al archivo 51-
android.rules
$ chmod a+r /etc/udev/
rules.d/51-android.rules
ANDROID
En el Host
Reiniciamos UDEV
$ sudo service udev restart
ANDROID
En el Host
ANDROID
En el Host
ANDROID
Drivers desde Java
ANDROID
USB Host
ANDROID
USB desde Java
FTDI
FT232RL
RS232 USB
ANDROID
Application
FT232Driver
USBManager
ANDROID
public FT232Driver(UsbManager usbManager,
UsbDevice device) {
super(usbManager,device);
ANDROID
Log.i(LOG_TAG,"Enviar comando - Purgar TX");
byte[] buffer = new byte[]{};
int transferred = getConnection().controlTransfer(0x40,
0, 0x01, 0, buffer, buffer.length,0);
ANDROID
/*********************** PUBLIC API ***********************/
public abstract boolean connect(RS232Configuration
configuration, AsyncReceiver asyncReceiver) throws
VCPDriverException;
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
$ cd ~/rowboat-android/kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
1. Conectamos el RX del FTDI con el TX
2. Nos conectamos a la placa por ADB
./adb shell
3. Configuramos ttyUSB0 usando stty
/data/busybox/busybox stty -F /dev/ttyUSB0 115200
4. Ejecutamos microcom y probamos el adaptador
/data/busybox/busybox microcom -s 115200 /dev/ttyUSB0
ANDROID
Drivers desde el Kernel
ANDROID
Drivers desde el Kernel
/*********************** PUBLIC API ***********************/
private native boolean connect(String device);
ANDROID
Drivers desde el Kernel
/************************* C Lib *************************/
JNIEXPORT
jboolean
Java_ar_uba_fi_android_usb_connect(
JEnv* env,
jobject thiz,
jstring device) {
...
}
ANDROID
GRACIAS!
http://goo.gl/f78aeI
ANDROID