https://blog.csdn.net/u012999651/article/details/93881387?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158358987219724845019572%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158358987219724845019572&biz_id=0&utm_source=distribute.pc_search_result.none-task
原因:
解耦,方便维护
加快编译
动态更新,无需下载与安装整个app,可以单独下载apk插件
模块定制,需要什么,下载什么
详情:
插件化:加载本地不存在的外部可执行文件。
两种:
1.动态加载so库(其实可以放在外部存储,我们常用的是放在内部存储)
2.classloader动态加载外部可执行文件,如dex,jar,apk
动态加载:
- 简单动态加载,逻辑sdk,登录注册界面等等。
- 静态代理Activity,使用插件的activity,实际使用的是host的activity,需要解决两个问题:
①生命周期,提前在host中注册好activity,然后拿到插件的activity的引用(两种方式,通过反射,再接口化;通过接口调用),在各个生命周期方法同步调用
②R资源
反射拿到AssertManager,调用addAssertPath,得到Resourse资源对象。 - 动态注册Activity
https://blog.csdn.net/micotale/article/details/88962682?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158372465819726867829400%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158372465819726867829400&biz_id=0&utm_source=distribute.pc_search_result.none-task