Skip to main content

Working natively with JavaScript in iOS and Android without WebView

Using JavaScript code from native code without using a WebView (sic!) can be really useful to

  • introduce dynamic functionality that was updatable without need of updating the app
  • shorter iteration cycles
  • share code between backend and native iOS and Android apps
You can have business logic provided by a JavaScript that then controls the app that inject native functionality in the JavaScript context.
You could even write an A/B testing framework based on this approach.


iOS
iOS offers the native JavaScriptCore:
Evaluate JavaScript programs from within an app, and support JavaScript scripting of your app.

So you can evaluate a script and read its return value natively:

context.evaluateScript(myLib);
let result = context.evaluateScript("myFunction();")
let myFunction = context.objectForKeyedSubscription("myFunction");
let parametrizedResult = myFunction.invokeMethod(...)

Or you can inject a native object into the JavaScript engine:
@objc protocol MyJSProtocol: JSExport {
    var myVar: String {get set}
}

@objc class MyObject: NSObject, MyJSProtocol {
   dynamic var myVar: String
}

...
context.setObject(MyObject.self, forKeyedSubscript: "MyObject")

Documentation JavaScriptCore


Android
For Android there are methods to inject native objects into the JavaScript context in a WebView; but you always have to initiate a WebView which is pretty heavy-weight.

There are third party libs that fill this gap:

  1. J2V8, a Java wrapper around Google’s V8 JavaScript engine.
  2. JS Evaluator for Android, based around the native Android WebView.
  3. AndroidJSCore, a Java wrapper around the WebKit JavaScriptCore engine.
  4. Duktape Android, the Duktape embeddable JavaScript engine packaged for Android.
Most stable and best performing candidate proved to be J2V8.

Comments

  1. An Android app in JavaScript sounds like a fascinating approach to mobile development. Leveraging JavaScript allows developers to utilize their existing web development skills and tools, potentially streamlining the process. However, I'm curious about performance and native device integration. How does the app handle hardware features? Security concerns also come to mind. Nonetheless, it's an exciting prospect that opens up new possibilities. I'd love to see a detailed comparison with traditional Android development to better understand its benefits and limitations. Great post!

    ReplyDelete

Post a Comment

Most Favorite Posts

Judo App - Server Driven UI out of the box

Judo App Judo brings server-driven UI to your iOS and Android apps. Build user interfaces visually in a fraction of time and publish them instantly without submitting to the app store. Build Experiences - With No Code The Judo app for macOS, available through the App Store, is built for design professionals with common keyboard shortcuts and familiar concepts like canvas, layers and inspector panel. Workflow is streamlined with the ability to drag and drop media files directly into your experiences and manage your own Judo files in Finder. Manage Creative Execution A Judo experience is interactive and can include text, images, video and buttons. An experience may be part of a screen, a single screen, or more typically multiple linked screens. Judo supports screen transitions, carousels, horizontal scrolling and modals. Clients can add custom fonts and define global colors and these are updates applied universally. Effortlessly Deploy Judo Cloud syncs your experiences with your iOS and ...

CFPropertyList

The PHP implementation of Apple's PropertyList plist can handle XML PropertyLists as well as binary PropertyLists. It offers functionality to easily convert data between worlds, e.g. recalculating timestamps from unix epoch to apple epoch and vice versa. A feature to automagically create (guess) the plist structure from a normal PHP data structure will help you dump your data to plist in no time. github

Team building: "Meme-Your-Colleague"

Lately we were hiring a lot of developers and had to integrate them in our team. So we decided to do an infotainment team event, targeting both: getting to know each other on a personal level and learning about the business and technical state, challenges and visions. Usually a meeting like this starts with everybody telling a few words about themselves... one... after... each... other... and after third speaker latest everybody gets bored. So we came up with the "Meme-Your-Colleague" game: Build teams of two persons Give them half an hour to get to know each other Both have to assemble a five minute presentation of five slides of each other Each slide consists of exactly one meme telling a (fun) fact of that person You may want to use a meme generator  and a presentation tool like Keynote or PowerPoint. It ended up with the whole team having a lot of fun: a perfect ice breaker! Give it a shot!

KSImageNamed: Xcode autocomplete for imageNamed

Can't remember whether that image you just added to the project was called button-separator-left or button-left-separator? Now you don't have to, because this will autocomplete your imageNamed: calls like you'd expect. Just type in [NSImage imageNamed: or [UIImage imageNamed: and all the images in your project will conveniently appear in the autocomplete menu. GitHub

App Indexing

A better search experience for apps and users with linking to in-app content. Google is working with app developers and webmasters to index the content of apps and relate them to websites. When relevant, Google Search results on Android will include deep links to apps. App Indexing

Aerial - Apple TV Views Screen Saver for your Mac

Aerial is a Mac screensaver based on the new Apple TV screensaver that displays the Aerial movies Apple shot over New York, San Francisco, Hawaii, China, etc. Starting with version 1.6, this also includes the new undersea videos available in tvOS 13! Aerial is completely open source, so feel free to contribute to its development. JohnCoates @ GitHub.com

Smartphone Market Q4/2016: Apple back to #1

Apple hat sich nach zwei Jahren mal wieder an die Spitze des Smartphone-Markts geschoben und liegt nun knapp vor Samsung – dank eines starken Weihnachtsquartals und des Note-7-Debakels. Hersteller 4. Quartal 2016 4. Quartal 2015 Absatz +/- Geräteabsatz Marktanteil Geräteabsatz Marktanteil Apple 77,0 Mio. 17,9 % 71,5 Mio. 17,7 % +7,7 % Samsung 76,8 Mio. 17,8 % 83,4 Mio. 20,7 % -8,0 % Heise