Я использую PackageStats и при печати кода PackageSize, cacheSize, dataSize, некоторые данные поступают как отрицательные.Android PackageStats дает отрицательные значения
Несколько вопросов:
- Как это возможно?
- Каковы сценарии, когда codeSize может быть отрицательным, учитывая, что размер apk составляет около 50 МБ?
- Любые другие способы, которые могут быть надежно использованы для извлечения выше информации?
Кроме того, для Android N это дает мне "NoSuchMethodException" .so,
- ли удалена для 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;
};
}
Не могли бы вы добавить пример кода, включающий, как вы показываете/проверяете значение, а также любые вычисления, выполняемые над этим значением? – Zachary
Хорошо, конечно. Я не выполняю никаких вычислений, кроме 1, где я делю значения на 1024 * 1024, чтобы получить значение в МБ. – thepace