谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)

转自:http://blog.csdn.net/kuerjinjin/article/details/23563059

 

从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用win7+vs2010,相对来说也比较简单,按照步骤来也很快能编译出来。

1.官网的编译配置介绍:http://www.chromium.org/developers/how-tos/build-instructions-windows

2.编译需要的工具:vs2010/sp1,win8sdk,DXSDK,depot_tools

我用的工具都是在这里了:2010CompilerToolsForChrome

depot_tools也可以从官方获取:depot_tools (命令行下执行 gclient 它会自动下载安装构建项目解决方案所需要的工具 python, git 和 svn ),下载下来之后找个地方解压出来,比如我是解压到E:盘下。

 

3.修改配置
按照官网说的,配置环境变量:GYP_MSVS_VERSION和depot_tools的path路径。
如果win8SDK的安装路径不是默认的 C:\Program Files (x86)\Windows Kits\8.0 的话,就需要增加一个环境变量。
GYP_DEFINES 值为你真正安装win8SDK的位置,比如C:\Users\Kuerjinjin\Downloads\Windows Kits\8.0
 
配置DirectX sdk的头文件及lib库路径:
windows键 + r键,输入%localappdata%\Microsoft\MSBuild\v4.0 并运行,在弹出的文件夹列表中找到Microsoft.Cpp.Win32.user.props和Microsoft.Cpp.x64.user.props并修改这两个文件。
  1. <span style="font-size:18px;"><PropertyGroup>   
  2.     <IncludePath>$(DXSDK_DIR)\Include;$(IncludePath)</IncludePath>   
  3.     <LibraryPath>$(DXSDK_DIR)\Lib\x86;$(LibraryPath)</LibraryPath>   
  4. </PropertyGroup>  
  5.   
  6. <PropertyGroup>   
  7.     <IncludePath>$(DXSDK_DIR)\Include;$(IncludePath)</IncludePath>   
  8.     <LibraryPath>$(DXSDK_DIR)\Lib\x64;$(LibraryPath)</LibraryPath>   
  9. </PropertyGroup</span>  

修改WRL的头文件,默认C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\asyncinfo.h
找到 enum class AsyncStatus { ... }
改成 enum /*class*/ AsyncStatus { ... }
 
4.代码获取:
找一个空间超过60G的磁盘比如E:\,创建文件夹chromium30,命令行下切换到该目录,
  1. <span style="font-size:18px;">>e:  
  2. >cd chromium30  
  3. >gclient config http://src.chromium.org/svn/releases/30.0.1559.0/ </span>  
拉取目前最新的源码配置,当然你也可以在http://src.chromium.org/svn/releases/中选择自己想要的源码版本。
一般会在当前目录下生成一个.gclient的配置文件。为了减少不必要的代码获得的时间浪费,打开.gclient文件在“custom_deps”节里忽略掉部分测试代码,如:
  1. <span style="font-size:18px;">solutions = [ { "name"        : "30.0.1559.0",  
  2.                         "url"         : "http://src.chromium.org/svn/releases/30.0.1559.0",  
  3.                         "deps_file"   : "DEPS",  
  4.                         "managed"     : True,  
  5.                         "custom_deps" : {  
  6.                                    "src/webkit/data/layout_tests/LayoutTests": None,  
  7.                                    "src/third_party/WebKit/LayoutTests": None,  
  8.                                    "src/chrome/tools/test/reference_build/chrome": None,  
  9.                                    "src/chrome_frame/tools/test/reference_build/chrome": None,  
  10.                                    "src/chrome/tools/test/reference_build/chrome_linux": None,  
  11.                                    "src/chrome/tools/test/reference_build/chrome_mac": None,  
  12.                         },  
  13.                        "safesync_url": "",  
  14.                       },  
  15. ]</span>  

