Android Chromium动态库加载过程

本文详细解析了Chromium动态库在Android系统中的加载过程,包括Zygote进程及App进程中的加载步骤,并介绍了关键类WebViewFactory的作用。

最近解决WebViewZygote问题的过程中,仔细阅读了老罗的一篇关于Chromium加载的blog,受益匪浅。

详细的代码分析过程请参考原文:Android WebView加载Chromium动态库的过程分析

作为备忘,本文简单总结下Chromium动态库的加载过程,包括:

     1. 系统启动时Chromium动态库的加载过程

     2. App进程加载Chromium动态库的过程

     3. Chromium动态库加载的重要类:WebViewFactory


1. 系统启动时Chromium动态库的加载过程

    为了达到Chromium动态库在所有App进程中共享程序段和部分数据段,需要由Zygote进程和SystemServer进程开辟共享空间、加载动态库:

    1)Zygote进程:调用WebViewFactory.prepareWebViewInZygote()开辟Chromium动态库的地址空间,并确定起始位置

    2)SystemServer进程:调用WebViewFactory.prepareWebViewInSystemServer()/createRelroFile()申请启动isolated进程加载动态库

    3)临时进程:调用到RelroFileCreator.nativeCreateRelroFile加载Chromium动态库

2. App进程加载Chromium动态库的过程

    App应用使用WebView时会加载Chromium动态库,通过WebViewFactory.getProvider和loadNativeLibrary完成。

3. Chromium动态库加载的重要类:WebViewFactory

    Chromium动态库加载的过程中,涉及到的共享空间开辟、加载动态库以及内存映射重定位的相关函数都在该类中实现,包括:

    1)prepareWebViewInZygote:获取共享空间信息,并调用nativeReserveAddressSpace函数开辟共享空间

    2)nativeReserveAddressSpace:在Zygote进程中开辟共享空间

    3)getWebViewNativeLibraryPaths:获取Chromium动态库的lib路径

    4)prepareWebViewInSystemServer:调用函数createRelroFile启动isolated进程加载动态库

    5)nativeCreateRelroFile:真正实现Chromium动态库加载的函数

    6)loadNativeLibrary:App进程实例化WebView时加载动态库的函数


除了上述的备忘总结外,还是有个知识点需要进一步澄清:WebViewZygote进程及其Socket是何时启动的,有什么样的应用场景。


待研究...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值