-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(core.gradle-plugin,core.loader):优化从AndroidManifest中解析Receiver的action信息的性能 #696
Conversation
ComponentManager子类不再需要手动配置静态广播。
…tion信息的性能,从运行期解析修改为编译期解析
…tion信息的性能,从运行期解析修改为编译期解析,修复冲突
仔细看了一下这个优化。 实现方式是在构建期间修改合并后的Manifest,把 这个实现也挺巧妙的。也建议提PR的时候能简要说明一下这个关键实现原理。 不过其实这里特别需要优化的不是单独Receiver的解析,而是 我比较希望重构这个实现,在构建期间将整个XML中需要的信息转换成普通Java类。从根本上避免 |
OK,构建期间将整个XML中需要的信息转换成普通Java类,此方案我整理一下思路和方案,后续持续优化 |
https://github.com/shifujun/Shadow/tree/manifest-parser
|
通过PluginClassLoader新增方法loadPluginManifest可加载该类。 Tencent#696
由于PackageManager.getPackageArchiveInfo方法在解析较大的Manifest时速度很慢, 而且加载插件过程中只依赖很少量的字段,如className,theme等,所以在主路径不再依赖它, 而是依赖编译期生成好的PluginManifest类。 另一原因是getPackageArchiveInfo的返回类型没有公开API告诉我们Receiver的action字段。 在插件代码主动通过PackageManager获取信息时,再依赖getPackageArchiveInfo方法 获取MetaData等插件框架本身不需要的信息。 close Tencent#696
通过PluginClassLoader新增方法loadPluginManifest可加载该类。 Tencent#696
由于PackageManager.getPackageArchiveInfo方法在解析较大的Manifest时速度很慢, 而且加载插件过程中只依赖很少量的字段,如className,theme等,所以在主路径不再依赖它, 而是依赖编译期生成好的PluginManifest类。 另一原因是getPackageArchiveInfo的返回类型没有公开API告诉我们Receiver的action字段。 在插件代码主动通过PackageManager获取信息时,再依赖getPackageArchiveInfo方法 获取MetaData等插件框架本身不需要的信息。 close Tencent#696
通过PluginClassLoader新增方法loadPluginManifest可加载该类。 #696
由于PackageManager.getPackageArchiveInfo方法在解析较大的Manifest时速度很慢, 而且加载插件过程中只依赖很少量的字段,如className,theme等,所以在主路径不再依赖它, 而是依赖编译期生成好的PluginManifest类。 另一原因是getPackageArchiveInfo的返回类型没有公开API告诉我们Receiver的action字段。 在插件代码主动通过PackageManager获取信息时,再依赖getPackageArchiveInfo方法 获取MetaData等插件框架本身不需要的信息。 close #696
这个重构之后就不能兼容老版本的插件了 |
loader和插件版本是一对一的。它们一起更新,所以不存在loader需要兼容老版本插件的情况。 |
从运行期解析修改为编译期解析