不要关闭命令提示,直接在当前目录下输入gclient sync --force 进行源码的同步。接下来就等吧,这个同步的时间会很长,要同步十几G的文件下来。正常情况下会在同步完成之后生成解决方案。如果没有,在当前目录下接着输入gclient runhooks --force。如果确保已经100%同步完成了,生成解决方案的话可以直接输入 python build/gyp_chromium
如果是第一次接触这个项目,那么找一下 src/chrome/chrome.sln 打开,将chrome项目设置为启动项目,然后调试就OK。
-------------------------------------------------------------------------------------------------------------------------------
自美国时间2014年3月1日开始,谷歌对chromium源码的构建方式做了调整。
关于系统版本只支持Windows 7 x64或更高版本, x86的操作系统已经不再支持。
从chromium r254340(chromium33)之后的版本,默认的调试工具唯一指定为Visual Studio 2013,
所以如果使用最近的源码进行构建,需要安装VS2013并修改 GYP_MSVS_VERSION=2013
而构建工具除了之前一直在使用的 depot_tools ,还增加了 ninja 工具的配合(ninja也是整合在了depot_tools中)。
所以一直在使用旧版本depot_tools的开发者们,需要先更新 depot_tools (之前也就300M左右,更新后约1.86G)了。
另外一个就是要获取VS2013的工具链脚本(toolchain script)
该工具链脚本不会修改系统环境,所以使用VS13或者之前的VS10都木有问题。
下载后的工具链脚本存放在 depot_tools \ win_toolchain \ vs2013_files 
如果系统中安装了VS2013,你可以用它来编辑和调试,ninja 将仍然使用depot_tools来构建版本。
具体就以下两步:
  1. <span style="font-size:18px;">python src\tools\win\toolchain\toolchain.py   
  2. win_toolchain\env.bat</span>  
其实,说白了就是要更新一下原来的depot_tools工具。如果depot_tools更新好了,其他的跟之前的大同小异。
比如:
  1. <span style="font-size:18px;">>e:  
  2. >cd E:\chromium35  
  3. E:\chromium35>gclient config http://src.chromium.org/svn/releases/35.0.1900.0  
  4. E:\chromium35>gclient sync --force(以往这一步会强制同步代码后生成解决方案,现在则会在同步一部分后出现找不到文件的错误)  
  5. E:\chromium35>cd src  
  6. E:\chromium35>gclient sync(确保源码同步完成)  
  7. 构建方式有两种,一个是使用 ninja 构建  
  8. E:\chromium35\src>ninja -C out\Debug chrome  
  9. 然后在 out/Debug 下就能看到编译出来的文件。  
  10. 另一种就是使用我们熟悉的VS来构建,需要设置一个环境变量  
  11. GYP_GENERATORS=msvs-ninja,ninja  
  12. 然后直接  
  13. E:\chromium35\src>gclient runhooks  
  14. 然后就能在 src/chrome/下找到chrome.sln的解决方案,调试方式就跟以前一样了。</span>  
 
-------------------------------------------------------------------------------------------------------------------------------------------
TIPS:如果是使用了chromium r254340(chromium33)之后的版本,可以直接下载我安装好的depot_tools工具,然后配置一下环境变量就可以直接用了。

1.depot_tools工具,下载后解压配置环境变量。
2.git的更新包(1.9的,下载后解压到depot_tools文件夹下就OK)
3.VS2013开发工具
 
已经生成解决方案的几个源码包:
 
   Chromium39.0.2132.2 (含depot_tools和批处理)
 
之前一些旧版本的源码包:(可供学习研究用,VS10的项目,部分已经生成解决方案)
-----------------------------------------------------------------------------------------------------------------------------
很久没同步谷歌的源码了,突然发现现在谷歌获取chromium源码的方式又变了,实在是太坑爹了!说一下最新几个版本的获取方式:
首先说几点:
1.现在要获取源码没有VPN啥都干不了,所以你如果想要下载源码这个是少不了的!
2.再一个就是通过访问http://src.chromium.org/svn/releases/发现,从chromium39.0.2313.2之后的源码不能通过之前那种gclient config http://***的方式获取了,之后的chromium的代码刚好全部迁移到了git管理了!可以看这里了解一下点击打开链接
3.对于不了解自己想要获取哪个版本chromium的朋友,可以先看一下这个网址点击打开链接可以了解到最近的chromium金丝雀版,开发版,测试版以及稳定版等版本的版本号,便于拉取!至于chromium的这四个分支的不同点可以看下:
canary金丝雀版:这一般是最前沿的实验版本,每日发布。它没有经过充分测试,可能有某些奇怪的bug。如果是为了学习基础的chromium代码,不建议跟进这个分支。
dev开发版:每2星期发布,相对稳定,新功能和新特性都有。
beta测试版:每周更新,6周大版本更新。比较稳定了,比dev版小1个版本,基本是发布的候选,比stable版本早进化一个月。
stable稳定版:比dev版本小2个版本,2到3周次版本跟新,6周主版本跟新。经过了充分的测试,我比较推荐这个版本。
具体的英文介绍可以看这里:点击打开链接
4.关于切换分支这块大约是这样:
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. cd src #需要切换到src下才能使用git仓库管理  
  2. git checkout 40.0.2209.0  
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"  
-------------------------------------------------
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. git checkout -b -newbranch  [<start_point>]  
创建新的分支并切换到新分支上去,
b代表branch的意思,newbranch 是新分支的名称,
如果没有指定提交点(start_point),默认从HEAD指向的提交创建分支。
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. git checkout -b your_release_branch 40.0.2209.0  
5.再一个就是说说那个.gclient文件现在怎么获取
  1. gclient config https://chromium.googlesource.com/chromium/src.git  
