android - 如何获取 App 的所有信息(Apk 大小、缓存大小、数据大小、总缓存大小)
问题描述
为了获得问题中提到的信息,我尝试使用隐藏的 Api(使用 AIDL),它在 26 以下的 Api 中有效,但在 26 或 27 中无效。在奥利奥中它给了我这个:
java.lang.UnsupportedOperationException: Shame on you for calling the hidden API getPackageSizeInfoAsUser(). Shame!
我确实做到了: http ://allandroidprojects.blogspot.com/2016/06/android-get-cache-size-data-size-apk.html
这个解决方案被接受,但这在 oreo 中不起作用:
该帖子中提到的另一个解决方案是:
final PackageManager pm = context.getPackageManager();
ApplicationInfo applicationInfo = pm.getApplicationInfo(appInfo.getPackage(), 0);
File file = new File(applicationInfo.publicSourceDir);
int size = file.length();
通过使用上述方法,我无法获得所有应用程序的大小,因为它只给我基本 apk 大小而不是应用程序的其他内容,例如:
日志 :
2019-07-02 11:48:16.082 4069-4069/com.example.getallinstallapp D/AppSize: :com.android.cts.priv.ctsshim:6044
2019-07-02 11:48:16.098 4069-4069/com.example.getallinstallapp D/AppSize: :/system/priv-app/GoogleExtServices/GoogleExtServices.apk
2019-07-02 11:48:16.099 4069-4069/com.example.getallinstallapp D/AppSize: :Android Services Library:10924
2019-07-02 11:48:16.154 4069-4069/com.example.getallinstallapp D/AppSize: :/data/app/com.example.voicelockreenginer-nhzu_JLVE6Eh5C-sfg-asg==/base.apk
2019-07-02 11:48:16.154 4069-4069/com.example.getallinstallapp D/AppSize: :VoiceScreenLock:144984
2019-07-02 11:48:16.163 4069-4069/com.example.getallinstallapp D/AppSize: :/system/app/CubeLiveWallpapers/CubeLiveWallpapers.apk
2019-07-02 11:48:16.163 4069-4069/com.example.getallinstallapp D/AppSize: :Example Wallpapers:22868
2019-07-02 11:48:16.169 4069-4069/com.example.getallinstallapp D/AppSize: :/system/priv-app/TelephonyProvider/TelephonyProvider.apk
2019-07-02 11:48:16.169 4069-4069/com.example.getallinstallapp D/AppSize: :Phone and Messaging Storage:137053
2019-07-02 11:48:16.196 4069-4069/com.example.getallinstallapp D/AppSize: :/system/priv-app/CalendarProvider/CalendarProvider.apk
2019-07-02 11:48:16.196 4069-4069/com.example.getallinstallapp D/AppSize: :Calendar Storage:127531
2019-07-02 11:48:16.202 4069-4069/com.example.getallinstallapp D/AppSize: :/system/priv-app/MediaProvider/MediaProvider.apk
2019-07-02 11:48:16.202 4069-4069/com.example.getallinstallapp D/AppSize: :Media Storage:133272
2019-07-02 11:48:16.214 4069-4069/com.example.getallinstallapp D/AppSize: :/system/priv-app/GoogleOneTimeInitializer/GoogleOneTimeInitializer.apk
2019-07-02 11:48:16.214 4069-4069/com.example.getallinstallapp D/AppSize: :Google One Time Init:58568
2019-07-02 11:48:16.229 4069-4069/com.example.getallinstallapp D/AppSize: :/system/app/GoogleExtShared/GoogleExtShared.apk
2019-07-02 11:48:16.229 4069-4069/com.example.getallinstallapp D/AppSize: :Android Shared Library:4774
2019-07-02 11:48:16.236 4069-4069/com.example.getallinstallapp D/AppSize: :/system/priv-app/WallpaperCropper/WallpaperCropper.apk
2019-07-02 11:48:16.236 4069-4069/com.example.getallinstallapp D/AppSize: :com.android.wallpapercropper:25986
这里它给了我VoiceScreenLock:144984
大约 144 kb 的大小,但它的实际大小大约是 13.5 到 14 MB。
上面提到的方法也返回了一些正确的 apk 大小。所以为了更清楚,我去了设备资源管理器。https://ibb.co/r2ys3ZW
如您所见,为了获取整个应用程序大小,我需要合并该文件夹中所有 .apk 的结果。
如何获得适当的应用程序大小和其他相关信息?
解决方案
推荐阅读
- performancecounter - 无法在性能监视器中添加我的自定义性能计数器
- php - Laravel 8:如何检查表是否为空
- google-apps-script - 如何从 Google 表格自定义菜单将 MailApp noReply 从 true 设置为 false?
- hyperledger-fabric - 调用 javascript 链码时出错
- python - sys.setrecursionlimit 在 jupyter 笔记本中不起作用
- node.js - 以编程方式更新 node_modules 以匹配 package.json 版本?
- node.js - Mongoose/MongoDB PUT:如果对象 ID 在数组中是唯一的,则将对象推送到数组
- python - 问题标记 POS
- ios - 即使 App 被 IOS 中的用户杀死,如何每 10 秒调用一次 api?
- javascript - jquery val() 不会改变值