[Android Apps and Games] linuxct:
Once again... The title says it all.

This is my second attempt to make a fully functional backport of the Google Pixel launcher from Android O Public Beta 1 (a.k.a. Developer Preview 2). Like last time, I saw people complaining in APKmirror's Disqus thread, and even got some PMs asking me to please port the launcher, so here it is.

This hasn't been a 'quick backport' like last time, because turns out Google Play Services now verifies the signature of the packages (yes, you can't mod anything that was originally signed by Google anymore), and, if the signature doesn't match, gms makes the app

crash

. Providing this, I had to reverse-engineer the gms portion included inside the Launcher with no help from the stacktrace at all, since it displays (Unknown source) inside it. Have this as example:

05-18 10:57:13.561 9540 9540 E AndroidRuntime: java.lang.SecurityException: Signature check failed for com.google.android.apps.nexuslauncher
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1620)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1573)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at [B]com.google.android.gms.common.internal.o.zza[/B](Unknown Source)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at [B]com.google.android.gms.common.internal.x.fs[/B](Unknown Source)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at com.google.android.gms.internal.cy.yQ(Unknown Source)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at com.google.android.gms.internal.bQ.run(Unknown Source)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at com.google.android.gms.internal.bk.run(Unknown Source)
05-18 10:57:13.561 9540 9540 E AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
05-18 10:57:13.562 2070 2952 W ActivityManager: Force finishing activity com.google.android.apps.nexuslauncher/.NexusLauncherActivity

I started working on com.google.android.gms.common.internal.o.zza with barely any luck, when, modifying a single const/v4 made Android reject the class, and revealing the actual class that was calling it inside a new stacktrace, which was actually com.google.android.gms.common.internal.zzu$zza. From there I just made the function not to jump inside the call to ...internal.o.zza, and voilà. It works with no signature verification. I had to spend almost 2 hours, but it's been worth it :victory:

I've tested the application in my SHIELD Tablet running official LineageOS 13.0 nightlies, as well as in my Wileyfox Swift 2 with Android 7.1.1, and seems to be working like a charm with latest Google Play Services installed.

However, like last time I'd like to roll call all of you to please, test it and report back with any issue you find.

A NEW VERSION HAS BEEN RELEASED, FIXING THE BLUE BACKGROUND ISSUE AS WELL AS SOME FEATURES, CHECK IT OUT HERE!

DOWNLOAD LINK

SMALI MODIFICATIONS (v2)

NOTE:

- DO NOT MIRROR MY FILES, please.

- The background color of the App Drawer might be blue in some ROMs. This is not a bug on my side, and it's how Google did it. Fixed in v2.

- The apk, like last time, has been signed with my own key, so uninstall any previous versions before installing this one ;)

- Do you want to get Android O emojis too? Check this out.

- ... and no, there's no reflection.engine crashes anymore :laugh:

Special thanks to P4Block for having to hear me screaming when the code doesn't work, and Jose (in case you read this), now you know why I was freaking out early today :silly: