Java Android中的软件包统计

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

我正在尝试使用Java获得应用程序的大小。我拥有的代码如下:

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