Transcript
Page 1: Developing a mobile cross-platform library

Developing a mobilecross-platform library

Kostis Dadamis11/03/2014

Page 2: Developing a mobile cross-platform library

What?

Page 3: Developing a mobile cross-platform library

Description

• Piece of code including common functionality across all mobile platforms

• E.g. querying a Web API, fetching results, sorting results, fancy algorithms, etc.

• No UI• One main codebase• Some glue code for each platform (focusing on Android

and iOS)• Package it as a library

Page 4: Developing a mobile cross-platform library

Description

Page 5: Developing a mobile cross-platform library

Why?

Page 6: Developing a mobile cross-platform library

Motivation

• Less code• Less bugs• Less testing

• Consistency

• Reuse existing code

• Develop and distribute cross-platform SDKs

Page 7: Developing a mobile cross-platform library

Attempts

Page 8: Developing a mobile cross-platform library

Attempts

• Mobile Cross-Platform Development Tools• C++• Code porting• JavaScript in a WebView• JavaScript in a JavaScript Engine

Page 9: Developing a mobile cross-platform library

Mobile cross-platform development tools

Page 10: Developing a mobile cross-platform library

Mobile Cross-Platform Development Tools

• Mobile Cross-Platform Development Tools• 18 different tools investigated (e.g. PhoneGap,

Xamarin, Titanium, Corona, MoSync, Kony)

Page 11: Developing a mobile cross-platform library

Mobile Cross-Platform Development Tools

• Mobile Cross-Platform Development Tools• 18 different tools investigated (e.g. PhoneGap,

Xamarin, Titanium, Corona, MoSync, Kony)• Output end products (not libraries)

Page 12: Developing a mobile cross-platform library

Mobile Cross-Platform Development Tools

• Mobile Cross-Platform Development Tools• 18 different tools investigated (e.g. PhoneGap,

Xamarin, Titanium, Corona, MoSync, Kony)• Embed a runtime environment

Page 13: Developing a mobile cross-platform library

Mobile Cross-Platform Development Tools

• Mobile Cross-Platform Development Tools• 18 different tools investigated (e.g. PhoneGap,

Xamarin, Titanium, Corona, MoSync, Kony)• Corona and MoSync support this for Android, but it’s a

“coming feature” for iOS

Page 14: Developing a mobile cross-platform library

C++

Page 15: Developing a mobile cross-platform library

C++

Page 16: Developing a mobile cross-platform library

C++

• Build for all possible platforms and CPU architectures• Glue code

• Android• Android Native Development Kit (NDK) and Java

Native Interface• Complicated

• iOS• Objective-C++• Easy

Page 17: Developing a mobile cross-platform library

C++

• C++• Pros

• Official solutions• Fast• Ability to import a vast number of open-source

C/C++ libraries• Applicable to Windows Phone• Free of charge

Page 18: Developing a mobile cross-platform library

C++

• C++• Cons

• Manual GC in Java (workaround by copying)• Building libraries for all platforms/CPU architectures

is time-consuming• Documentation

Page 19: Developing a mobile cross-platform library

Code porting

Page 20: Developing a mobile cross-platform library

Code porting

• Maintaining code for 1 platform, and translate it for the other platform(s)

• 7 different tools investigated• Most solutions immature

Page 21: Developing a mobile cross-platform library

Code porting

• Worth revisiting in the future• J2ObjC

• Translates Java (Android) to Objective-C (iOS)• Hyperloop

• Translates JavaScript to source code for each platform

Page 22: Developing a mobile cross-platform library

JavaScript

Page 23: Developing a mobile cross-platform library

JavaScript

• Part of web browsers• Part of server-side code

• Rapidly gaining popularity

• Reusing JavaScript code?

Page 24: Developing a mobile cross-platform library

JavaScript in a WebView

Page 25: Developing a mobile cross-platform library

JavaScript in a WebView

• JavaScript in a WebView• Use existing native web-browser Views

(WebViews) to execute JavaScript• WebViews provide limited functionality to

programmers• WebView APIs are inconsistent across

platforms• Could work only with hacks

Page 26: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

Page 27: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

• Use standalone JavaScript engine without a View• iOS

• JavaScriptCore• Android

• Rhino • V8• SpiderMonkey• JavaScriptCore• Nashorn

Page 28: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

• Problem• Pure JavaScript engines don’t support networking

• Solution• Delegate missing functionality to the platforms

Page 29: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

Page 30: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

• iOS• JavaScriptCore framework (since iOS 7)• Pros

• Simple object conversions• No embedding needed

• Cons• Lack of documentation

Page 31: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

• Android, we have to embed one• Rhino

• App size 3.6MB (+2.6MB)• Pros

• Developed in Java• Cons

• Inactive development• Outdated documentation

Page 32: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

• Android, we have to embed one• V8

• Pros• Actively developed

• Cons• App size 8.1MB (+7.1MB)• Developed in C++ -> Android NDK/JNI• Additional translation layer

Page 33: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

Page 34: Developing a mobile cross-platform library

JavaScript in a JavaScript Engine

• JavaScript in a JavaScript Engine• Pros

• Reusing JavaScript code• Applicable to Windows Phone

• Cons• Delegated functionality increases glue code and

overcomplicates architecture• In Android, either Rhino which is not actively

developed, or V8 which is large and written in C++

Page 35: Developing a mobile cross-platform library

Proof-of-concept app

Page 36: Developing a mobile cross-platform library

Conclusions

Page 37: Developing a mobile cross-platform library

Conclusions

• Some immature solutions are worth revisiting (Corona, MoSync, J2ObjC, Hyperloop, Nashorn)

• C++• Pros: Official solutions, fast, access to C/C++ libraries,

free• Cons: Low-level, garbage collection?

• JavaScript in a JavaScript Engine• Pros: Reusing JavaScript code• Cons: Delegating missing functionality, Rhino not

actively developed, V8 large and written in C++

Page 38: Developing a mobile cross-platform library

More info

Page 39: Developing a mobile cross-platform library

More info

• www.skyscanner.net/blogs (3 parts)

Page 40: Developing a mobile cross-platform library

Edinburgh • Glasgow • Singapore • Beijing • Miami • Barcelona

thank you

Page 41: Developing a mobile cross-platform library

Opportunities

Page 42: Developing a mobile cross-platform library

Opportunities

• Mobile Solution Architect• www.skyscanner.net/jobs


Recommended