爬虫工程师的 chromium 定制系列:安卓版编译(一) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gouchaoer
V2EX    Android

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

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

    断断续续学习 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     Solana     2865 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 00:37 PVG 08:37 LAX 16:37 JFK 19:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86