Android中的软件包统计信息

时间:2016-04-11 13:47:58

标签: 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.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()方法内。

1 个答案:

答案 0 :(得分:0)

不幸的是,目前没有公共API来检索有关应用程序包的大小信息。但是,基于我过去编写的技术,我们可以使用PackageManager的隐藏getPackageSize方法来检索包含缓存,代码和数据大小信息的PackageStats实例。

首先,我们的应用程序需要GET_PACKAGE_SIZE权限:

<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>

使用ADT,我们可以将相关的AIDL(PackageStats和IPackageStatsObserver)导入到我们的项目中,并让ADT生成存根。生成存根后,我们可以简单地使用反射来调用隐藏的getPackageSize方法,并在存根的onGetStatsCompleted回调方法中检索PackageStats实例:

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

虽然这是有效的,但是解决一个缺失的Android API显然是个大黑客。超越SDK绝不是一个好主意,特别是对于公共应用程序。

来自http://www-jo.se/f.pfleger/android-package-size

的信息