Borrado de los datos de otra aplicación

Estoy escribiendo una aplicación que debería ser capaz de borrar los datos privados de cualquier otra aplicación. Si usted se está preguntando sobre el caso de uso, su a lo largo de las líneas de un cliente MDM / MAM. Me gustaría limpiar selectivamente los datos de la aplicación (frente a un borrado completo del dispositivo).

Me encontré con la siguiente llamada de API en el código fuente de Android.

ActivityManager.clearApplicationUserData(String packageName,IPackageDataObserverobserver) 

Lo extraño es que esto no está realmente disponible para usted como parte del SDK. (Así que eclipse le dará infierno por tratar de usarlo). Sin embargo, está presente (véase aquí ), puede invocarlo a través de la reflexión. Todavía estoy sin embargo, incapaz de conseguir la interfaz IPackageDataObserver .

¿Hay una mejor manera de hacer esto? Sé que se puede hacer desde que he visto productos como MaaS360 hacer un borrado selectivo de los datos de las aplicaciones.

¿Alguna sugerencia?


ACTUALIZAR

Basado en lo que @lechlukasz ha explicado a continuación … el código siguiente se puede ejecutar … pero finalmente aterriza con SecurityException, ya que el administrador de paquetes revoca el permiso CLEAR_APP_USER_DATA cuando se instala la aplicación.

 Class<?> iPackageDataObserverClass= Class.forName("android.content.pm.IPackageDataObserver"); Class<ActivityManager> activityManagerClass=ActivityManager.class; ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); Method clearDataMethod=activityManagerClass.getMethods()[0]; Object iPackageDataObserverObject = Proxy.newProxyInstance( MyApp.class.getClassLoader(), new Class[]{iPackageDataObserverClass}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Log.i("Proxy", method.getName() + ": " + Arrays.toString(args)); return null; } }); clearDataMethod.invoke(activityManager, "com.example.test",iPackageDataObserverObject); 

Así que esto funciona, en la medida en que el método puede ser llamado. No hay suerte en ser capaz de borrar los datos en sí. Unesdoc.unesco.org

El método que usted apunta no es un método estático, por lo que para llamarlo necesitará la instancia de ActivityManager , que sería la parte más complicada, incluso si tiene privilegios de root. No puedo ayudarte con eso.

Pero en cuanto a instanciar IPackageDataObserver , he logrado hacerlo sin privilegios especiales, utilizando la API de refrección estándar:

  Class ipdoClass = Class.forName("android.content.pm.IPackageDataObserver"); Object observer = Proxy.newProxyInstance( MyApp.class.getClassLoader(), new Class[]{ipdoClass}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Log.i("Proxy", method.getName() + ": " + Arrays.toString(args)); return null; } }); 

Su código debería funcionar, pero debe agregar el permiso apropiado en su manifiesto (CLEAR_APP_USER_DATA) y firmar Su aplicación con la clave de la plataforma.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.