42
Developing a mobile cross-platform library Kostis Dadamis 11/03/2014

Developing a mobile cross-platform library

Embed Size (px)

DESCRIPTION

Here, I am including the experience I had while exploring solutions for developing a mobile cross-platform library, i.e. a single codebase that could be part of mobile apps running under different platforms. It covers my journey from mobile cross-platform developments tools (PhoneGap, Titanium, and the likes), code porting tools, and WebViews that weren't up to the task, to C++ and JavaScript engines that did work. There aren't many resources out there explaining how to approach this problem, so we thought it could be helpful if we shared this experience.

Citation preview

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