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. ubuntu下安装android ndk
  2. Android(安卓)SMS(一) —— 读取短信
  3. Android菜单实例
  4. Android(安卓)Handler内存泄露
  5. Activity的四种启动模式和onNewIntent()
  6. Android中EditText属性
  7. TabHost与RadioGroup结合完成的菜单
  8. Android中Activity启动模式详解
  9. Android--Selector、shape详解(整理)

随机推荐

  1. android Activity实现从底部弹出或滑出选
  2. Android中Home键的监听和拦截
  3. Android中的多进程、多线程
  4. 转---Android(安卓)Audio System 之一:Aud
  5. Android(安卓)之采用execSQL和rawQuery方
  6. [置顶] Android中View的加载过程
  7. Android应用安全学习笔记前言
  8. android事件拦截处理机制详解
  9. Android(安卓)反编译apk 到java源码的方
  10. Android是个好系统