PSA: Google Play Services Wakelock Affects Many 5.x ROMs
Wakelocks are the bane of the battery conscious, and this wakelock bug has been plaguing Android ROMs for a while. Yes, the issue is neither new nor unique, and it won’t be resolved for good until Google steps up, but the recent launches of CyanogenMod 12 and CyanogenOS (among others) have prompted a new round of interest in the Google Play Services 7.x SystemUpdateService Wakelock bug. The good news is that CM12 saw a fix folded in yesterday, and CyanogenOS should be patched by next week. The bad? Every other ROM maker still needs to account for the newest issue, and the root cause is as buggy as ever. This is not the last time we will have this conversation, but for now let’s discuss the problem, point out the patches & progress reports, and bring our battery power back to fighting shape.
Bug? What Bug?
It’s easy to see that a phone’s power is going down faster than it should, but which phones/ROMs are affected, and what is the root cause? Let’s start with the latter question. Google Play Services contains an OTA update checker, called SystemUpdateService, whose job is to look for and respond to over-the-air requests. On custom ROMs, updates come through the ROM maker, not Google or the carrier, so this service does nothing but get in the way. For example, continually reacting to updates that can’t be installed is a quick way to max out your data plan – another common issue. Similarly, update checks wake up the phone and drain battery. The easy solution to both is to simply have ROM makers disable the service and call it a day, which is precisely what most have done up to and including Android 5.x. Unfortunately, Lollipop throws a wrench into the works.
Starting with Android 5.0 and Gooogle Play Services 7.x, the update mechanism includes a wakelock checker. In essence, the phone is now woken up to perform a check, fails to contact the (disabled) SystemUpdateService, and continues to wait around indefinitely for a response that will never arrive. This is obviously a problem, and leads to screenshots of plummeting battery meters and solid “Awake” lines flooding every forum within earshot. Getting back to the original question, the global nature of this bug means its reach is similarly widespread. Any device running any ROM that either hasn’t limited the SystemUpdateService, or is on Lollipop without a Lollipop-specific patch will see these wakelocks. But fear not, the solutions are already falling into place for this latest round of trouble.
There are several ways to go about solving this annoying issue, from custom flashable versions of Play Services to the more resilient official ROM patches for CyanogenMod and OS. The Cyanogen solution elegantly re-enables SystemUpdateService, but restricts its receivers. The net result is that when the service checks for updates, it immediately fails and terminates. Obviously this is still imperfect, but is a clever trick that will hopefully appear in other Lollipop ROMs soon. For your battery needs, here is the full rundown of your patch options from most to least effective.
- Gooogle Patch – This is a known issue. A solution from Google is the only way to ensure that this article never requires a followup. There is no word on movement.
- CyanogenMod 11 – Resolved last month. Update your ROM.
- CyanogenMod 12.0 – Folded into the stable repo yesterday. Update your ROM.
- CyanogenMod 12.0 Nightly – Folded into the repo yesterday. Update your nightly.
- CyanogenOS – Fix coming next week? Read on for a temporary workaround, and check back with Cyanogen for more details.
- Whack-a-mole hack – If you’ve made it this far in the post, my sympathies are with you and your battery. Recognized Developer Calkulin has thankfully stepped up with a partial fix in the OnePlus One forum, but it comes with a few caveats. Instead of the preferable system-wide solution, this flashable file is a modified version Play Services with the offending code removed. By its very nature, this file will be overwritten by Google when the next Play Service update is pushed, silently killing your device once again. Calkulin has graciously pledged to update his post every time this happens, but it is an arduous task and requires vigilance on everyone’s part. The more troubling aspect is that this file is model & OS specific. The current version, Google Play Services v7.3.27-438, is version 7.3.27, for Android Lollipop (4), armeabi-v7a architecture (3), and 480 DPI displalys (8). If this is you, great! If not, flash at your own risk because apps relying on the services (which is most of them) could contain hickups. To check the three-digit identifier your device uses, find “Google Play services” in Android’s “Apps” section of settings, and look for the last three digits in the version number (eg: version 7.0.99 (1809214-430) ). Good luck!
Battery issues are annoying and costly, but at least this is a song and dance with which we are familiar. Patience is the operative virtue here. Patience, and a responsive ROM developer. A responsive Google wouldn’t hurt, either, but that may be asking too much.