V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gouchaoer
V2EX  ›  Android

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

  •  1
     
  •   gouchaoer · 2017-12-07 12:59:00 +08:00 · 2576 次点击
    这是一个创建于 2303 天前的主题,其中的信息可能已经有所发展或是发生改变。

    断断续续学习 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 条回复    2017-12-08 07:31:27 +08:00
    fuxkcsdn
        1
    fuxkcsdn  
       2017-12-07 13:05:54 +08:00 via iPhone
    在国外 vps 下载完依赖环境再将系统镜像化,再下载下来不就得了…

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

    @wwqgtxx 不知道,linux 太难了懒得折腾
    @fuxkcsdn 你这个方法太好了,谢谢你
    iwtbauh
        5
    iwtbauh  
       2017-12-08 07:31:27 +08:00 via Android
    直接上 VPN 不就行了,配代理实在太麻烦了
    VPN 会虚拟网卡并修改路由表,理论上将所有外网流量转发到 VPN 网关。
    一年前实测 Ubuntu,通过 openvpn 成功下载所有源码
    另外 ss 在 Linux 上比 Windows 好配多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1203 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:20 · PVG 07:20 · LAX 16:20 · JFK 19:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.