正在安装的应用大小

我试图弄清楚如何获得已安装应用程序的大小。
什么是已经失败:
new File('/data/app/some.apk')-报告不正确的大小
PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)-是@hide和依赖于一些模糊IPackageStatsObserver的结果,所以我不能通过反射调用它。



湖上湖
浏览 579回答 3
3回答

繁华开满天机

不幸的是,目前尚无官方方法可以做到这一点。但是,如果您将和AIDL导入我们的项目并生成存根,则可以调用PackageManager的hidden getPackageSize方法。然后,您可以使用反射来调用:PackageStatsIPackageStatsObservergetPackageSizePackageManager 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);        }    });显然这是一个很大的漏洞,不应将其用于公共应用程序。

收到一只叮咚

您可以通过获取apk文件的路径并检查其长度来简化操作:final PackageManager pm = context.getPackageManager();ApplicationInfo applicationInfo = pm.getApplicationInfo(appInfo.getPackage(), 0);File file = new File(applicationInfo.publicSourceDir);int size = file.length();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android