最近在做清理系统缓存功能时,用到以下方法
PackageManager pm = context.getPackageManager();
Method localMethod = pm.getClass().getMethod("freeStorageAndNotify", Long.TYPE, IPackageDataObserver.class);
Long localLong = Long.valueOf(getEnvironmentSize() - 1L);
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = localLong;
localMethod.invoke(pm, localLong, new IPackageDataObserver.Stub() {
public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {
}
});
在调试状态能正常运行,但是正式打包编译就遇到一个错误,日志提示
java.lang.NoSuchMethodException: freeStorageAndNotify [long, interface ]
,提示找不到freeStorageAndNotify 方法,解决方法是:在proguard.cfg文件中加入以下两句:
-dontwarn android.content.pm.**
-keep class android.content.pm.** { *; }
使这个IPackageDataObserver.aidl这个类不被混淆,至此,问题解决了