插件化 加载资源的核心代码

    xiaoxiao2021-12-14  18

    插件化 加载其他apk 的资源的核心思想是 拿到其他apk 的Resources 对象,然后通过反射 ,

    可以拿到 我们想要的资源,然后使用。

     

    拿到其他apk 的对象 ,主要是通过 AssetManager 的 addAssetPath,方法;

    因为这个方法在frameWork 层,所以要通过反射来拿;

    相关framework层代码 涉及到(contentImp,ApkLoad,AssetManager )

     

    /**  * 插件化加载资源的核心代码  * @author lsw8569013  *  */ public class PluginResource extends Resources{          public PluginResource(AssetManager assets, DisplayMetrics metrics,             Configuration config) {         super(assets, metrics, config);         // TODO Auto-generated constructor stub     }     public static AssetManager getAssetManager(File file ,Resources resource){ //                 try {             Class<?> AssetManager = Class.forName("android.content.res.AssetManager");             Method[] declaredMethods = AssetManager.getDeclaredMethods();                          for(Method method : declaredMethods){                 if(method.getName().equals("addAssetPath")){                     android.content.res.AssetManager assetManager = AssetManager.class.newInstance();                      method.invoke(assetManager, file.getAbsolutePath());                     return assetManager;                 }             }                      } catch (ClassNotFoundException e) {             e.printStackTrace();         } catch (InstantiationException e) {             e.printStackTrace();         } catch (IllegalAccessException e) {             e.printStackTrace();         } catch (IllegalArgumentException e) {             e.printStackTrace();         } catch (InvocationTargetException e) {             e.printStackTrace();         }         return null;     }          public static PluginResource getPluginResource(Resources res,AssetManager assetManager){         return new PluginResource(assetManager, res.getDisplayMetrics(), res.getConfiguration());     } }

     

    转载请注明原文地址: https://ju.6miu.com/read-971418.html

    最新回复(0)