android 读取 icon

public Drawable getAPKDrawable(String filePath) {
Drawable dr = null;
if (filePath != null) {

String PATH_PackageParser = "android.content.pm.PackageParser";
String PATH_AssetManager = "android.content.res.AssetManager";
try {

Class pkgParserCls = Class.forName(PATH_PackageParser);
Class[] typeArgs = new Class[1];
typeArgs[0] = String.class;
Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);
Object[] valueArgs = new Object[1];
valueArgs[0] = filePath;
Object pkgParser = pkgParserCt.newInstance(valueArgs);

DisplayMetrics metrics = new DisplayMetrics();
metrics.setToDefaults();

typeArgs = new Class[4];
typeArgs[0] = File.class;
typeArgs[1] = String.class;
typeArgs[2] = DisplayMetrics.class;
typeArgs[3] = Integer.TYPE;
Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage", typeArgs);
valueArgs = new Object[4];
valueArgs[0] = new File(filePath);
valueArgs[1] = filePath;
valueArgs[2] = metrics;
valueArgs[3] = 0;
Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, valueArgs);

Field appInfoFld = pkgParserPkg.getClass().getDeclaredField("applicationInfo");
ApplicationInfo info = (ApplicationInfo) appInfoFld.get(pkgParserPkg);

Class assetMagCls = Class.forName(PATH_AssetManager);
Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null);
Object assetMag = assetMagCt.newInstance((Object[]) null);
typeArgs = new Class[1];
typeArgs[0] = String.class;
Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath", typeArgs);
valueArgs = new Object[1];
valueArgs[0] = filePath;
assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);
// 具体的activityy实例
Resources res = ManagerActivity.this.getResources();
typeArgs = new Class[3];
typeArgs[0] = assetMag.getClass();
typeArgs[1] = res.getDisplayMetrics().getClass();
typeArgs[2] = res.getConfiguration().getClass();
Constructor resCt = Resources.class.getConstructor(typeArgs);
valueArgs = new Object[3];
valueArgs[0] = assetMag;
valueArgs[1] = res.getDisplayMetrics();
valueArgs[2] = res.getConfiguration();
res = (Resources) resCt.newInstance(valueArgs);
CharSequence label = null;
if (info.labelRes != 0) {
label = res.getText(info.labelRes);
}

if (info.icon != 0) {
dr = res.getDrawable(info.icon);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return dr;
}

更多相关文章

  1. Android菜单实例
  2. 【Demo实例】Android FTP上传带进度条(优化后代码)
  3. android开机启动一个Service实例
  4. 【分享】大量android软件开发资料和实例代码【转】
  5. Android核心技术与实例详解(第2版)
  6. Android Fragment 实例
  7. 微软的 Android 计划:邪恶的天才计划或只是邪恶?

随机推荐

  1. 分支、循环、混编学习小结
  2. MyCms 自媒体 CMS 系统 v3.2.2,广告插件优
  3. 分支与循环示例及php模板与html混编示例
  4. Python 模拟员工信息数据库操作的实例
  5. 访问器属性原理与应用场景,获取DOM元素的2
  6. 实例演示vue常用术语、样式与事件绑定、
  7. PHP实例演示分支与循环
  8. PHP基础 -(一)变量、函数、参数
  9. 分支与循环、php模板语法与html混编技巧
  10. PHP:1. 实例演示分支与循环 2. 实例演示ph