现在再来说说怎么获取源码:
1.找一个大点儿的盘,创建一个文件夹统一管理
比如 F:\0ChromiumCodes

2.WINDOWS下是直接下载depot_tools的压缩包,并解压到F:\0ChromiumCodes\depot_tools
这个压缩包的地址是:depot_tools.zip

3.配置环境变量
计算机-右键“属性”-左侧栏“高级系统设置”-环境变量-系统变量下“Path”-编辑
在最开头添加上 F:\0ChromiumCodes\depot_tools;

4.更新depot_tools
win+r - cmd 在命令行下输入gclient(不带参数)
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. gclient #不带参数  
第一次运行会安装msysgit和python,比较奇葩的是最新的git应该是git-1.9.0.chromium.6_bin
但是第一次运行gclient的时候它先下载git-1.9.0.chromium.5_bin
所以还需要再运行一次gclient
成功后可以运行一次gclient --version看看版本号,并注意一下有没有错误提示。
一般只显示一个如 gclient.py 0.7 等简单的版本信息,没有其他的什么客户端太旧等的提示信息那就OK

5.引导配置
如果你从未使用过git,您将需要设置一些全球git 配置;
在下面命令中使用你自己的名字和电子邮件地址替换:
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. git config --global user.name "JC" #名字自己改  
  2. git config --global user.email "kuerjinjin@gmail.com" #邮箱自己改  
  3. git config --global core.autocrlf false  
  4. git config --global core.filemode false  

7.新建个空文件夹,切换到该目录下
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. f:  
  2. cd F:\0ChromiumCodes\ChromiumMaster  
  3. fetch chromium  

这个过程会先下载master分支下的最新源码,开始的将近3G左右的源码是在后台下载的,
命令行下只提示“still working on”所以看下只要下载量有就不要关闭窗口,源码全部下载下来差不多要下载10多个G。
VPN下470k/s的速度差不多下载了7个多小时!
之后开始下载vs,win8sdk,wdk等配置win_toolchain

