最近在研究插件化和热更新的时候对资源文件的加载和替换产生了费解,比如说腾讯的tinker加载资源补丁是如何替换已有的资源文件的,由于它加载的是差异资源包,那肯定是将差异资源和原有的资源进行合并,如果是存在的资源那就去覆盖。
我们先在原有的项目资源文件上设置一个颜色值,之后把项目运行到手机上。
<color name="plugin_color">#00ffff</color>

之后我们在把这个plugin_color颜色改变成另外一个值;
<color name="plugin_color">#ff00ff</color>
再次打包放到手机的sd路径下。当我们加载完我们的外部资源时显示的是这个颜色界面。

前期准备工作完成了。
那么如何加载外部资源呢,我们知道资源都是getResources加载的,那我们Resources re = getResources去对这个对象重新赋值就可以了,我们发现Resources这个类的构造函数传了一个AssetManager,资源问价加载器。
@Deprecated
public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) {
this(null);
mResourcesImpl = new ResourcesImpl(assets, metrics, config, new DisplayAdjustm

本文探讨了在Android中如何加载和替换外部资源文件,特别是在插件化和热更新场景下。通过AssetManager的addAssetPath方法加载SD卡上的APK资源,实现了对原有资源的覆盖或新增资源的加载。通过反射技术改变Resources对象,实现在不重启应用的情况下更新界面颜色。文章还提及使用DexClassLoader加载外部dex文件,并提出了构建热更新和插件化框架的可能性,后续将讨论差异包的制作与合并。
最低0.47元/天 解锁文章
1439

被折叠的 条评论
为什么被折叠?



