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.helper.proto.AppSetting; import com.lody.virtual.server.pm.VAppManagerService; public 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 { AppSetting appSetting = VAppManagerService.get().findAppInfo(appInfo.packageName); if (appSetting != null) { AssetManager assets = mirror.android.content.res.AssetManager.ctor.newInstance(); mirror.android.content.res.AssetManager.addAssetPath.call(assets, appSetting.apkPath); Resources hostRes = context.getResources(); return new Resources(assets, hostRes.getDisplayMetrics(), hostRes.getConfiguration()); } return null; } }