31
1 Android on Tizen Moscow State University

Moscow State University - Amazon Web Services · • PhD Student at Lomonosov Moscow State University ... (APK)’ A2T’’ App’Package’ Converter. 6 ... ART’ App’TPK

Embed Size (px)

Citation preview

1

Android on Tizen Moscow State University

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

4

ANDROID APPLICATIONS ON TIZEN Android to Tizen

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  

14

First Android Application on Tizen

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

18

First Android Application on Tizen

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)

20

Wish - Shopping Made Fun Application

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  

23

3rd PARTY FRAMEWORKS Android to 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

28

UIL Demo Application

Android Java app Tizen native app

29

AFTERWORD Android to Tizen

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  

31