2 2
Andrey Shitov • PhD Student at Lomonosov Moscow State
University (MSU), Computational Mathematics and Cybernetics
• Compilers, Virtual Machines, System
Programming, Mobile OS
Presenter
3 3
• Open Information Technologies Lab at MSU • Android 7.0 Nougat and Tizen 2.4 • Tizen Z3 as target device
The main ideas: • Run Android applications on Tizen • Use Android 3rd party frameworks (OpenSource &
Commercial) from Tizen native applications
Android to Tizen (A2T) Project
5
Launch existing Android applications on Tizen
Concept
Android 7.0 Nougat Run1me
Android-‐ready Tizen Device
Android Applica1on Tizen Package (TPK)
ART + Deploy&Run
APP
Android Applica1on Package (APK)
A2T App Package Converter
6
• 35+ Android applications from Google Play can be run on Tizen • Examples: Calculator, “Wish – Shopping Made Fun”, UIL Demo
Achievements
Wish App Tizen App that uses Android 3rd party framework
Calculator
7 7
1. Port Android Runtime to Tizen
2. Initialize Android Runtime at Tizen startup
3. Support Android UX on Tizen
Steps to Run Android Application on Tizen
8
libhybris
Android Runtime on Tizen
Ported android na1ve libraries
Tizen glibc libbionic
Custom dynamic loader
ART
Load libraries through JNI
Load libraries
Direct linking
Custom dynamic loader Provides ability to load libraries at specified addresses (ART requirement)
New
Android
Legend:
Tizen
9
libhybris
Android Runtime on Tizen
Android bionic world Tizen glibc world
Prebuilt android na1ve libraries
Ported android na1ve libraries
Tizen glibc libbionic
Custom dynamic loader
System hooks
ART
Load libraries through JNI
Load libraries
Load libraries
Dynamic linking
Direct linking
Redirected linking
System hooks provide EABI compatibility layer: calls from pre-built native libraries are redirected to Tizen glibc world via special hooks
New
Android
Legend:
Tizen
10
Android Initialization
Init process -‐ … -‐ Start na1ve daemons
Na1ve daemons -‐ …. -‐ app_process –X
Zygote
Zygote (daemon) -‐ Register Zygote socket -‐ Preload all Java classes -‐ Preload resources -‐ Start System Server -‐ Open socket -‐ Listen for connec1ons
Android Run1me -‐ Start a VM -‐ Call Zygote’s main()
Launcher -‐ Init itself -‐ Register onClick() handlers
System Server (service) For each service: -‐ Init service -‐ Reg. w/Service Manager Incl.start Ac1vity Manager
Ac1vity Manager (service) -‐ Init itself -‐ Send intent.CATEGORY_HOME
Android home screen (launcher)
Kernel -‐ … -‐ Start “init” process
Bootloader -‐ … -‐ Jump to kernel
CPU
11
Android Initialization on Tizen
Init process -‐ … -‐ Start na1ve daemons
A2T init (na1ve daemon) -‐ …. -‐ app_process –X Zygote
Zygote (daemon) -‐ Register Zygote socket -‐ Preload all Java classes -‐ Preload resources -‐ Start System Server -‐ Open socket -‐ Listen for connec1ons
Android Run1me -‐ Start a VM -‐ Call Zygote’s main()
A2T App Starter Sends intent to start ac1vity only
System Server (service) Provides par1al func1onality by only necessary services
Tizen home screen
Kernel -‐ … -‐ Start “init” process
Bootloader -‐ … -‐ Jump to kernel
CPU
New
Changed
Legend:
Ac1vity Manager (service) -‐ Init itself
12
Android Application Startup
Init process -‐ … -‐ Start na1ve daemons
Na1ve daemons -‐ …. -‐ app_process –X
Zygote
Zygote (daemon) -‐ Register Zygote socket -‐ Preload all Java classes -‐ Preload resources -‐ Start System Server -‐ Open socket -‐ Listen for connec1ons
Android Run1me -‐ Start a VM -‐ Call Zygote’s
main()
Launcher -‐ Init itself -‐ Register onClick() handlers
System Server (service) For each service: -‐ Init service -‐ Reg. w/Service Manager Incl.start Ac1vity Manager
New App New App New App
Click
Android home screen
(launcher)
Kernel -‐ … -‐ Start “init” process
Bootloader -‐ … -‐ Jump to kernel
CPU
Ac1vity Manager (service) -‐ Init itself -‐ Send intent.CATEGORY_HOME
13
Android Application Startup on Tizen
Init process -‐ … -‐ Start na1ve daemons
A2T init (na1ve daemon) -‐ …. -‐ app_process –X Zygote
Zygote (daemon) -‐ Register Zygote socket -‐ Preload all Java classes -‐ Preload resources -‐ Start System Server -‐ Open socket -‐ Listen for connec1ons
Android Run1me -‐ Start a VM -‐ Call Zygote’s
main()
A2T App Starter Sends intent to start ac1vity only
System Server (service) Provides par1al func1onality by only necessary services
New App New App New Android App process
Click
Tizen home screen
Kernel -‐ … -‐ Start “init” process
Bootloader -‐ … -‐ Jump to kernel
CPU
New
Changed
Legend:
Ac1vity Manager (service) -‐ Init itself
15
Android GUI on Tizen
Android App WM
libgui.so (SurfaceFlinger client)
SurfaceFlinger
Android OpenGL
EGL GLES
Vend
or GL
Binder
HWUI SKIA
Canvas Render Script
Android Display stack Android display stack is based on: • SurfaceFlinger – Android “display and
window manager” • Vendor GL – vendor implementation of
OpenGL library
Tizen display stack is based on: • EFL – enlightenment foundation library
EGL is an interface between OpenGL ES and the underlying native platform window system
16
Android UX/UI Integration Approach
Android App WM
libgui.so (SurfaceFlinger client)
SurfaceFlinger
Android OpenGL
EGL GLES
Android App WM
HWUI SKIA
Canvas
libgui.so (SurfaceFlinger client)
Render Script
Android OpenGL
EGL GLES
Original Android Display stack Android Display stack on Tizen
Vend
or GL
Binder
HWUI SKIA
Canvas Render Script
Enlightenment EFL EvasGL
Tizen compa1bility layer
17
This demo shows simple Android Calculator Technical Specs • Device: Tizen Z3 SM-Z300H with Tizen 2.4
• Original Android application: Simple Calculator
• ART version: Android 7.0 (Nougat)
• Launch time: 1.17s (Tizen 1GHz CPU) 0.42s (Android 2.5GHz CPU)
• Performance: similar to Android
First Android Application on Tizen
Literally the same
Tizen Z3 Nexus 6P
19
Wish - Shopping Made Fun Application • Android application from Google Play TOP 10 • Mobile application for popular shopping mall in Europe and North America • Successfully works on Tizen without any changes
Technical specs: • Device: Tizen Z3 SM-Z300H with Tizen 2.4
• ART version: Android 7.0 (Nougat)
21
Requirements for Wish Application 1. Virtual keyboard
• A separate app on top of main window • Own input events processing (undocumented)
2. Network • Based on native system daemons (netd - WiFi and rild –
Mobile Internet), which are missed in Tizen.
3. HW Buttons
22
Android Java services on Tizen
ART (Android Java RT)
Android bionic (libc)
Android na1ve frameworks (libs)
Android Java services UI/UX
Media
Camera
Network
Loca1on
Tizen system level
Enlightenment
Camera API
Network API
Loca1on API
Android components Tizen components
Other services Other Tizen API
Tizen bridge
Bion
ic
integra1
on
• Map Java services to Tizen API • Implement custom dynamic loader
to provide EABI compatibility
New
Android
Legend:
Tizen
24
Use Java from Native: High-Level concept
.OAT files C/C++
Wrappers
Android Run1me
Tizen Pla`orm
Tizen na1ve applica1on 3rd party
frameworks .DEX/JAR/CLASS
ART compila1on
Na1ve func1ons invoca1ons
• Companies mostly provide interfaces to their services via Java frameworks – online banking
– multimedia, maths
– etc.
• Tizen developers lack such frameworks
• Obviously companies don’t want to spend resources on Tizen support
25
Wrappers for Java Frameworks
Tizen Na1ve applica1on
Core library wrappers
Android library wrappers Proxy for 3rd
party FWK Proxy for 3rd party FWK
Wrappers for 3rd party FWKs
Java core classes Android classes 3rd party Android
FWK
3rd party Android FWK
3rd party Android FWK
JNI
C++
Java
Android RT ini1aliza1on
C++
Java
Na1ve invoca1ons
• We developed a tool that generates C++ wrappers to Java frameworks (FWK) – Execution of Java code is done by Android Runtime
• Tizen developers can use proprietary Java frameworks within Tizen native applications
26
3rd Party Android Framework Usage • Java code (UIL):
• Native (UIL): using namespace a2t::com::nostra13::universalimageloader::core; …
a2t::Ref<a2t::android::content::Context> ctx = a2tInit::appContext.get();
a2t::Ref<imageloaderconfiguration::Builder> builder = new imageloaderconfiguration::Builder(ctx);
…
builder-‐>threadPriority(3);
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; …
Context ctx = getApplicationContext();
…
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(ctx);
builder.threadPriority(3);
27
• Demonstrates usage of Java 3rd party framework from native Tizen Application • Uses Universal Image Loader 3rd party Android framework
Technical specs: • Device: Tizen Z3 SM-Z300H with Tizen 2.4
• ART version: Android 7.0 (Nougat)
UIL Demo Application
Main screen Grid view
30
This technology provides two major opportunities: • Launch existing Android application on Tizen quickly • Reuse extended functionality of 3rd party Android frameworks by C++ Tizen
Application
Conclusion
Android App on Tizen
Android 7.0 Nougat Run1me
Tizen Device
Android FWK on Tizen
Android 7.0 Nougat Run1me
Tizen Device
Tizen Na1ve App TPK ART ART
Android 3rd party FWK
App
FWK Android APK
Top Related