Android webviews and Hybrid Development. A Horror Story

50 %
50 %
Information about Android webviews and Hybrid Development. A Horror Story

Published on March 12, 2014

Author: sergiandreplace



Introduction to the Android WebView and fundamentals of Hybrid Development. Find the sample code at

@sergiandreplace • I do Android stuff • I’ve tried to create something with webviews • It was a monster • Pain and tears • This is my history

@sergiandreplace • “A view that displays web pages” • Since API 1 • New version in KitKat (not today) • Is not based on Chrome • Renderer is “special” • Its full of bugs and issues

@sergiandreplace • WebView is added to a layout like any other view • It’s a wrapper to execute html and associated technologies • The Java environment and the html environment are isolated* • We can: • loadUrl(String url) • loadData(String data, String mime, String encoding) • loadDataWithBaseUrl (String baseUrl. String data….) • android.permission.INTERNET!! Android app Webview HTML (JS, CSS, etc) Java


@sergiandreplace • WebSettings settings=webView.getSettings() • settings. • setJavaScriptEnabled • setGeolocationEnabled • setJavaScriptCanOpenWindowsAutomatically • setBuiltInZoomControls

@sergiandreplace • Default behaviour: open links externally (yes, it’s true) • We should intercept the url requests and redirect back to the webview • We need a WebViewClient • WebViewClient handles page events


@sergiandreplace • WebViewClient handles page lifecycle and resources loading • .onPageFinished (it’s a trap!) • .onPageStarted • .shouldInterceptRequest (ooooh!) • WebChromeClient Just handles “other” events. More specific to page itself* . • .onProgressChanged (what the…?)

@sergiandreplace • Android fragmentation is nothing compared to this • Video full screen is handled by WebChromeClient.onShowCustomView • Android <=2.3.3  view instanceof VideoView • Android >3.0  view instanceof HTML5VideoView . An internal private class (d’oh!) Field proxiedVideoFullScreen = callback.getClass().getDeclaredFields()[0]; proxiedVideoFullScreen.setAccessible(true); Object unproxiedVideoFullScreen=proxiedVideoFullScreen.get(callback); Field mUri= unproxiedVideoFullScreen.getClass().getSuperclass().getDeclaredField("mUri"); mUri.setAccessible(true); path =((Uri)mUri.get(unproxiedVideoFullScreen)).toString();

@sergiandreplace • Just put your web on assets and load it • loadUrl("file:///android_asset/... (///!!!) • Java vs. Javascript.Try to be as biased as possible • Do not mix interactive events (touch, drag, etc)


@sergiandreplace • We can inject Java objects to the WebView • This object methods can be invoked from JavaScript • Cool, isn’t? So cool that nobody else supports it • Forget DODM! • Sooo…

@sergiandreplace • Just use a specific url format and capture it from WebViewClient and Use url to put parameters • This works in all platforms • Uri class is our best friend for parsing urls • Returning values? Add callback function as parameter. All calls are asynchronous • Basically, this is what Cordova does


@sergiandreplace • Only one possible solution • loadUrl(“javascript:….”); • End of it


@sergiandreplace • Bug with params not working • Sony (des)Experia • Create a mini-browser to the web team. Don’t relay on Chrome for Android • Abandon Android 3.0. Seriously. • Do a lot of tests • Hardware acceleration:“If your application performs custom drawing, test your application on actual hardware devices with hardware acceleration turned on to find any problems” a.k.a.: Just try

@sergiandreplace • Questions and all the stuff

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

[CatDroid] BcnDevCon - Grokbase

... ...
Read more

[CatDroid] Triste es pedir votos... - Grokbase

... que és l'ultim dia ... android-webviews-and-hybrid-development-a-horror-story--
Read more


Here you can discuss the technical ins and outs of the Prius v and related hybrid components. ... OBDII Android App. ... Low oil horror story
Read more

Download Android Karenina By Leo Tolstoy (1594744602 ...

Download android karenina book in ePub ... Personal Development; Poetry & Drama; Reference; Religion; Romance; Science & Geography; Science Fiction, Fantasy & Horror ...
Read more