Unable to get android.permission.CLEAR_APP_USER_DA

2019-04-11 05:35发布

问题:

I'm developing system application which requires special permissions. For some reason I can't get permission CLEAR_APP_USER_DATA, but I can use INSTALL_PACKAGES, DELETE_PACKAGES and others. What might cause this?

Manifest:

uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>
uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
uses-permission android:name="android.permission.DELETE_PACKAGES"/>
uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

I removed '<', because it wouldn't show the rest of the lines.

My code that uses permission:

String apkPackage = intent.getExtras().getString(context.getString(R.string.key_package));
            if (apkPackage != null) {
                PackageManager pm = context.getPackageManager();
                Class<?>[] types = new Class[] {String.class, IPackageDataObserver.class};
                try {
                    Method methodClearUserData = pm.getClass().getMethod("clearApplicationUserData", types);
                    methodClearUserData.invoke(pm, new Object[] {apkPackage, null});
                    Method methodDeleteCache = pm.getClass().getMethod("deleteApplicationCacheFiles", types);
                    methodDeleteCache.invoke(pm, new Object[] {apkPackage, null});
                } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                    Log.w(TAG, "Unable to invoke clear method.", e);
                }
            } else {
                Log.w(TAG, "Provided APK package is null.");
            }

[Edit]

07-15 14:29:32.136: W/RequestReceiver(4367): Unable to invoke clear method.
07-15 14:29:32.136: W/RequestReceiver(4367): java.lang.reflect.InvocationTargetException
07-15 14:29:32.136: W/RequestReceiver(4367):    at java.lang.reflect.Method.invokeNative(Native Method)
07-15 14:29:32.136: W/RequestReceiver(4367):    at java.lang.reflect.Method.invoke(Method.java:525)
07-15 14:29:32.136: W/RequestReceiver(4367):    at com.test.appmanager.RequestReceiver.onReceive(RequestReceiver.java:114)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2558)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.app.ActivityThread.access$1500(ActivityThread.java:165)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.os.Handler.dispatchMessage(Handler.java:107)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.os.Looper.loop(Looper.java:194)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.app.ActivityThread.main(ActivityThread.java:5370)
07-15 14:29:32.136: W/RequestReceiver(4367):    at java.lang.reflect.Method.invokeNative(Native Method)
07-15 14:29:32.136: W/RequestReceiver(4367):    at java.lang.reflect.Method.invoke(Method.java:525)
07-15 14:29:32.136: W/RequestReceiver(4367):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-15 14:29:32.136: W/RequestReceiver(4367):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-15 14:29:32.136: W/RequestReceiver(4367):    at dalvik.system.NativeStart.main(Native Method)
07-15 14:29:32.136: W/RequestReceiver(4367): Caused by: java.lang.SecurityException: Neither user 10070 nor current process has android.permission.CLEAR_APP_USER_DATA.
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.os.Parcel.readException(Parcel.java:1425)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.os.Parcel.readException(Parcel.java:1379)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.content.pm.IPackageManager$Stub$Proxy.clearApplicationUserData(IPackageManager.java:2918)
07-15 14:29:32.136: W/RequestReceiver(4367):    at android.app.ApplicationPackageManager.clearApplicationUserData(ApplicationPackageManager.java:1177)
07-15 14:29:32.136: W/RequestReceiver(4367):    ... 14 more

回答1:

That permission is marked as "Not for use by third-party applications." You mentioned that you are building a "system application", does this mean you are creating an app to be bundled with a custom platform image (for your own device, custom ROM, etc.)? In order for this to be used, it would have to be a "system" application which is pre-installed on an image, is owned by the 'system' user and signed with the platform key.



回答2:

Change the settings in the device, then it works cool.

The way how we enable developer options in the same way we will have an option(USB debugging(Security Settings)), so turn on that.

Option might be different in different devices.

Ex: Redmi Note 5 Pro - You can find in Settings --> Additional Settings --> Developer Options --> USB debugging