Android App Ops is no more…

Two weeks after I wrote Android App Ops is a Step Forward, Google has disabled/removed the permission manager. After the Android 4.4.2 update, invoking the App Ops app results in a RuntimeException.

The R.I.P. permission manager, a very important capability for end-users, WAS a step forward; we are going backwards here.

Google’s response for why they removed this capability (via ReadWrite) is as follows:

Since Google never supplied documentation for the accidental release of the permissions manager, Android developers had no opportunity to prepare for the possibility that users might be withholding individual permissions, or to warn users about the possibility that an app might break if they did so.

OK. I do understand the rationale — I covered similar concerns when I wrote my original blog on App Ops:

This will require that developers be aware and properly test for scenarios related to restricted features/APIs not being available, and perhaps new documentation related to permissions guidelines for developers.

Seems the whole thing was not given proper thought.

It is of extreme importance to end-users to re-add this winning capability as soon as possible.

Here is EFF’s response to this debacle:

The disappearance of App Ops is alarming news for Android users. The fact that they cannot turn off app permissions is a Stygian hole in the Android security model, and a billion people's data is being sucked through. Embarrassingly, it is also one that Apple managed to fix in iOS years ago.

This debacle should be temporary. Google, please re-enable this ASAP.

/ceo


Related to this:

* Android App Ops is a Step Forward

* Google Kills A Cool Privacy Feature In Android That It Didn’t Intend To Release (ReadWrite)


LogCat when invoking the App Ops permission manager (Android 4.2.2):

12-15 11:32:41.004: E/AndroidRuntime(12663): FATAL EXCEPTION: main
12-15 11:32:41.004: E/AndroidRuntime(12663): Process: com.android.settings, PID: 12663
12-15 11:32:41.004: E/AndroidRuntime(12663): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.Settings}: java.lang.IllegalArgumentException: Invalid fragment for this activity: com.android.settings.applications.AppOpsSummary
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.os.Handler.dispatchMessage(Handler.java:102)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.os.Looper.loop(Looper.java:136)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at java.lang.reflect.Method.invokeNative(Native Method)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at java.lang.reflect.Method.invoke(Method.java:515)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at dalvik.system.NativeStart.main(Native Method)
12-15 11:32:41.004: E/AndroidRuntime(12663): Caused by: java.lang.IllegalArgumentException: Invalid fragment for this activity: com.android.settings.applications.AppOpsSummary
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1180)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1199)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:545)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at com.android.settings.Settings.onCreate(Settings.java:207)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.Activity.performCreate(Activity.java:5231)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
12-15 11:32:41.004: E/AndroidRuntime(12663): 	... 11 more
12-15 11:32:41.014: W/ActivityManager(611):   Force finishing activity com.android.settings/.Settings