V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gouchaoer
V2EX  ›  Android

爬虫工程师的 chromium 定制系列:安卓版编译(一)

  •  1
     
  •   gouchaoer · Dec 7, 2017 · 11396 views
    This topic created in 3073 days ago, the information mentioned may be changed or developed.

    断断续续学习 chromium 已经好几个月了,基本上把能浏览的资料都大概看了一下,对 chromium 的代码有了大概的认识,作为一个爬虫工程师我有一些想法要在 chromium 上尝试。由于 chromium 内容实在是太庞大了,这个定制系列主要讲 chromium 中和我的想法实现有关的方面(也就是自动化定制相关),也算是对自己学习的一种督促吧。

    在移动端已经成为互联网主流量的现在目标平台肯定是安卓端了,这一篇讲编译 chromium for android 的一些细节。首先参考 chromium 官方 repo 的指导: https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md

    官方编译只支持 ubuntu14.04 ,于是在 vmware 中安装一个 ubuntu14.04 的镜像,按照官方要求分配足够的 cpu、内存和硬盘。系统安装好后在 git clone depot_tools 的时候由于你懂的原因需要配置科学上网环境,我用的是 ss,然而 ss 客户端在 ubuntu 实在太难配了,我们可以在 windows 下(我主机是 windows )开 ss 客户端,然后在 ubuntu 虚拟机中设置 git 的代理走 windows 的 ss 客户端(你需要允许来自局域网的连接),也就是类似这样: git config --global http.proxy 'your_host_local_ip:1080' git config --global https.proxy 'your_host_local_ip:1080'

    下载下来之后,到了 fetch --nohooks android 这一步,此时需要在 shell 中设置环境变量 set http_proxy 以及 set https_proxy 到你的 ss 客户端,很多人卡在这一步就是因为代理问题,在知乎上甚至有个大神没法下载结果跑到泰国旅游才下载成功。因为 chromium 的 git 的 repo 有几十 G,而且还有各种依赖,依赖的安装是 chromium 的工具自动化完成的,有的工具不认 shell 里的 http_proxy 和 https_proxy 环境变量导致下载失败,此时你可以试试 proxychains 来设置环境变量。经过漫长的同步,代码和依赖( gclient sync )同步下来了,执行到 build/install-build-deps-android.sh 的时候,有的依赖可能没法装上,此时需要手动安装比如 openjdk。之后 gclient runhooks 的时候遇到代理问题也去看看前面的方法,总之我把所有依赖都搞定花了很多天。

    依赖都搞定了以后,按照官方的剩下几个步骤就能编译出 chromium for android 了(如果提示缺某些依赖的话装上即可),并没有什么好讲的。

    现在 app 是编译出来了,可是我们需要一个安卓的调试环境,在 github 上有一个项目:JackyAndroid/AndroidChromium,它把 chromium 整合进了 android studio 中,这里用起来非常方便。我安装的是 android studio3.0,把那个项目 clone 下来之后用 android studio 打开后会设置代理开始无尽的依赖安装,最后如果 android studio 提示你升级某个的东西话不要升级(这个项目目前有些地方还不兼容),最后依赖安装完毕开始编译。你可能遇到某些不兼容的地方,比如 enforceUniquePackageName 啥的,改一下就完了,最后就能成功编译出 apk 了。现在某些逻辑在 android studio 中看和调试会好很多,当然了很多底层的东西还是只能在 chromium 源码里折腾,我也没找到一个比较好的单步调试 C++代码的方法。

    5 replies    2017-12-08 07:31:27 +08:00
    fuxkcsdn
        1
    fuxkcsdn  
       Dec 7, 2017 via iPhone
    在国外 vps 下载完依赖环境再将系统镜像化,再下载下来不就得了…

    我现在编译 Dockerfile 都这样做,简单方便省时省力
    xm0625
        2
    xm0625  
       Dec 7, 2017
    crosswalk 好像....也不错?
    wwqgtxx
        3
    wwqgtxx  
       Dec 7, 2017 via iPhone
    ss 客户端在 ubuntu 下都可以直接 apt-get 安装,实在是不明白哪里难安装了
    gouchaoer
        4
    gouchaoer  
    OP
       Dec 7, 2017
    @xm0625 crosswalk 和 phantomjs 一样 fade away 了

    @wwqgtxx 不知道,linux 太难了懒得折腾
    @fuxkcsdn 你这个方法太好了,谢谢你
    iwtbauh
        5
    iwtbauh  
       Dec 8, 2017 via Android
    直接上 VPN 不就行了,配代理实在太麻烦了
    VPN 会虚拟网卡并修改路由表,理论上将所有外网流量转发到 VPN 网关。
    一年前实测 Ubuntu,通过 openvpn 成功下载所有源码
    另外 ss 在 Linux 上比 Windows 好配多了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6081 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:03 · PVG 11:03 · LAX 20:03 · JFK 23:03
    ♥ Do have faith in what you're doing.