Chromium Android 源码编译踩坑过程(shadowsocks + ubuntu)

本人历经一个多星期,利用业余时间,踩了无数个坑,最后终于成功编译chromium android的源码,回想起来真心不易,现特将这一过程分享出来,以免他人再走弯路。

首先,我要强调3点关键因素:

  1. 一定要有完善的梯子。最好是你已肉身翻墙,比如留学,移民,甚至是去国外旅游。如果做不到这点,那就只能使用翻墙工具,关于这块,由于我已经多年没用vpn,而改用shadowsocks,但之前也只是一直在mac上用带GUI的ss,而在Linux上,却不得不自己用命令行来配置,过程繁琐,还容易出错。可以说,大部分的时间是花在了搭梯子上。另外,如果你购买的是付费的shadowsocks,一定要注意流量额度和计费方式,我就是不凑巧用了个很贵的节点,导致我一下就用完了一个月的流量,还多花了几十块钱去充流量。
  2. 一定要用linux,而且要熟练使用,之前就是光在google官网上看了个chromium pc端编译的文档,说是支持mac编译,就兴冲冲的拿mac去下代码,结果怎么也不成功。后来看了chromium android的文档,才发现只能用linux。但我linux用的确实不熟,好多操作都要去现场百度,这样就耽误了不少时间。
  3. 不要幻想用骚操作来搞定,要老老实实跟着官网的步骤一步步的走,等这条路走通了再考虑用其他方式改进。我开始就是看了知乎上有人说自己搭了个美国的阿里云,然后把代码拿回本地编译。也照着去搞。开始发现阿里云确实快,下十几个g的代码嗖嗖的,2,3小时搞定,然后压了个包,花了一晚上拷贝到自己的电脑上(研究怎么用支持断点续传的拷贝方式又花了几个小时,开始想自己搭一个ftp,后来发现rsync就可以做到),又解压几个小时,结果发现编译不了。以为是代码下的有问题,就在阿里云上直接编译,没想到自己申请的cpu太少,以致编译用了8,9个小时,但是也编成功了。结果又花了很大力气重新打包代码,下载本地,解压,仍旧编译不成功。总以为是缺少啥文件,又费大劲去对比,重试,直到最终放弃。后来又看到有人用code aurora的国内镜像来代替谷歌官网的代码,便又去尝试,结果也不知道是什么原因,代码同步就是无法完成,最后还是无功而返。

那么首先还是讲一下我是如何在linux上用shadowsocks搭梯子。

  1. 去www.shadowsocks.com买一个服务,里面套餐很多,我自己一个人用,starter模式就够了。购买后,留意服务器地址,密码和加密方式。特别是加密方式,现在用的是chacha20-ietf-poly1305。这个加密方式直接导致好几个linux版的shadowsocks客户端不能用,只能用shadowsocks-libev。
  2. 接下来安装shadowsocks-libev,参考官网的说明https://github.com/shadowsocks/shadowsocks-libev,我的是ubuntu 16.04,又懒得从源码编译,所以直接通过包安装:
    sudo apt-get install software-properties-common -y
    sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
    sudo apt-get update
    sudo apt install shadowsocks-libev

    安装好后,修改配置文件,通常只需要修改server,password,method这三项

    # Edit the configuration file
    sudo vim /etc/shadowsocks-libev/config.json
    {
        "server":"服务器地址",
        "server_port":14005,      
        "local_port":1080,
        "password":"密码",
        "timeout":60,
        "method":"加密算法"
    }

    修改好后,先启动服务

    # Start the service
    sudo /etc/init.d/shadowsocks-libev start    # for sysvinit, or
    sudo systemctl start shadowsocks-libev      # for systemd

    再启动客户端

    ss-local -c /etc/shadowsocks-libev/config.json
  3. 验证你的梯子搭建成功。首先看看能否访问google,配置一下firefox,设置网络代理

然后设置代理方式和端口号,

注意:SOCKS Host,Port,SOCKS v5都要一致。

就算这步验证通过了,也别高兴太早,因为代码可不是通过浏览器下载的。所以你还要验证:

  • git能否翻墙。因为下载代码会用到git,所以还要设置git代理,具体做法如下:
    git config --global http.proxy 'socks5://127.0.0.1:1080' 
    git config --global https.proxy 'socks5://127.0.0.1:1080'

    如果要关闭代理:

    git config --global --unset http.proxy
    git config --global --unset https.proxy

    如何验证?在没有设置代理的情况下,clone这个代码是要超时的:

    root@yihao-MR-X5:/media/root/work# git clone https://chromium.googlesource.com/external/webrtc
    正克隆到 'webrtc'...
    fatal: unable to access 'https://chromium.googlesource.com/external/webrtc/': Failed to connect to chromium.googlesource.com port 443: 连接超时
    

    设置了代理之后,就可以正常开始clone了:

    root@yihao-MR-X5:/media/root/work# git clone https://chromium.googlesource.com/external/webrtc
    正克隆到 'webrtc'...
    remote: Sending approximately 188.21 MiB ...
    remote: Counting objects: 90, done
    remote: Finding sources: 100% (89/89)
  • 命令行能否翻墙。这里主要是为了给全局配置代理,因为下载代码的过程中,还会去google下载一些工具,可能是通过curl,也可能是自带的cipd_client(貌似这玩意是基于go)。具体怎么做,首先还是下载一个叫做polipo的工具:
    sudo apt-get install polipo  

    然后修改配置参数:

    logSyslog = true:
    logFile = "/var/log/polipo/polipo.log"
    
    socksParentProxy = "127.0.0.1:1080"  #这是socks代理的地址和端口
    socksProxyType = socks5
    
    chunkHighMark = 50331648
    objectHighMark = 16384
    
    serverMaxSlots = 64
    serverSlots = 16
    serverSlots1 = 32
    
    proxyAddress = "127.0.0.1" #这是本代理的地址端口 
    proxyPort = 8123
    

    重启polipo服务

    sudo service polipo restart  

    再去进行设置环境变量

    export http_proxy="http://127.0.0.1:8123"  
    export https_proxy="https://127.0.0.1:8123"  

    注意这个命令只在当前的终端窗口中有效,如果要使每个窗口都起效,可以添加至~/.bashrc,再通过下面的命令进行验证,有返回则说明成功

    curl https://www.google.com

至此,梯子已经全部搭建完成。下面开始进入实际的代码下载步骤。

有了梯子之后,就可以直接去官网上看编译手册了https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md 只要仔细阅读它的说明,后面的过程就会比较简单。如果你下载源码的过程中断了,只需再输入gclient sync即可,它会从当前进度继续下载。

猜你喜欢

转载自my.oschina.net/yhcocacoder/blog/1790718