Android System Services
Android System Services
FTF2014
04/08/2014
Gary Bisson
Embedded Software Engineer
SESSION OVERVIEW
1. Introduction
2. Native Development
3. Direct Access
6. Demonstrations
7. Conclusion
ABOUT THE PRESENTER
♦ BSP Adaptation
♦ Driver Development
♦ System Integration
I Partners with Freescale
Introduction
Accessing HW on Android Introduction
I SDK/NDK
5
Accessing HW on Android Introduction
ANDROID ARCHITECTURE
6
Accessing HW on Android Introduction
7
Native Development
Accessing HW on Android Native Development
WHAT IS IT?
9
Accessing HW on Android Native Development
NATIVE APPLICATION
10
Accessing HW on Android Native Development
• C++
I No exception handling!
I No STL! (Standard Template Library)
• Libpthread
I Mutexes, condvars, etc. use Linux futexes
I No semaphores
I No pthread_cancel
• Misc
I No wchar_t and no LOCALE support
I No crypt()
11
Accessing HW on Android Native Development
I frameworks/base/cmds/
I external/
• Same as a Java application, an Android.mk must be
created:
1 LOCAL_PATH:= $(call my-dir)
2 include $(CLEAR_VARS)
3 LOCAL_MODULE := hello-world
4 LOCAL_MODULE_TAGS := optional
5 LOCAL_SRC_FILES := hello-world.cpp
6 LOCAL_SHARED_LIBRARIES := liblog
7 include $(BUILD_EXECUTABLE)
12
Accessing HW on Android Native Development
13
Direct Access
Accessing HW on Android Direct Access
15
Accessing HW on Android Direct Access
16
Android HAL Layer
Accessing HW on Android Android HAL Layer
HARDWARE API
18
Accessing HW on Android Android HAL Layer
HARDWARE API
19
Accessing HW on Android Android HAL Layer
20
Accessing HW on Android Android HAL Layer
LIGHTS LIBRARY
• Interface defined in
hardware/libhardware/include/hardware/lights.h
• Library must be named lights.<product_name>.so
• Will get loaded from /system/lib/hw at runtime
• See example in hardware/imx/lights/
• Mandatory to have backlight managed by the OS.
21
Accessing HW on Android Android HAL Layer
CAMERA LIBRARY
• Interface defined in
hardware/libhardware/include/hardware/camera.h
• Library must be named camera.<product_name>.so
• Will get loaded from /system/lib/hw at runtime
• See example in hardware/imx/mx6/libcamera/
22
Accessing HW on Android Android HAL Layer
GPS LIBRARY
• Interface defined in
hardware/libhardware/include/hardware/gps.h
• Library must be named gps.<product_name>.so
• Will get loaded from /system/lib/hw at runtime
• See example in hardware/imx/libgps/
23
Accessing HW on Android Android HAL Layer
SENSORS LIBRARY
• Interface defined in
hardware/libhardware/include/hardware/sensors.h
• Library must be named sensors.<product_name>.so
• Will get loaded from /system/lib/hw at runtime
• See example in hardware/imx/libsensors/
24
Accessing HW on Android Android HAL Layer
♦ Vendor
♦ Version
♦ Type (Proximity, Temperature etc…)
♦ ...
25
Accessing HW on Android Android HAL Layer
26
Accessing HW on Android Android HAL Layer
data from it
• Use existing java application: AndroSensor
I www.appsapk.com/androsensor
I www.vogella.com/tutorials/AndroidSensor/article.html
27
Accessing HW on Android Android HAL Layer
30
Accessing HW on Android Custom System Service
31
Accessing HW on Android Custom System Service
• System Server
I All components contained in one process:
system_server
I Mostly made up of Java-coded services with few
written in C/C++
• Media Server
I All components contained in one process:
media-server
I These services are all coded in C/C++
• Appear to operate independently to anyone connecting to
them through Binder
32
Accessing HW on Android Custom System Service
33
Accessing HW on Android Custom System Service
SERVICE MANAGER
34
Accessing HW on Android Custom System Service
35
Accessing HW on Android Custom System Service
1st approach:
• System Service inside the System Server
• Advantages:
I Part of the inner system
I First to be started
I System permissions
• Drawbacks:
I SDK creation required
36
Accessing HW on Android Custom System Service
2nd approach:
• System Service outside of the System Server
• Advantages:
I No framework/ modification
37
Accessing HW on Android Custom System Service
• Example:
I https://github.com/gibsson/BasicService
I https://github.com/gibsson/BasicClient
• Although SDK generation is possible, SDK add-on is
preferred:
I https://github.com/gibsson/basic_sdk_addon
38
Accessing HW on Android Custom System Service
BasicService/
AndroidManifest.xml
Android.mk
src/com/gibsson/basic/service/
app/
BasicServiceApp.java
IBasicServiceImpl.java
lib/
BasicManager.java
com.gibsson.basic.service.lib.xml
IBasicService.aidl
39
Accessing HW on Android Custom System Service
AIDL EXAMPLE
1 /**
2 * System-private API for talking to the BasicService.
3 *
4 * {@hide}
5 */
6 interface IBasicService {
7 int getValue();
8 int setValue(int val);
9 }
40
Accessing HW on Android Custom System Service
IMPLEMENTATION EXAMPLE
42
Accessing HW on Android Custom System Service
43
Demonstrations
Accessing HW on Android Demonstrations
HARDWARE SELECTION
• i.MX6Q SabreLite
• Android 4.3 Jelly Bean
• 10" LVDS display
• Could be any other device
45
Accessing HW on Android Demonstrations
DEMONSTRATIONS
• Demonstration #1
I Native app access
• Demonstration #2
I Direct JNI access
• Demonstration #3
I Using Sensor API
• Demonstration #4
I Custom System Service
46
Conclusion
Accessing HW on Android Conclusion
CONCLUSION
• HAL modification
I Only few hardware targeted
48
Accessing HW on Android Conclusion
QUESTIONS?
49
Accessing HW on Android Conclusion
REFERENCES
50