package com.lody.virtual.server.accounts; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ServiceInfo; import android.content.res.AssetManager; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.os.Bundle; import com.lody.virtual.server.pm.PackageCacheManager; import com.lody.virtual.server.pm.PackageSetting; class AppAccountParser implements IAccountParser { @Override public XmlResourceParser getParser(Context context, ServiceInfo serviceInfo, String name) { Bundle meta = serviceInfo.metaData; if (meta != null) { int xmlId = meta.getInt(name); if (xmlId != 0) { try { return getResources(context, serviceInfo.applicationInfo).getXml(xmlId); } catch (Exception e) { e.printStackTrace(); } } } return null; } @Override public Resources getResources(Context context, ApplicationInfo appInfo) throws Exception { PackageSetting ps = PackageCacheManager.getSetting(appInfo.packageName); if (ps != null) { AssetManager assets = mirror.android.content.res.AssetManager.ctor.newInstance(); mirror.android.content.res.AssetManager.addAssetPath.call(assets, ps.apkPath); Resources hostRes = context.getResources(); return new Resources(assets, hostRes.getDisplayMetrics(), hostRes.getConfiguration()); } return null; } }