Android PackageStats提供负值

我正在使用PackageStats,并且在打印PackageStats的codeSize,cacheSize,dataSize时,有些数据会变成负数。

几个问题:

  • 这怎么可能?
  • 考虑到apk大小在50MB左右,codeSize可能是负数的场景是什么?
  • 还有哪些方法可以可靠地用来提取上述信息?

另外,对于Android N,它给了我“NoSuchMethodException”。所以,

  • 它被删除的Android N或有某种方式来使用它?
  • 任何可以帮助我计算以上尺寸的替代scheme?

码:

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; }; } 

Solutions Collecting From Web of "Android PackageStats提供负值"

只是在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;