Java Android中的软件包统计
我正在尝试使用Java获得应用程序的大小。我拥有的代码如下:Java Android中的软件包统计,java,android,package,Java,Android,Package,我正在尝试使用Java获得应用程序的大小。我拥有的代码如下: PackageStats packageStats = new PackageStats("com.tsepak.supplierchat.debug"); LoggerDebug.d(TAG, String.valueOf(packageStats.externalCodeSize)); LoggerDebug.d(TAG, String.valueOf(packageStats.externalData
PackageStats packageStats = new PackageStats("com.tsepak.supplierchat.debug");
LoggerDebug.d(TAG, String.valueOf(packageStats.externalCodeSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.externalDataSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.externalCacheSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.externalMediaSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.externalObbSize));
LoggerDebug.d(TAG, "External finished");
LoggerDebug.d(TAG, String.valueOf(packageStats.cacheSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.codeSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.dataSize));
LoggerDebug.d(TAG, String.valueOf(packageStats.packageName));
LoggerDebug.d(TAG, String.valueOf(packageStats.describeContents()))
此代码的输出为:
PackageStats{20bc99f7 com.tsepak.supplierchat.debug}
0
0
0
0
0
External finished
0
0
0
0
我哪里出了问题?我看不出包裹的尺寸。这些行位于片段中的
onViewCreated()
方法中。不幸的是,目前没有公共api来检索有关应用程序包的大小信息。但是,基于我在过去写过的一种技术,我们可以使用PackageManager的hidden getPackageSize方法来检索PackageStats的实例,该实例包括缓存、代码和数据大小信息
首先,我们的应用程序需要GET_PACKAGE_SIZE权限:
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
虽然这是可行的,但要解决Android API中缺失的部分显然是一个大难题。超越SDK从来都不是一个好主意,尤其是对于公共应用程序
信息来源:
PackageManager pm = getPackageManager();
Method getPackageSizeInfo = pm.getClass().getMethod(
"getPackageSizeInfo", String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(pm, "com.android.mms", new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
Log.i(TAG, "codeSize: " + pStats.codeSize);
}
});