Ⅰ 如何只生成 chrome.sln 工程文件以便編譯 chromium
一,編譯之前的准備。
1) 了解代碼組織結構。
Chrome source非常龐大,並且在其主目錄下還包含有工具和組件,任何一個工具和組件也附帶有其源代碼。首先得熟悉這些源代碼的組織結構,在http://src.chromium.org/svn/中包含如下子目錄:releases,曾經發布過的chrome源代碼的正式版本;trunk,當前最新的源代碼。由於releases中的代碼比較舊,這里就不做說明了,只說明trunk的結構。在trunk下面有3個重要的目錄,deps包含了chrome編譯和運行所需要的全部組件的代碼。src裡麵包含的則是chrome的主程序的代碼,tools包含的是下載和配置編譯所需要的第三方工具的壓縮包和源代碼,其中就有svn和python這2個比較重要的工具,後面再詳細介紹。暫時做這樣一個簡單的介紹,因為其組織結構比較負責,以後再作補充斧正。
2)如何下載和同步源代碼。
首先談談下載:
1,最簡單的方法是從chrome官網上直接下載源代碼壓縮包,地址是http://build.chromium.org/buildbot/archives/chromium_tarball.html。
2,或者採用svn從http://src.chromium.org/svn/trunk/src這個地方heckout,這要求你先在本地建一個源代碼的主目錄。
3,另外一個辦法則是採用google提供的一個部署工具depot_tools。雖然這幾種辦法都可下載完整的源代碼,但目前的情況是:chrome基於Visual Stdio 2005 進行編譯,如果順利完成編譯工作,自然少不了sln文件,較早的源代碼中包含有現成的sln和vcproject文件,但後來做了修改,這些文件被拋棄掉,Google自己開發了一種腳本工具叫做GYP,這個工具採用python編寫,GYP採用了自定義的一套規則,用於生成各種工程文件。而關鍵的python則包含於depot_tools中,因此不論採用什麼方法下載的代碼,都得下載depot_tools這個工具,以獲得必須的工程文件。
depot_tools位於 http://src.chromium.org/svn/trunk/tools 下面,包括一個目錄和一個zip格式的壓縮包。
3)關於編譯器
前面提到Chrome採用Visual Stdio 2005進行編譯,根據http://dev.chromium.org的說明,需進行如下操作正常編譯
a, 安裝Visual Studio 2005.
b, 安裝Visual Studio 2005 Service Packe 1.
c, 安裝Visual Studio Hotfix 947315.
d, 如果是vista系統,還需安裝Visual Studio 2005 Service Packe 1 Update for Windows Vista.
e, 安裝Windows 2008 SDK,如果是Visual Studio 2008則不需要這一步。
f, 配置Windows 2008 SDK,使2008 SDK成為首選開發庫,以獲得一些新功能和特性。辦法是在開始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,選擇make current按鈕。也可以在VS裡面手動配置include和libary路徑,效果是一樣的。
二,如何配置工程文件
1,如果是採用depot_tools,那麼從代碼下載到生成sln文件會自動完成。其步驟是
(1)下載depot_tools到本地存儲,假設位於d:/depot_tools.
(2)將d:/depot_tools添加到系統環境變數中。
(3)創建一個源代碼根目錄,假設為 d:/chrome,目錄不得包含空格。
(4)在命令行下切換當前目錄到d:/chrome。
(5)執行命令 gclient config http://src.chromium.org/svn/trunk/src ,該命令會首先下載svn和python分別到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。
(6)執行命令 gclient sync 這個命令會調用svn同步源代碼。這個過程會比較漫長。全部完成之後全部源代碼就保存在d:/chrome裡面。未編譯的代碼大約有4個G左右,過程將十分漫長。這樣獲得的源代碼已經包含所有的工程文件,可直接打開。
重點說明一下gclient,它實際上是一個批處理文件,它主要做了如下一些事情,首先設置環境變數,如代碼根目錄,工具根目錄等。其次調用win_tools.bat從伺服器下載svn和python。最後調用python.exe對Chrome.gyp進行解析生成所有工程文件。
另外需要說明的是,gclient sync的過程非常漫長,根據命令行的提示來看總共需要同步67個項目(不是工程),期間可能會因為一些原因導致錯誤而退出這個過程,需要繼續調用sync。比如網路出現故障svn會多次進入sleep狀態然後重試,如果多次失敗就會報錯退出,還有的情況是某些子目錄的屬性問題無法同步,可根據提示進行操作。還有個目前新出現的問題,下面2個目錄「src/webkit/data/layout_tests/LayoutTests」和「src/third_party/WebKit/LayoutTests」的源代碼是從src.webkit.org簽出來的,但是這個網站目前存在問題無法簽出代碼, 需要屏蔽掉這2個目錄,由於裡面是測試代碼,即使丟棄也不會影響整個工程的編譯,方法是打開trunk下面的.gclient文件,向裡面添加如下內容
"custom_deps" : {
"src/webkit/data/layout_tests/LayoutTests":None,
"src/third_party/WebKit/LayoutTests":None,
},
這樣svn就能完成代碼的同步了。最後gclient會調用depot_tools/python_bin/python.exe 對 src/build/gyp_
chromium進行處理,這樣就得到了所有的sln和vcproject文件。
2,如果是下載的代碼壓縮包或者checkout的代碼,代碼目錄裡面沒有sln文件,這個時候需要調用命令行進入源代碼根目錄,然後執行命令 gclient runhooks --force,命令執行後會直接對Chrome.gyp進行解析,生成sln文件。
在實際下載過程中,最開始的時候我用TortoiseSVN從http://src.chromium.org/svn/trunk/src checkout源代碼,但是得到的代碼只有幾百兆,執行gclient runhooks --force命令後也沒有找到sln文件,具體原因未知,不建議使用此方式。而直接下載代碼壓縮包的方式沒有嘗試過,不知道是否可行。因此最穩妥的方法還是使用depot_tools來部署和處理源代碼。
三 編譯工程
啟動Visual Studio 2005打開 src/chrome/browser/chrome.sln,或者打開src/build/all.sln,如果打開的是chrome.sln裡麵包含480個工程,而all.sln則包含507個工程,一些09年的編譯說明提到有300左右的工程,可見chrome的代碼變動比較大。對整個解決方案進行編譯,打開需要2個小時才能完成編譯,視硬體環境而定,內存越大越快,推薦4G以上內存,酷睿2核或者4核。編譯完成以後據說會佔用30G的空間。編譯後的文件位於 d:/chorme/chrome/debug 目錄或者 d:/chorme/chrome/release目錄下。
四 chrome涉及的開源項目
Chrome 採用了很多開源項目,這里把它們列出來以備後用,目前Chrome涉及25個開源代碼:
1、Google Breakpad
/src/breakpad
開源的跨開台程序崩潰報告系統。
2、Google URL
/src/googleurl
Google小巧的URL解析整理庫。
3、Skia
/src/skia
矢量圖引擎。
4、Google v8
/src/v8
Google開源的JavaScript引擎。V8實現了ECMA-262第三版的ECMAScript規范,可運行於Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基於IA-32 或 ARM 的系統之上。V8可單獨運行也可嵌入到任何C++程序中。
5、Webkit
/src/webki
開源的瀏覽器引擎
6、Netscape Portable Runtime (NSPR)
/src/base/third_party/nspr
Netscape Portable Runtime (NSPR) 提供了系統級平台無關的API及類似libc的函數。
7、Network Security Services (NSS)
/src/base/third_party/nss
Network Security Services (NSS) 一套用於支持伺服器端與客戶端安全開發的跨平台函數庫。程序通過NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 認證及其它一些安全標准。
8、Hunspell
/src/chrome/third_party/hunspell
Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.
9、Windows Template Library
/src/chrome/third_party/wtl
用於開發Windows程序與UI組件的C++ library。WTL擴展了ATL (Active Template Library) 並提供一套用於controls, dialogs, frame windows, GDI objects等開發的類。
10、Google C++ Testing Framework
/src/testing/gtest
Google用於編寫C++測試的基於xUnit架構的框架,可用於多種平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自動測試發現,有一套豐富的Assertions斷言,用於可自定義斷言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.
11、bsdiff 與 bspatch
/src/third_party/bsdiff 及 /src/third_party/bspatch
bsdiff 與 bspatch 用於為二進制文件生成補丁。
12、bzip2
/src/third_party/bzip2
bzip2使用Burrows-Wheeler block sorting text compression 演算法與Huffman編碼壓縮文件。
13、International Components for Unicode (ICU)
/src/third_party/icu38
ICU是一套成熟並被廣泛使用的C/C++ 及 Java 庫,可為軟體提供Unicode與全球化支持。
14、libjpeg
/src/third_party/libjpeg
用於處理JPEG (JFIF)圖像格式的庫。
15、libpng
/src/third_party/libpng
PNG圖像格式庫。支持絕大部分的PNG特性,可擴展。已經被廣泛地使用了13年以上了。
16、libxml
/src/third_party/libxml
C語言的XML解析庫。
17、libxslt
/src/third_party/libxslt
C語言的XSLT庫。
18、LZMA
/src/third_party/lzma_sdk
LZMA為7-Zip軟體中7z格式壓縮所使用的壓縮演算法,有很好的壓縮效果。
19、stringencoders
/src/third_party/modp_b64
一系列高性能的c-string轉換函數,比如:base 64 encoding/decoding。通常比其標准實現快兩倍以上。
20、Netscape Plugin Application Programming Interface (NPAPI)
/src/third_party/npapi
多種瀏覽器使用的跨平台插件架構。
21、Pthreads-w32
/src/third_party/pthread
用於編寫多線程程序的API
22、SCons - a software construction tool
/src/third_party/scons
開源的軟體構建工具——下一代的編譯工具。可以認為SCons是改進過的跨平台配上autoconf/automake與ccache的Make工具的子系統。
23、sqlite
/src/third_party/sqlite
大名鼎鼎的嵌入式資料庫引擎。自管理、零配置、無需伺服器、支持事務。
24、TLS Lite
/src/third_party/tlslite
SSL 3.0, TLS 1.0, and TLS 1.1的Python免費實現庫。TLS Lite支持這些安全驗證方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。註:Chrome並不包涵Python。TLS Lite用於Chrome開發過程中的代碼覆蓋、依賴檢查、網頁載入時間測試及生成html結果比較等。
25、zlib
/src/third_party/zlib
zlib為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。
Ⅱ redis可以多key對應一個value嗎
redis可以多key對應一個value,設置方法為:
1、打開HBuilderX工具,新建web項目並在js文件夾中,創建一個js文件map.js。
Ⅲ 用什麼打開bsdiff文件
android 升級分為兩種,一種是對系統中單個文件升級,一種是對 mtd 整個分區進行升級,升級包是用 zip 格式壓縮的經過簽名的壓縮文件。升級過程主要流程描述如下:
1 boot 發現用戶按住升級按鍵,將 recovery.img 作為 ramdisk 讀取到內存。
2 內核根據 ramdisk 中的 init.rc 執行 recovery 腳本。 Recovery 腳本在 sdcard 中找到升級文件後調用 recovery 程序依次做以下操作:
A 檢查升級文件的數字簽名是否可靠。檢查簽名使用的本地密鑰為 /res/keys
B 如果簽名合法則執行提取壓縮包中 META-INF/com/google/android/update-binary 文件重命名到 /tmp/update_binary 並執行該文件。
C update_binary 解析壓縮文件中的 META-INF/com/google/android/updater-script 文件並執行。其升級進度通過管道回傳給 recovery 程序。升級 / 更新可以直接覆蓋目標文件,也可採用二進制補丁形式以減少升級文件的容量,採用的工具為 bsdiff 和 imgdiff 。對於補丁包升級形式,升級數據源可靠性鑒別的依據為 sha1 校驗和數據長度比對。具體要求為: 1 升 級包提供的目標文件的 sha1 值和目標文件計算值符合,即目標正確。 2 進行補丁後的文件 sha1 值和長度符合升級包提供的補丁後的目標文件的長度和 sha1 數值,保證結果正確。兩項有一項不符合則升級過程停止。為保證第二項操作不損毀最終目標,打補丁的文件會先臨時存儲到 cache 中,等到結果比對正確才進行實際寫入 / 替換目標文件操作。所以此過程要求 cache 目錄必須有足夠空間能夠保存臨時文件。
升級文件"base\Spells\FireNova_Area.M2"無法安裝。 (MD5 mismatch: expected , actual .)(PTCApply_BSDiff failed.) 如果這個問題仍然存在,您可能需要運行修復工具或者重新安裝游戲以解決它。如果您無法解決這個問題,則請聯系我們的技術支持部門。 (BNUpdate::PTCApply)
Ⅳ android系統 如何要用差分做升級
1、首先是差分包patch的生成。在update.zip中的patch文件夾中有需要與系統文件同名但是以xxx.p 為後綴的文件,就是生成的差分patch文件。OTA系統差分包的製作,使用命令:
./build/tools/releasetools/ota_from_target_files -n -i <舊包> <新包> <差分包名>
在查閱ota_from_target_files 的代碼可知,是在函數WriteIncrementalOTAPackage里生成差分包的,在這個函數里邊創建了common.Difference這個類,繼續跟進,在common.py中的類 class Difference(object):里可以看到:
diff_program = DIFF_PROGRAM_BY_EXT.get(ext, "bsdiff")
2、看到了android中提供用來製作差分增量升級包的工具,在android的代碼目錄下 \external\bsdiff bsdiff是二進制差分工具,其對應的bspatch是相應的補丁合成工具,需要注意的是增量升級的補丁包,是需要在伺服器端,即PC端完成:命令:bsdiff oldfile newfile patchfile。
3、bspatch的命令格式為:bspatch oldfile newfile patchfile。
Ⅳ 微信更新的安裝包在哪個文件夾里
一般都是在系統文件夾里,安卓手機就是在android這個文件夾里,你可以在安裝的時候直接設置安裝完刪除更新系統包。
Ⅵ Bin/LICENSE/bsdiff…還有很多文件夾,就Bin文件夾查看屬性一百多MB大
是所謂的「回收站」,是不能刪除的。 只要在文件夾選項—查看 里勾尋隱藏受保護的操作系統文件」就看不到了 的。如果你發現在某盤下 $RECYCLE.BIN文件內存佔用很大(說明該文件回收的 東西多了,確保沒有你需要的重要程序或者文件),確實想刪除,右...
Ⅶ 如何更新android studio中的ndk
1、NDK開發就是JNI開發
這里有一點需要注意,moleName是最後編譯生成庫的名稱,當然,最終的.so文件會加一個前綴「lib」,例如上面的代碼,編譯後生成的.so文件的全名會是libpatch.so。另外,回頭看一下PatchUtil類中的static代碼塊,調用了載入庫文件的系統方法,其中的庫文件的名稱,與moleName是一致的,不要加任何前後綴。
七、所有的工作都結束了,patch方法已經可以被調用了,在Activity里起一個線程,調用PatchUtil.patch(),就可以進行APK包的合成了。
八、bsdiff下載地址中,除了可以下載bsdiff的源碼,還可以下載windows環境下的.exe可執行文件,下載下來,就可以在本地手動生成差分包,而不需要依賴伺服器了