Android--获取apk大小

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/82226830
//获取apk大小
    public static String getPkgSize(final Context context, String pkgName) throws NoSuchMethodException,
            InvocationTargetException, IllegalAccessException {
        // getPackageSizeInfo是PackageManager中的一个private方法,所以需要通过反射的机制来调用
        Method method = PackageManager.class.getMethod("getPackageSizeInfo",
                String.class, IPackageStatsObserver.class);
        // 调用 getPackageSizeInfo 方法,需要两个参数:1、需要检测的应用包名;2、回调
        method.invoke(context.getPackageManager(), pkgName,
                new IPackageStatsObserver.Stub() {
                    @Override
                    public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
                        // 子线程中默认无法处理消息循环,自然也就不能显示Toast,所以需要手动Looper一下
                        Looper.prepare();
                        // 从pStats中提取各个所需数据
//                        Toast.makeText(context, "缓存大小=" + Formatter.formatFileSize(context, pStats.cacheSize) +
//                                        "\n数据大小=" + Formatter.formatFileSize(context, pStats.dataSize) +
//                                        "\n程序大小=" + Formatter.formatFileSize(context, pStats.codeSize),
//                                Toast.LENGTH_LONG).show();
                        // 遍历一次消息队列,弹出Toast
                        long totalsize1 = pStats.cacheSize + pStats.dataSize + pStats.codeSize;
                        DecimalFormat df=new DecimalFormat("0.00");
                        totalsize = df.format(Double.valueOf(totalsize1 /1024/ 1024D));
                        Looper.loop();
                    }
                });
        return totalsize;
    }

添加权限:

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

目录结构为上图:

1、创建包:android.content.pm

2、创建两个AIDL文件IPackageStatsObserver.aidl 、PackageStats.aidl

AIDL下载地址:https://download.csdn.net/download/chaoyu168/10637213

猜你喜欢

转载自blog.csdn.net/chaoyu168/article/details/82226830