获取安装的应用程序的大小 [英] Getting installed app size
问题描述
我试图找出如何让一个安装的应用程序的大小。
什么已经失败'S:
- 新建文件(/数据/应用/ some.apk')
- 报告不正确的大小
- PackageManager.getPackageSizeInfo(字符串的packageName,IPackageStatsObserver观察员)
- 为 @hide
,并依赖于一些不起眼的 IPackageStatsObserver
的结果,所以我不能通过反射调用它。
I'm trying to figure out how to get the size of an installed app.
What's already failed:
- new File('/data/app/some.apk')
- reports incorrect size
- PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)
- is @hide
and relies on some obscure IPackageStatsObserver
for result so I can't call it via reflection.
推荐答案
不幸的是,目前<一个href="http://groups.google.com/group/android-developers/browse_thread/thread/e920aca2eac277f3">no官方的<一个href="http://groups.google.com/group/android-developers/browse_thread/thread/df94daae34336aad/f96a8425549c6637">way要做到这一点。但是,你的可以的调用<一href="http://developer.android.com/reference/android/content/pm/PackageManager.html"><$c$c>PackageManager$c$c>'s隐藏的<一个href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/content/pm/PackageManager.java;hb=HEAD"><$c$c>getPackageSize$c$c>方法如果导入的<一个href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/content/pm/PackageStats.aidl;hb=HEAD"><$c$c>PackageStats$c$c>和<一href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/content/pm/IPackageStatsObserver.aidl;hb=HEAD"><$c$c>IPackageStatsObserver$c$c> AIDLs到我们的项目中,并生成存根。然后,您可以使用反射来调用<一个href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/content/pm/PackageManager.java;hb=HEAD"><$c$c>getPackageSize$c$c>:
Unfortunately there is currently no official way to do that. However, you can call the PackageManager
's hidden getPackageSize
method if you import the PackageStats
and IPackageStatsObserver
AIDLs into our project and generate the stubs. You can then use reflection to invoke getPackageSize
:
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);
}
});
That's obviously a big hack and should not be used for public applications.
- Android Package Size
- Using AIDL with Eclipse and ADT
- APK Piracy: Using private code & resources in Android
这篇关于获取安装的应用程序的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!