Подтвердить что ты не робот

Android PackageStats дает отрицательные значения

Я использую 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;
    };
}
4b9b3361

Ответ 1

просто попытался использовать API 23/24 и может просто указать его.

эти свойства external* могут относиться к SD-карте.

    PackageStats stats = new PackageStats(context.getPackageName());
    long codeSize  = stats.codeSize + stats.externalCodeSize;
    long dataSize  = stats.dataSize + stats.externalDataSize;
    long cacheSize = stats.cacheSize + stats.externalCacheSize;
    long appSize   = codeSize + dataSize + cacheSize;