Android读取APK Package包的图标安装信息

网上比较多关于怎么从未安装的APK Package包里面读取图标信息的文章,总结了一下,都是使用系统隐藏的API函数来实现的。。。

有两种方法来使用系统隐藏的API函数,

一种是直接编译系统,提取编译生成的framework包,添加到eclipse中USER LIBRARY,这种方法,调用比较方便

参考:http://www.blogjava.net/Green-nut/articles/336494.html

 

 

还有一种好像是使用Java反射的方法来调用这些隐藏的API函数,这个有点复杂。。。

参考:http://www.devdiv.com/article-1811-1.html

 

 

这里参考第一种方法,编译生成framework的jar包,然后添加到eclipse的user library路径中去,

怎么编译自己网上找资料了,要么下载别人编译生成的,,,

还有就是记得设置附加这个jar的javadoc路径哦,不然,鼠标放到函数上面时,会没有提示的,,,怎么设置,这个可以参考:

http://blog.csdn.net/Yao_GUET/archive/2011/04/02/6298482.aspx

 

前提:我们需要得到Android系统源码编译输出的一个文件
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
这个包里面包含所有的系统api, 隐藏的, 公开的
添加 jar方法
右键功能菜单->Properties->Java Build Path 
Libraries选项卡
这时应该有一个列表,  如果你没有添加过, 应该只有一项, 就是系统自带的Android SDK,  选中后,右手边有一个删除, 先删除系统添加的sdk. 
点Add Library -> User Library 
选择User Library 按钮, 新建一个User Library 将刚才那个文件 classes.jar 和系统本身的文件都导入进来, 调整下顺序,  将 classes.jar 调到前面
这样添加了之后, 就可以使用系统隐藏的api了

 

下面是调用的方法~~~

 

/** * Utility method to get default icon for a given package * @param archiveFilePath the absolute path of the package * @return the Drawable object of the package */ public Drawable getIconFromPackage(String archiveFilePath) { PackageParser packageParser = new PackageParser(archiveFilePath); File sourceFile = new File(archiveFilePath); DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); PackageParser.Package pkg = packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0); if (pkg == null) return mContext.getResources().getDrawable(R.drawable.android); // ApplicationInfo info = pkg.applicationInfo; Resources pRes = mContext.getResources(); AssetManager assmgr = new AssetManager(); assmgr.addAssetPath(archiveFilePath); Resources res = new Resources(assmgr, pRes.getDisplayMetrics(), pRes.getConfiguration()); // read the deafult icon of the package if (info.icon != 0){ Drawable icon = res.getDrawable(info.icon); return icon; } else { return mContext.getResources().getDrawable(R.drawable.android); } } 

你可能感兴趣的:(Android)