In an attempt to bring Android, iOS, classic Windows and web applications on a single platform and make them available through the Windows Store, Microsoft has launched four projects, also knows as Universal Windows Platform Bridges, namely: Astoria, Islandwood, Centennial, and Westminster.
Astoria
The Astoria project helps developers port their Android apps to the Universal Windows Platform (UWP). Following are some of the project’s key features:
- The goal is to allow apps to be ported with as minimum code changes as possible, desirably none
- Both Java and native Android code (C, C++) is accepted. IDEs: IntelliJ, Android Studio and Eclipse on Windows or Mac OS X machines.
- Gradle can be used to generate builds for both Android and Windows from the same source without requiring code forking.
- The SDK comes with a Windows emulator and the code can be deployed to real devices via USB or WiFi. Debugging works as usual for any other Android application.
- KitKat is currently supported.
- Targets Android mobile apps, and they will be ported only to phones and tablets, not to HoloLens, desktop or other Windows devices.
- The UI is converted to a native Windows one, but there are limitations on what can be done.
- Porting works by redirecting Android OS calls to their corresponding Windows operations, without introducing any intermediary VM or runtime. This is done to avoid unnecessary CPU consumption which is important on mobile devices.
- Google Play services calls - Ads, Analytics, In-app purchases and Notifications - are automatically redirected to corresponding Windows services without source code change. Bing Maps is used instead of Google Maps. Calls to Android device sensors, buttons or features, such as Contacts, Share, keyboard, are also mapped to Windows ones.
- Windows specific code, such as Live Tiles, is added using Java.
This project is not set in stone, and its direction will depend much on developers’ needs. Capabilities will be added if required by the community.
There is a static code analysis tool that Microsoft makes available to early adopters for evaluating how much of the existing codebase can be reused on Windows and what needs to be fixed. Microsoft demonstrated the porting of an Android app to Windows during Build 2015. More details can be found out from session’s video.
Islandwood
There is less known about project Islandwood. Its purpose is to bring iOS applications to Windows. In this case, development is done by importing Objective-C Xcode projects into Visual Studio.
According to John Justice, PM of Astoria, porting iOS apps to Windows will generally require more work than porting Android ones, but Islandwood is to provide better integration with the UWP, enabling developers to add richer functionality specific to Windows.
Centennial
Centennial is meant to make classic Windows apps -Win32, .NET, COM- run on the Universal Platform. John Sheehan, an Architect on Windows, appreciates there are ~16M classic apps that could be ported with Centennial.
Project Centennial does not change anything in the code, it simply does some tricks to make app packaging and deployment run properly on UWP. The main tool is a Converter inspired by App-V but more complex because it allows developers to use source code files and edit them. The Converter analyzes an MSI file, discovers and records what the app is doing during installation, what resources installs, what modifications it performs, etc. Then, an AppX is generated, including live tiles, which developers can test and load to the Store.
When the app is later installed by an user, the app’s resources are not scattered out throughout the file system, but they are kept in the app’s directory. Nonetheless, the OS fools the app into believing those resources are where it expects them to be at runtime. The app’s registry keys are not installed into the Windows registry but in a separate .reg file, and transparently accessed as if they were in Windows registry. These reg files are being read only when the app is started and executed, and are not loaded when Windows boots up which has an impact on Windows’ start up time. Other apps cannot use an app’s resources. The DLL hell is avoided and an uninstall clears up all resources installed leaving the system clean.
These apps still run with full trust, but Microsoft will be working with developers to transition them to the Universal App Container which comes with some restrictions enforcing security. Full trust apps are not going to be allowed to run on certain devices such as Xbox or HoloLens. Developers will have to make them use the app container model if they want to reach those devices.
Microsoft demonstrated running Adobe Photoshop Elements 13 as an UWA during Build 2015. Sheehan said that the only change required for it to work was to remove Adobe’s licensing code which was not needed anyway because universal apps have their own licensing mechanism.
AppX files generated with Centennial can be installed on enterprise systems without having to go through the Windows Store.
More details can be found by watching this Build 2015 session.
Westminster
The last UWP bridge is Westminster. Very little is known about this project. The basic idea is to enable the packaging of a website as a universal application, publishing it through the Store. The tool will take the website’s URL and generate the app. Developers will also be able to call Windows APIs from JavaScript and to target Microsoft Edge, Apache Cordova or hosted web apps.
All four projects are available as preview to selected developers, and will be opened up to the general developer community along with free SDKs during this summer.