Crazy Google is hacking Android functionality more and more

Crazy Google is hacking Android functionality more and more

Since Android 5 Lollipop something went wrong with Google's team leads working on Android. They decided to break existing APIs under the cover of fighting for users privacy, but without even asking users if they want privacy in this way, and without providing an option to customize new behaviour.

The problem with approach that Google has chosen is one-sidedness. While they think they "improve" some aspects of user experience they degrade many others.

Hibernate is a good example. Hibernate helps people to organize their work environment in a way they like it, preventing many obtrusive apps, including apps from Google itself, from sniffing and tracking user actions continuously (not to mention CPU and memory consumption). In fact, this is Hibernate who fights for user's privacy and, most importantly, it works on behalf of a user, with his/her explicit permission. Now comes the Google and cuts down public APIs - actually breaking devices without asking device's owners.

First they broke getRunningTasks method of ActivityManager in Android 5.0. This issue was addressed in Hibernate 1.22 and is covered in Hibernate FAQ.

Explanations from Google are highly unconvincing when they say this was necessary to eliminate personal information leakage from the list of "recents". Instead of destructing the "recents" APIs they should filter out their precious document-centric "recents" from the API list but preserve app-centric ones. Actually, package names are NOT personal information! And even if we suppose that "recents" may contain some personal info, the application such as Hibernate can NOT violate privacy because it does not have permissions for network - nothing can leave your device.

As a replacement for getRunningTasks Hibernate introduced special accessibility service, which should be enabled by user manually, and which consumes additional resources. Of course, this is bad, but this is inevitable after the restrictions in APIs made by Google.

But that was not the end of the story. In the summer 2015 Google released new Android 5.1.1 builds which broke APIs even more. Now they destroyed getRunningAppProcesses method. Instead of it they suggests to rely on the Usage statistics API. Unfortunately this is fully inapplicable for the hibernating task. When you request stats via UsageStatsManager, you may get a list without many apps that are actually running, and so you will be unable to prevent them from background activity in future. And even more: when you kill an app from the list of stats, the app remains in the list because this is stats, not the actual state of the apps. So, old APIs were spoiled, new APIs are useless.

Again I found a workaround (released in Hibernate 1.29) but at the expense of more intense resource consumption. Now if Hibernate receives a rudimentary list of processes from Android, it executes "ps" command in the shell and parses its results. Of course, this is a hack and may not work on all devices, but this is how Google cares about users.

Most interesting thing in the story that the destructive changes arrived within the single minor release number. It's been working in one Android 5.1.1 build (for example, LMY47V), but is corrupted in another Android 5.1.1 (LMY48I). This is just insane!

It looks like Android design has been changed with security in mind (probably to address highly desired corporate segment), but Google has lost his mind in every other aspect but security. They do not keep good software design principles, usability, functionality, and even common sense in mind any more.

Instead of playing with pseudo-privacy concerns Google should implement a startup/bootup/process manager allowing users to control what's running on their devices (then there will be no need in Hibernate). This is what Android lacks from very beginning, but Google does not understand that.

No comments:

Post a Comment