Я использую PackageStats, и при печати PackageStats codeSize, cacheSize, dataSize некоторые данные поступают как отрицательные.
Несколько вопросов:
- Как это возможно?
- Каковы сценарии, когда codeSize может быть отрицательным, учитывая, что размер apk составляет около 50 МБ?
- Любые другие способы, которые можно надежно использовать для извлечения вышеуказанной информации?
Кроме того, для Android N это дает мне «NoSuchMethodException». Итак,
- Это удалено для Android N или есть способ его использовать?
- Любые альтернативы, которые могли бы помочь мне рассчитать вышеуказанные размеры?
Код:
PackageManager packageManager = context.getPackageManager();
Method myUserId = UserHandle.class.getDeclaredMethod("myUserId");
int userID = (Integer) myUserId.invoke(packageManager);
Method getPackageSizeInfo = packageManager.getClass().getDeclaredMethod("getPackageSizeInfo", String.class, int.class,
IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, context.getPackageName(), userID, new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
long codeSize = pStats.codeSize / MB; //long MB = 1024*1024;
long cacheSize = pStats.cacheSize / MB;
long dataSize = pStats.dataSize / MB;
long appSize = codeSize + cacheSize + dataSize;
};
}