我试图找出如何让一个安装的应用程序的大小。
什么已经失败'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.
推荐答案
不幸的是,目前no官方的way要做到这一点。但是,你的可以的调用PackageManager's隐藏的getPackageSize方法如果导入的PackageStats和IPackageStatsObserver AIDLs到我们的项目中,并生成存根。然后,您可以使用反射来调用getPackageSize:
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的大小 使用AIDL与Eclipse和ADT APK盗版:使用专用code和;在Android的 资源 Android Package Size Using AIDL with Eclipse and ADT APK Piracy: Using private code & resources in Android相关推荐
最新文章