本文主要记录学习Small插件化过程中遇到的问题,欢迎大家一起讨论学习和指正!
Small插件化实践
1.动态替换资源文件流程
动态替换资源文件的流程,比如app.* 要是想访问lib.* 里面的资源文件并且动态从服务器更新,需要先在项目中依赖它,然后在lib.* 更新完文件后重新编译把so上传到服务器,然后再在app.* 中从服务下载lib.* 的so实现资源文件的动态替换
2.打开插件activity
两种方法:
(1)
Small.openUri("main",MainActivity.this);
(2)
这种方法可以带值过去
Intent intent = Small.getIntentOfUri("main",MainActivity.this);
intent.putExtra("msg","main");
startActivity(intent);
3.获取宿主或插件资源
如动画定义在宿主或插件中,再用
Small.getContext().getResources().getIdentifier(AnimName, "anim", "宿主包名");
context.getResources().getIdentifier(AnimName, "anim", "插件包名");
取到resId,接着就可以正常使用了;
或者通过直接依赖lib.*插件,直接调用插件资源R.drawable.xxx或@drawable/xxx。
4.aar依赖插件
可以把app.*,lib.*等插件新建一个工程,然后通过远程aar依赖的方式,这样不会影响so文件的加载,但是如果把aar放在libs下通过compile(name: 'lib-style', ext: 'aar')这样的方式去加载,插件生成的so文件加载就没有效果,它只会去加载libs下对应的aar。
(又做了进一步测试,这种方法存在Bug,只有当so文件中的资源ID和aar文件中资源ID相同才可以进行替换,而目前small在编译lib插件生成so的同时没有生成aar,所以资源ID相同的几率很小,这方面还需要进一步研究测试...)
网友评论