This guide tries to gather all the necessary information on how to install and set up microG GmsCore and other stuff that is useful in replacing Google Play Services.

After following the steps outlined in this post, you will be able to

  • install and run many applications that would previously refuse to run or even to install because of missing Play Services,
  • use apps that require Google Cloud Messaging (GCM), such as TextSecure / Signal,
  • use apps that require the Google Maps API (v1 or v2, should work fine with most apps) and
  • access the Play Store to download, install and update applications (at least to some extent).

All of the above is achieved using free and open-source software. Installing the proprietary Google Play Services is not required. A Google account is only needed if you want to access the Play Store.

Disclaimer: Please be aware that this guide uses prerelease software which has not been tested thoroughly. If you find a bug in one of the libraries or apps, you are welcome to report it on Github, but please don’t expect support from the developers of your favorite Play Services-dependant app if it does not work with GmsCore. Use at your own risk!

0. Prerequisites

You’ll need to have a phone…

  • …running Android 4.0.3 or later (most probably - if you get some of these things working under Gingerbread, let me know)
  • …with root access
  • …which does not have Google Apps (also known as GAPPS) installed.

1. Setting up F-Droid (optional)

For some of the applications we’re going to install, I provide independent, unofficial builds via my F-Droid repository (side note: the F-Droid server tools and documentation are a complete nightmare. Maybe I should do a second post on how to set up an F-Droid repo…).

The repository URL is

The SHA-256 fingerprint of the signing key is c93b9baccccccc973fbef19bea60733229c59ce79f54d04878b604baab502a0d.

2. Installing Xposed

Are you an OmniROM user?

If you’re using a not too old version of OmniROM (Android 5.1+, built on Aug 02, 2015 or later), support for signature spoofing is already present.

There may also be some other custom ROMs which include the patches; you’ll have to ask your ROM developer if unsure.

“What is signature spoofing?”
Signature spoofing enables an app to mimic another app’s package signature (in our case that of Google’s apps) after it has requested the permission to do so. Without it, an alternative Play Services implementation such as GmsCore would unfortunately be impossible.

You may have to enable the feature in the settings:

Starting with OmniROM nightly 20151012, it will be required to enable signature spoofing at the bottom of the developer settings (source)

Afterwards, you can skip the installation of Xposed and immediately continue with step 3.

If you’re not using OmniROM…

…or some other ROM with signature spoofing support, you’ll have to install the Xposed framework.

A download link together with further instructions can be found here.

If you’re using Android 5.0 (SDK 21), 5.1 (SDK 22) or 6.0 (SDK 23), you’ll need to download a prerelease version of Xposed instead. For more details on which of the listed versions is the right one for your device and ROM, see “Which is the right Xposed for me?” in this Q&A.

If you don’t want to use Xposed…

…you might want to check out Needle.

3. Installing stuff through F-Droid

Open F-Droid and install these from my repository (or use the provided download links):

We’ll need some additional stuff that can be found in the official F-Droid repo:

  • /system/app mover - update: this is optional, you probably won’t need it.
  • One of the many UnifiedNlp backends available, if you want the network location service to work. I use the LocalGsmNlpBackend.
  • For Android <4.4, the version of UnifiedNlp that comes with GmsCore does not work. Installing µg UnifiedNlp for GAPPS-free devices (legacy) fixes that.

4. Set up all that stuff

If you installed FakeGapps in step 3, you’ll have to activate it. To do that, open the Xposed Installer, tap Modules and put a check mark next to the FakeGapps entry.

If you installed Blankstore in step 3…

Update: this first step is optional and unnecessary. First, open the /system/app mover and make Blankstore a system app.

Next, please make sure you have valid login credentials for a Google Account and a corresponding Android ID, which can be generated by following these steps.

Go to your phone’s settings, choose Add Account > Google Play Account and enter your login, password and Android ID - the other fields don’t need to be changed. Tap Create Account and you’re done.


For the network location service to work, you need to enable Access to my location as well as Wi-Fi & mobile network location in your phone’s location access settings.

If the Wi-Fi & mobile network location setting has a description mentioning sending location data to Google, don’t worry. What you just installed is not Google’s location service, but UnifiedNlp.
Whether location data will be sent to some internet service depends on which UnifiedNlp backend(s) you choose to install. It’s perfectly possible to resolve your location locally on your phone using a database of cell towers.

microG settings

Open the microG Settings app and tick both checkboxes to enable services such as GCM. You should also open the UnifiedNlp settings to enable the location backend you installed earlier.

If you had to install UnifiedNlp as a separate app in step 3, you’ll find the correct UnifiedNlp settings in their own app called UnifiedNlp (surprise!).

Apps using Google Cloud messaging

If you want to use GCM with an app you already had installed beforehand, you’ll need to update or reinstall it so that it can request the corresponding permission (no uninstalling necessary, just installing the APK a second time should suffice).

5. Install Maps API v1 (optional)

In addition to the Maps API v2 implementation included in GmsCore, there’s also a seperate implementation for the old version of the API. As there’s still a considerable number of apps using the old API, I recommend installing it by flashing the MapsAPI .zip file using your phone’s recovery.

6. Troubleshooting

Flashing the Maps API v1 .zip file from recovery does not work

Extract and from the .zip archive and transfer them into some folder on your phone. Open an ADB shell and do something like

cd /sdcard/folder-with-maps-api-stuff
mount -o remount,rw /system
mv /system/framework/
mv /system/etc/permissions/
chmod 644 /system/framework/
chmod 644 /system/etc/permissions/

/system/app mover complains about missing BusyBox

Go install BusyBox from somewhere or make BlankStore a system app yourself. Opening an ADB shell and entering these commands should work (for Android 4.4 or later, replace /system/app/ with /system/priv-app/):

cd /data/app
mount -o remount,rw /system
mv /system/app/

Android <4.4: UnifiedNlp still doesn’t work, even as a separate app

Make UnifiedNlp a system app using the same procedure as for BlankStore.

7. Reboot your device

…if you didn’t do that already. Enjoy!

Updated on Nov 18, 2015: Fixed problems with FakeGapps when using Android 5.
Updated on Dec 17, 2015: My FakeGapps patch has been accepted & there’s now an official version in the Xposed repo (plus: changed SHA fingerprint to a more F-Droid friendly format).
Updated on Jan 4, 2016: Added HTTPS to site & repo. Mentioned Needle as an alternative to installing Xposed.
Updated on Feb 6, 2016: Clarified that making Blankstore a system app is unnecessary.
Last updated on Jun 1, 2016: Installing FakeGapps through the Xposed installer is not going to work properly with my F-Droid repo anymore. It will cause the same updating problems people have with Omnirom’s signature spoofing (or when patching with Needle). If you’re relying on one of these methods for signature spoofing, you should use the official microg repository instead.