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

2017-12-07 12:59:00 +08:00
 gouchaoer

断断续续学习 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++代码的方法。

7770 次点击
所在节点    Android
5 条回复
fuxkcsdn
2017-12-07 13:05:54 +08:00
在国外 vps 下载完依赖环境再将系统镜像化,再下载下来不就得了…

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

@wwqgtxx 不知道,linux 太难了懒得折腾
@fuxkcsdn 你这个方法太好了,谢谢你
iwtbauh
2017-12-08 07:31:27 +08:00
直接上 VPN 不就行了,配代理实在太麻烦了
VPN 会虚拟网卡并修改路由表,理论上将所有外网流量转发到 VPN 网关。
一年前实测 Ubuntu,通过 openvpn 成功下载所有源码
另外 ss 在 Linux 上比 Windows 好配多了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/412756

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX