Bringing WebKit back to Android.
It’s been quite a while since the last blog post about WPE-Android, but that doesn’t mean WPE-Android hasn’t been in development. The focus has been on stabilizing the runtime and implementing the most crucial core features to make it easier to integrate new APIs into WPEView.
Main building blocks #
WPE-Android has three main building blocks:
- Cerbero
- Cross-platform build aggregator that is used to build WPE WebKit and all of its dependencies to Android.
- WPEBackend-Android
- Implements Android specific graphics buffer support and buffer sharing between WebKit UIProcess and WebProcess.
- WPEView
- Allows displaying web content in activity layout using WPEWebKit.
What’s new #
The list of all work completed so far would be quite long, as there have been no official releases or public announcements, with the exception of the last blog post. Since that update, most of the efforts have been focused on ‘under the hood’ improvements, including enhancing stability, adding support for some core WebKit features, and making general improvements to the development infrastructure.
Here is a list of new features worth mentioning:
- Based on WPE WebKit 2.42.1, the project was branched for the 2.42.x series. Future work will continue in the main branch for the next release.
- Dropped support for 32-bit platforms (x86 and armv7). Only arm64-v8a and x86_64 are supported
- Integration to Android main loop so that WPE WebKit GLib main loop is driven by Android main loop
- Process-Swap On Navigation aka PSON
- Added ASharedMemory support to WebKit SharedMemory
- Hardware-accelerated multimedia playback
- Fullscreen support
- Cookies management
- ANGLE based WebGL
- Cross process fence insertion for composition synchronization with Surface Flinger
- WebDriver support
- GitHub Actions build bots
- GitHub Actions WebDriver test bots
Demos #
WPEWebkit powered web view (WPEView) #
Demo uses WPE-Android MiniBrowser sample application to show basic web page loading and touch-based scrolling, usage of a simple cookie manager to clear the page’s date usage, and finally loads the popular “Aquarium sample” to show a smooth (60FPS) WebGL animation running thanks to HW acceleration support.
WebDriver #
Demo shows how to run WebDriver test with with emulator. Detailed instructions how to run WebDriver test can be found in README.md
Test requests a website through the Selenium remote webdriver. It then replaces the default behavior of window.alert
on the requested page by injecting and executing a JavaScript snippet. After loading the page, it performs a click()
action on the element that calls the alert. This results in the text ‘cheese’ being displayed right below the ‘click me’ link.
Test contains three building blocks:
- WPE WebDriver running on emulator
- HTTP server serving test.html web page
- Selenium python test script executing the test
What’s next #
We have ambitious plans for the coming months regarding the development of WPE Android, focusing mainly on implementing additional features, stabilization, and performance improvements.
As for implementing new features, now that the integration with the WPE WebKit runtime has reached a more robust state, it’s time to start adding more of the APIs that are still missing in WPEView compared to other webviews on Android and to enable other web-facing features supported by WebKit. This effort, along with adding support for features like HTTP/2 and the remote Web Inspector, will be a major focus.
As for stabilization and performance, having WebDriver support will be very helpful as it will enable us to identify and fix issues promptly and thus help make WPE Android more stable and feature-complete. We would also like to focus on conformance testing compared to other web views on Android, which should help us prioritize our efforts.
The broader goal for this year is to develop WPE-Android into an easy-to-use platform for third-party projects, offering a compelling alternative to other webviews on the Android platform. We extend many thanks to the NLNet Foundation, whose support for WPE Android through a grant from the NGI Zero Core fund will be instrumental in helping us achieve this goal!
Try it yourself #
WPE-Android is still considered a prototype, and it’s a bit difficult to build. However, if you want to try it out, you can follow the instructions in the README.md file. Additionally, you can use the project’s issue tracker to report problems or suggest new features.