8.如果这个过程中失败了,但是源码已经下载了100%了,那么就不能继续fetch chromium了,而是
[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. gclient sync  

这块操作的介绍可以找英文原文:点击打开链接
包括构建相关可以看一下:点击打开链接
 
depot_tools(11.10更新)
 
Release 分支的签出操作方法:

同步并构建一个 Release 的标签(tag)!
-----------------------------------------
是一个通过git来获得的有发行版本号Release 标签(tag)
注意:您不能提交这个Release 标签(tag)。这纯粹是为了获得该发布版本的源代码。
  1. # 确保你能获得你要签出的所有release tag信息  
  2. git fetch --tags  
  3. # 然后签出任何你想要的版本 (已知的版本可以通过命令 git show-ref --tags 来查看)  
  4. git checkout -b your_release_branch 39.0.2171.71  # 或者更明确点儿这样写 tags/39.0.2171.71  
  5. gclient sync --with_branch_heads --jobs 16  
Tips:说一下这里的your_release_branch是你自己要给你的分支起的名字,我看到有人朋友就直接把这个拷贝上去了,汗~

签出一个 release 的分支
---------------------------------------
注:这块是不能的同步并建立全部的release分支(即:third_party DEPS一致),请参阅该内部文档。
以下说明如何检查出一个为特定项目release分支(如src.git)
  1. # 首先确保你已切换到 src 目录下.  
  2. # 这部分应该只需要运行一次就可以了,不过多运行几次也没事儿。  
  3. # 第一次运行时可能需要一段时间,因为它获取额外的1/2 GB左右的分支提交。  
  4. gclient sync --with_branch_heads  
  5. git fetch  
  6. # 签出 src 树下的分支.  
  7. git checkout -b branch_$BRANCH branch-heads/$BRANCH  
  8. # 签出所有的DEPS修改的子模块  
  9. gclient sync --jobs 16  

返回到 trunk:
---------------------------------------
  1. #首先确保你已切换到 src 目录下.  
  2. git checkout -f master  
  3. gclient sync --jobs 16  
英文的原文介绍在这里:点击打开链接
另外如果你想多了解一些git的操作可以看看这个:点击打开链接
签出里谷歌11月25日发布的最新正式版,编译后如图:
Chromium39.0.2171.71(64bit) chromium39.0.2171.71

-------------------------------------------------------------------------------------------------------------------

在这里再说一下几个问题:

1.是使用VS10和VS13编译项目的一些区别:如果是用的33之前的版本源码生成的10的解决方案,那么vs2010/sp1,win8sdk,DXSDK,depot_tools这些都需要有的,如果是用的最近的源码,只需要弄好最新版的depot_tools,再安装个13就一切OK!(其实使用ninja+vs13混合编译最终调用的vs13是depot_tools下的那个,而我们要再安装个VS13不过是修改和查看代码用而已)运行那个批处理设置一下直接用就行了!

2.一般的设置我们可以放在批处理中设置好,让ninja知道我们要用的vs13,win8sdk等在我们下载好的depot_tools中!在src的同级目录(或者说就是那个.gclient所在的目录)新建一个批处理CreateBuild.bat 运行这个批处理文件可能会比较慢,耐心等待命令行窗口退出后再打开chrome.sln开始编译!批处理的内容如下:

@echo off

for /f %%a in ('where gclient.bat') do set pwd=%%a
set pwd=%pwd:~0,-11%
set file=%pwd%win_toolchain\data.json
set pwd=%pwd:\=\\%

echo {"runtime_dirs": ["%pwd%win_toolchain\\vs2013_files\\sys64", "%pwd%win_toolchain\\vs2013_files\\sys32"], "path": "%pwd%win_toolchain\\vs2013_files", "version": "2013e", "wdk": "%pwd%win_toolchain\\vs2013_files\\wdk", "win8sdk": "%pwd%win_toolchain\\vs2013_files\\win8sdk"} > %file%

set DEPOT_TOOLS_WIN_TOOLCHAIN=1
set GYP_MSVS_VERSION=2013
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=component=shared_library disable_nacl=1

python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyCV9AOzytWwWCtNE8f7ZV56fP1u9yWwhVU' -Dgoogle_default_client_id='1039996407057.apps.googleusercontent.com' -Dgoogle_default_client_secret='mLT8XooDODav1OJG5G3bY61d'

这里要说一下,很多朋友是从网上其他地方下载的别人用的源码包,可能他们的源码包是用的本地环境,而我们使用的混合编译,需要设置set DEPOT_TOOLS_WIN_TOOLCHAIN=1,设置为0则是让gclient不要自动去构造环境,而是利用本机现有环境!很明显的区别从打开的chrome.sln项目解决方案就能看出来,混合编译的是没有分类的虚拟文件夹的,但是设置为0的话就是用系统现有环境生成的也就是编译使用你自己安装的VS是有虚拟文件夹的,这个跟之前的10版本以前的都一样!

GYP_MSVS_VERSION很明显就不说了,GYP_GENERATORS配置编译方式的,GYP_DEFINES一般是配置win8sdk位置的,如:set GYP_DEFINES=windows_sdk_path="C:\Program Files (x86)\Windows Kits\8.0"

 

如果你不知道这个批处理有没有成功执行,你也看一下src\out\Debug(或者Release)下的build.ninja文件,看看开始那两个路径是不是就是你在path里设置的depot_tools所在的路径。如果不是,而是原本的系统路径下的,那么就是没有成功执行。建议在cmd下执行批处理看看提示的错误是什么!

 

3.在最终的Release版本产品发布的时候,为了打包的需要可以把shared_library注释掉rem set GYP_DEFINES=component=shared_library改为静态编译,这个时候的编译会比较慢特别是是最后的连接chrome.dll !

4.由于ninja+vs13这种混合编译模式调用的都是depot_tools下的,所以直接在打开vs13中添加文件是不会被编译到的,所以如果有在项目中添加文件就需要修改项目对应的gyp或者gypi文件,将我们添加的文件目录添加到sources节点下,然后重新运行上边的批处理文件!

5.最后再说一点,那就是如果以前使用过vs2010编译,在运行CreateBuild.bat 这个批处理之前要删除“C:\Users\$(username)\AppData\Local\Microsoft\MSBuild\v4.0”下props文件中关于$(DXSDK_DIR)的内容。(重要)

6.最近有网友说新版本的chromium编译总有些警告导致编译不过,后来我们发现暂时可以这样解决:在src\build\common.gypi 的msvs_disabled_warnings 节点里大约5325行左右,加上 4819,4996 排除两个警告就能正常编译通过!

7.对于想编译64位chromium的同学,需要在批处理里面另外加一句命令:set GYP_DEFINES=target_arch=x64 不过输出的是在Release_x64 或者Debug_x64下!

8.项目编译成功后有人问那个谷歌API KEY信息栏提示的问题!很多人的做法是直接将提示这段信息栏的代码注释掉,个人觉得这么做并不太妥当!其实你点右侧的那个连接也能看到怎么做,不过文章有点儿旧了。总的来说差不多也就这两种方式:第一种就是在生成项目解决方案的时候直接加参数,比如:python src\build\gyp_chromium -Dgoogle_api_key='******' -Dgoogle_default_client_id='******** -Dgoogle_default_client_secret='******'而第二种方式就是我们在src\build\common.gypi中942行左右的'google_api_key%','google_default_client_id%','google_default_client_secret%'三个参数中直接添加也行,效果是一样的!至于这些KEY值怎么获得?这个自己去申请就行!如果你实在懒得去申请,也可以用我提供的下边这几个测试一下:

python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyCV9AOzytWwWCtNE8f7ZV56fP1u9yWwhVU' -Dgoogle_default_client_id='1039996407057.apps.googleusercontent.com' -Dgoogle_default_client_secret='mLT8XooDODav1OJG5G3bY61d'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyCWBmUuxZW1VaZZHkIembF2nengp8asUEk' -Dgoogle_default_client_id='1038894449561-bjihbnffo05svbqcncq7clirvq9meh0c.apps.googleusercontent.com' -Dgoogle_default_client_secret='OeKyUMzNTZ1-hPPypa7GiW4x'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8' -Dgoogle_default_client_id='996322985003.apps.googleusercontent.com' -Dgoogle_default_client_secret='IR1za9-1VK0zZ0f_O8MVFicn'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyCcjKzcifha1m8P4RVxytpVsx3wNDIEHsY' -Dgoogle_default_client_id='985919302268.apps.googleusercontent.com' -Dgoogle_default_client_secret='vQKKl73QQk8_dgEF44vNTHmJ'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyBhWJ-j5RXyt5911BMuVen-WuS10mvOnrY' -Dgoogle_default_client_id='952820686433-mbp5sv9scfj78siq96jlvrem47qgvbi3.apps.googleusercontent.com' -Dgoogle_default_client_secret='XU4b-j0Ssy-XkTvSVmiFMvNY'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k' -Dgoogle_default_client_id='811574891467.apps.googleusercontent.com' -Dgoogle_default_client_secret='kdloedMFGdGla2P1zacGjAQh'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw' -Dgoogle_default_client_id='77185425430.apps.googleusercontent.com' -Dgoogle_default_client_secret='OTJgUOQcT7lO7GsGZq2G4IlT'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyD1tTgDbP-N6BGXKZ7VqSos_IU1QflGbyg' -Dgoogle_default_client_id='724288223830.apps.googleusercontent.com' -Dgoogle_default_client_secret='rHmKOPygcI6G-clFHb-RfuHb'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q' -Dgoogle_default_client_id='424119844901.apps.googleusercontent.com' -Dgoogle_default_client_secret='AIienwDlGIIsHoKnNHmWGXyJ'
python src\build\gyp_chromium -Dgoogle_api_key='AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM' -Dgoogle_default_client_id='413772536636.apps.googleusercontent.com' -Dgoogle_default_client_secret='0ZChLK6AxeA3Isu96MkwqDR4'

 

9.看评论里有朋友提到了NACL这块,个人建议在编译的时候最好是把这块的编译设置关掉(国内其他的定制浏览器也是这么干的)。这块应该是还不太成熟,应用也很少!所以建议在配置编译项的时候做一下修改

  1. set GYP_DEFINES=component=shared_library disable_nacl=1   
10.看评论里有朋友问那个浏览器启动页怎么改,其实这块你多看看代码的话也能找到在pref_names.cc文件中的kRestoreOnStartup谷歌的注释解释的很明白,定义了几种启动方式:其中:5默认标签页,1上次关闭的网页,4.打开特殊网页!那么我们就直接修改他为4这种情况下kURLsToRestoreOnStartup 要打开的网页就行了,我们在启动函数中加上这段代码就能搞定:
  1. PrefService* prefs = profile_->GetPrefs();  
  2. prefs->SetInteger(prefs::kRestoreOnStartup,4);  
  3. ListValue* url_pref_list = new ListValue;  
  4. url_pref_list->Set(0, Value::CreateStringValue("http://www.baidu.com"));  
  5. prefs->SetDefaultPrefValue(prefs::kURLsToRestoreOnStartup, url_pref_list);  
要是想多打开几个网页,那么就继续在list里面加网址就行了!

11.看评论里有朋友问这个chromium的优化问题,那么设置 set GYP_DEFINES=branding=Chromium buildtype=Official 以官方的构建方式来做会更好一些!官方的建立方式启用了许多优化,例如:/Os(大小优化) ;禁用一些跟踪 ;启用PGO和LTCG ;去掉DLOG ;去掉CHECK消息启用其他的编译/链接时优化等等~

12.再一个就是很多朋友看了common.gypi的配置后也跟着乱改配置项,比如fastbuild=1等;关于component=shared_library和fastbuild=1的区别建议大家看一下这篇文章再做修改!

13.很长时间没来看看了,发现又积攒了很多很多问题,比如有人提到的这个‘ascii’的问题,具体错误提示如:UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 9: ordinal not in range(128)!这个问题在谷歌使用python27的时候(差不多是chromium31左右)就出现了,基本我们的解决办法就是直接根据错误提示找到depot_tools\python276_bin\Lib\mimetypes.py文件,大约在249行左右注释掉这几行代码就是了!

 

[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. try:  
  2.                     ctype = ctype.encode(default_encoding) # omit in 3.x!  
  3.                 except UnicodeEncodeError:  
  4.                     pass  


当然,官方也给出了一种方法:set your Windows system locale to English!详细介绍见

 

14.另一个不得不提的问题就是如果你在下载编译最新几个版本的代码比如40,41,42,43等,最好是设置set DEPOT_TOOLS_WIN_TOOLCHAIN=0,并下载安装最新的VS2013的更新包Update4(You must build with Visual Studio 2013 Update 4, no other versions are supported.)要不然很可能会编译不过;至于为什么,我来说一下这个问题是因为之前的chromium编译我们使用混合编译用的是win_toolchain下的免费版VS13,这个版本比较早是存在很多BUG的,很多在chrome论坛里提交的BUG都是指向VS13,就比如我们设置 set GYP_DEFINES=branding=Chromium buildtype=Official 编译Release版本使用混合编译基本是编译不过的。VS13 update4里面就这些问题提交了修复,所以后期的代码构建谷歌都是推荐使用VS13 Update4(Community版或者Professional版)。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

另外针对国内拉取chromium代码很麻烦的问题,除了可以直接下载网友共享的源码包之外,或者可以使用另一条方式就是设置http代理!这里提供一个方法供朋友们测试:

#配置http代理:(gclient 的 python脚本里的urllib2和其他几个对象默认使用http代理)
set http_proxy=http://127.0.0.1:808(这里根据情况自己改,下同)

#如果http代理需要认证,那么要加上一下两个命令

set http_proxy_user=<你的用户名>
set http_proxy_pass=<你的密码>


#配置winhttp代理,cscript 走代理
netsh winhttp set proxy 127.0.0.1:808 
 

#配置gclient的git走http代理
git config --global http.proxy http://127.0.0.1:8080
 
#从代码库拿chromium
fetch --nohooks --no-history chromium --nosvn=True
 
gclient sync --force --nohooks

 

代码同步完成后再使用那个批处理生成解决方案就OK! 至于VPN的话可以试试我上边推荐的那个!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

待续......

posted @ 2015-09-18 17:43  明明是悟空  阅读(3378)  评论(2编辑  收藏  举报