Java Android PackageStats提供负值
我正在使用PackageStats,在打印PackageStats的codeSize、cacheSize、dataSize时,一些数据是负数 有几个问题:Java Android PackageStats提供负值,java,android,android-7.0-nougat,Java,Android,Android 7.0 Nougat,我正在使用PackageStats,在打印PackageStats的codeSize、cacheSize、dataSize时,一些数据是负数 有几个问题: 这怎么可能 考虑到apk大小约为50MB,代码大小可能为负值的情况是什么 是否有其他方法可以可靠地提取上述信息 另外,对于Android N,它给了我“NoSuchMethodException”。所以 它是为安卓N删除的还是有办法使用它 有没有其他方法可以帮助我计算上述尺寸 代码: 刚刚在API 23/24上试用过,可以直接进行实例
- 这怎么可能
- 考虑到apk大小约为50MB,代码大小可能为负值的情况是什么
- 是否有其他方法可以可靠地提取上述信息
- 它是为安卓N删除的还是有办法使用它
- 有没有其他方法可以帮助我计算上述尺寸
刚刚在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;
能否添加一个代码示例,包括如何显示/检查该值以及对该值执行的任何计算?确定。我没有执行任何计算,除了1,其中我将值除以1024*1024,得到以MB为单位的值。我同意你的看法。另一种方法是如果它超过了可能的长度。你所说的只是实例它是什么意思?@the face with“just instance it”我指的是
new
关键字-不带invoke()
和onGetStatsCompleted()
。负值基本上只适用于有符号整数,因此最大值可能不是4294967295,而是2147483647(而-2147483647可能只是指示错误或缺少值)。。。虽然哪个用户运行代码确实很重要,但由于存在应用程序、用户专用存储和用户共享存储,并且用户专用区域的大小可能会有所不同。您是否可以共享确切的命令来获取大小(正如您在onGetStatsCompleted中所建议的,不需要),它每次都为零。我怀疑它是否有效,因为如果它如此简单,每个人都会使用它。只有实例化永远不会给出应用程序的大小。查看PackageManagerService类的第16562行,您可以在其中找到如何初始化包大小。大小的实际计算是在Installer类中完成的
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;