























In September, Google launched ARC—the "App Runtime for Chrome,"—a project that allowed Android apps to run on Chrome OS. A few days later, a hack revealed the project's full potential: it enabled ARC on every "desktop" version of Chrome, meaning you could unofficially run Android apps on Chrome OS, Windows, Mac OS X, and Linux. ARC made Android apps run on nearly every computing platform (save iOS).

ARC is an early beta though so Google has kept the project's reach very limited—only a handful of apps have been ported to ARC, which have all been the result of close collaborations between Google and the app developer. Now though, Google is taking two big steps forward with the latest developer preview: it's allowing any developer to run their app on ARC via a new Chrome app packager, and it's allowing ARC to run on any desktop OS with a Chrome browser.

ARC runs Windows, Mac, Linux, and Chrome OS thanks to Native Client (abbreviated "NaCL"). NaCL is a Chrome sandboxing technology that allows Chrome apps and plugins to run at "near native" speeds, taking full advantage of the system's CPU and GPU. Native Client turns Chrome into a development platform, write to it, and it'll run on all desktop Chrome browsers. Google ported a full Android stack to Native Client, allowing Android apps to run on most major OSes.

With the original ARC release, there was no official process to getting an Android app running on the Chrome platform (other than working with Google). Now Google has released the adorably-named ARC Welder, a Chrome app which will convert any Android app into an ARC-powered Chrome app. It's mainly for developers to package up an APK and submit it to the Chrome Web Store, but anyone can package and launch an APK from the app directly.

Since anyone can get an app up and running, we decided to take a look at just what ARC was like with certain apps. It turns out ARC is based on Android 4.4 and runs Dalvik VM, not the faster Android Run Time (ART) that debuted in Android 5.0.

A lot of standalone apps, like Twitter, work perfectly, while many stop working because ARC is not a smartphone and is missing a lot of what makes Android Android. Which brings us to the next big improvement:

ARC gets serious with Google Play Services

September's unofficial hack allowed us to explore a few limitations of the Android Runtime for Chrome. The biggest missing puzzle piece were all of the Google Play components, which weren't supported on the early version. This made ARC less like "Google's Android" and more like an unsupported AOSP fork. Any app that used Google Play Services for OAuth logins, Maps, in-app purchases, cloud-to-device messaging, Play Games support, or any of the myriad of other features listed above would simply crash.

With this new release, ARC includes Google Play Services, potentially opening up compatibility for many apps that depend on Google's proprietary ecosystem APIs. It's not the full list of APIs from Play Services, though, only a handful: OAuth2, Google Cloud Messaging , Google+ sign-in, Maps, Location, and Ads. Developers have to specifically enable Play Services on ARC with ARC-specific metadata, too, so end users can't go too crazy with other people's apps.

While those five APIs are pretty common and will certainly help compatibility, ARC is still missing a big chunk of Play Services, which will stop some apps from working. The biggest missing piece seems to be the Play Store's in-app purchasing, which isn't in the API list. The Chrome Web Store supports in app purchasing, but it would require custom code from the app developer.

We can't explore the full potential of Play Services on ARC, because it's up to the app developer to add special metadata to the app to enable ARC's special version of Play Services.

Write once, run anywhere?

So calling all developers: You can now (probably, maybe) run your Android apps on just about anything—Android, Chrome OS, Windows, Mac, and Linux—provided you fiddle with the ARC Welder and submit your app to the Chrome Web Store.

The App Runtime for Chrome and Native Client are hugely important projects because they potentially allow Google to push a "universal binary" strategy on developers. "Write your app for Android, and we'll make it run on almost every popular OS! (other than iOS)" Google Play Services support is a major improvement for ARC and signals just how ambitious this project is. Some day it will be a great sales pitch to convince developers to write for Android first, which gives them apps on all these desktop OSes for free.

For now though, the project is just a developer preview. The next steps are to bring in the rest of the Play Services APIs, which will no doubt happen over the coming months. Google will also needs to do something about the Chrome Web Store, which isn't nearly as popular, feature rich, or mature as the Play Store. Will they merge some day? Google already displays Chrome apps in the Google Play Store for Education.

Listing image by Google