How Does BlackBerry's Android Implementation Work?
So, it's come time to replace the old Bold 9780, so I've been doing my research and trying to figure out what direction to take. Yesterday, I came across a fascinating article that got me wondering about how BB managed to get Android apps working on the BB10 platform (here: Neither Microsoft, Nokia, nor anyone else should fork Android. It’s unforkable. | Ars Technica ).
The tl;dr version is roughly this, as I understand it: the Android Open Source Platform (AOSP) on its own is insufficient to run most Android apps with their full functionality intact, because with each iteration, Google has been migrating a lot of the important APIs to their proprietary Google Mobile Services (GMS) which is only available if you're running a Google approved version of Android - and Google has to review each device for compliance. GMS requires that Google services are front and centre. Essentially AOSP will run a phone, but deliver a poor experience, and very little app functionality.
The only way around surrendering control to Google, according to this article, is to build your own software stack that emulates the APIs found in MWS so that when the apps call those functions, the replacement APIs do the work. According to the article, some of the functionality found only in MWS includes: "Google Maps, Location, and in-app purchasing; Google+ integration; Remote Wipe; Malware scanning; and more."
So now to my questions: How was Android compatibility achieved in BB10? Is it a fully independent equivalent to GMS that will permit Android apps to function with something approaching full functionality? Or is it more akin to a copy of the open source portion of Android that restricts functionality accordingly? If BB10 does successfully emulate full Android, what are the chances that this functionality will be maintained over the next 3-5 years, as Google continues it's migration from open source to proprietary software? The investment involved in keeping up with Android's ongoing releases cannot be trivial.