为了账号安全,请及时绑定邮箱和手机立即绑定

正在安装的应用大小

正在安装的应用大小

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

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

不幸的是,目前尚无官方方法可以做到这一点。但是,如果您将和AIDL导入我们的项目并生成存根,则可以调用PackageManager的hidden getPackageSize方法。然后,您可以使用反射来调用:PackageStatsIPackageStatsObservergetPackageSize


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

        }

    });

显然这是一个很大的漏洞,不应将其用于公共应用程序。


查看完整回答
反对 回复 2019-09-24
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您可以通过获取apk文件的路径并检查其长度来简化操作:


final PackageManager pm = context.getPackageManager();

ApplicationInfo applicationInfo = pm.getApplicationInfo(appInfo.getPackage(), 0);

File file = new File(applicationInfo.publicSourceDir);

int size = file.length();


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信