webkit編譯
1. 如何重新單獨編譯QtWebkit
可以,直接下載Webkit 在編譯的時候 選擇編譯for Qt 就行了。 但是 先提醒你,Webkit 是我見過所有的庫中,最難編譯的。做好心理准備。50個人編譯Webkit 會有50個不同的錯誤。
2. WebKit嵌入式移植
蘋果公司在設計WebKit之時加入了太多Mac OS X平台的獨有事物,這給向其它系統的移植造成了很大障礙。不過,由於WebKit出色的開源特性,這些障礙正在被不斷克服。
WebKit是Mac OS X v10.3及以上版本所包含的軟體框架(對v10.2.7及以上版本也可通過軟體更新獲取)。同時,WebKit也是Mac OS X的Safari網頁瀏覽器的基礎。WebKit是一個開源項目,主要由KDE的KHTML修改而來並且包含了一些來自蘋果公司的一些組件。
傳統上,WebKit包含一個網頁引擎WebCore和一個腳本引擎javaScriptCore,它們分別對應的是KDE的KHTML和KJS。不過,隨著JavaScript引擎的獨立性越來越強,現在WebKit和WebCore已經基本上混用不分(例如Google Chrome採用V8引擎,卻仍然宣稱自己是WebKit內核)。
Webkit的優勢是速度快,而IE的優勢是兼容性好。
3. 如何在node-webkit中調用dll
最近在研究nodejs和node-webkit,需要在node-webkit應用中調用dll ,折騰了好久,遇到不少麻煩,國內沒怎麼介紹具體方法,就將這幾天的研究成果說明下,希望對後來人有用。
( 圖片粘貼不了,我把教程和涉及到的軟體都上傳到下面的鏈接去了)
說明:本文檔主要說明如何通過nodejs中的ffi和ref模塊來調用c的dll文件,並使node-webkit可以調用dll(涉及的軟體已全部打包,可以到下面的鏈接去下載 :http://download.csdn.net/detail/aichikaochang/7000791 )。
1 安裝nodejs,在http://nodejs.org/download/上下載32位的.msi文件,直接安裝,如下所示(版本號為0.10.26):
將安裝後的目錄添加的環境變數中,如:D:\Program Files\nodejs (主要目的是使該目錄下的node.exe可以在命令行中運行)。
2 安裝python2.7版本,並設置環境變數。
3 下載node-webkit壓縮文件,版本為0.8.4 。
4 安裝node-gyp和nw-gyp ,這個node- www.jdjdzj.com gyp將c文件編譯成nodejs的包的編譯工具,nw-gyp是將c文件編譯成node-WebKit的包的編譯工具,具體安裝方法如下:
進入cmd命令模式,輸入npm install node-gyp 即可
再次輸入 npm install nw-gyp即可
5 安裝ffi和 ref模塊,並重新編譯成node-webkit可用的包,具體如下:
在命令行模式中輸入:
npm install ffi
npm installref
這樣會在本用戶目錄下生成node_moles文件夾,裡面內容如下:
命令行模式進入到此目錄下
下面通過nw-gyp來將ffi和ref模塊重新編譯。
由於ffi中包含ref模塊,所以要先將ffi模塊中的ref先編譯,然後再將ffi編譯,如下:
注意:編譯命令一定要在含有package.json文件的目錄下運行,命令後的—target=0.8.4是針對node-webkit的版本的,如果不是這個版本,需要改成自己的版本。最後將ref模塊編譯下即可。
6 編輯項目的package.json文件,此文件主要是node-webkit調用你的應用的配置文件,需要在裡面添加
"webkit": {
"plugin": true
} 此選項說明你的應用需要調用第三方包,也就是node_moles/ 目錄下的ffi和ref包,一個例子如下:
7下面通過一個例子來說明如何在js中調用dll :
8 最後將你的應用包括node_moles和你需要調用的dll一起壓縮打包,壓縮方式必須是z7(通過好壓或其他壓縮軟體,只要後綴名是.zip的應該都可以),壓縮後的文件後綴名必須是.nw,然後將該文件拷貝到node-webkit的目錄下,拖進nw.exe即可執行。
9 注意: 由於ffi模塊是為c語言的dll包服務的,所以你自己編寫的dll必須要有 extern 「C」 來修飾 。
4. 請教Android內置應用Browser編譯成APK的問題
在Eclipse創建一個Android工程,把android.webkit目錄下的Java代碼拷貝過來;
將/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/webkit下面的EventLogTags.java也拷貝到自己的工程;
因為android.webkit下的類會使用SDK中非公開的API,我們需要解決編譯錯誤:
/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar
/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes.jar
創建一個User Library,並且勾選System Library的選項;
加入以下Jar包:
在Java Build Path/Order and Export把創建的庫放在最前面;
因為在我們應用中的android.webkit包跟SDK中的重名,所以我們需要更改包名,可以改成android.webkit2;
我們需要重新編譯libchromium_net.so和libwebcore.so,並且使用另外的名字,並且把其代碼中使用的android/webkit/ JNI路徑改成android/webkit2/保證JNI的正確性:
在/home/roger/a41/external/chromium下面,把所有源文件的android/webkit/路徑改成android/webkit2/;
打開/home/roger/a41/external/chromium/Android.mk,修改庫名為libchromium_net2,並且加多一行「LOCAL_MODULE_TAGS := optional「,具體內容見後;
重新編譯chromium_net,得到libchromium_net2.so;
在/home/roger/a41/external/webkit/Source/WebKit/android下面,把所有源文件的android/webkit/路徑改成android/webkit2/;
打開/home/roger/a41/external/webkit/Android.mk,將庫名改成libwebcore2.so,並且加多一行「LOCAL_MODULE_TAGS := optional「(需要修改兩個地方,靜態庫編譯和動態庫編譯),另外還需要把導入庫libchromium_net改成libchromium_net2,具體內容見後;
重新編譯webcore,得到libwebcore2.so;
接下來我們可以把修改後的libwebcore2.so和libchromium_net2.so push到手機的rom裡面,假設路徑是/data/local(如果沒有寫許可權,用Root Explorer修改);
然後我們需要修改Java的代碼,讓它去載入我們自己的庫,修改的地方位於JniUtil.java和WebViewCore.java,具體內容見後(載入順序需要改變,先載入libchromium_net2.so再載入libwebcore2.so);
最後加上我們自己的Test Shell的代碼,運行就OK了,如果只修改了C++的代碼,重編譯後再Push到手機,然後重新運行Test Shell就可以馬上生效,Java的代碼可以在Eclipse裡面很方便的調試,C++的代碼理論上也可以通過GDB進行調試;
5. 如何從android源碼中編譯webkit
android本來自帶了webkit瀏覽器,但是要對其進行custom就需要android源代碼才行, 但是在沒有源碼的情況下,那麼就需要用到ndk了,比如,我是在xoom上做custom webkit的。 雖然ndk提供的庫很少,而且沒有skia,但是好在有bitmap,這樣顯示慢了點,沒有硬加速,但不是不可能。 webkit需要的第三方庫,freetype,png,jpeg,sqlite3等雖然android源碼中有,但是ndk沒有開放, 因此所有的第三方庫,freetype,png,jpeg,sqlite3,cairo,curl,fontconfig,pixman,iconv等 都需要用ndk cross-compile成靜態庫,然後鏈接到最終的動態庫中。 選擇iconv是icu太大,而且沒有多語言的需求,選擇cairo+pixman是skia的移植性不好,而且cairo支持很多種backend。 編譯第三方庫需要用到autoconfig,ndk中有如何生成交叉編譯鏈的文檔,然後在configure時使用這個工具鏈就可以了, 但是android用到的是bionic庫,因此會有很少的地方需要修改,有些庫也不能生成test程序,但是靜態庫是沒問題的。 利用ndk生成的交叉工具鏈,在加上webkit自帶的cmake編譯系統,生成webkit的動態庫是沒有問題的, 當然是webkit的內核,而且有些平台相關的部分代碼需要修改,但是只要是以linux平台為基礎,修改還是很容易的, 我移植的webkit是先移植到linux平台上,然後移植到android平台上的,所以修改相對少了很多, 但是修改大多都在WebCore/platform下,在選擇了的平台相關庫後,做相應的配置和修改, 其次是在WebKit目錄,這個主要是支持和使用WebCore,因此在需求不是整個瀏覽器,而只是正常地顯示網頁時, 還是可以寫的比較簡單的。
6. linux 怎樣搭建qtwebkit使用的gstreamer
1. 編譯libxml2
下載libxml2-sources-2.7.6.tar.gz
解包後在當前目錄下編寫如下編譯腳本:(當然,不用腳本也行,你可以直接執行)】
CC=arm-none-linux-gnueabi-gcc./configure--build=i686-linux--host=arm-none-linux--prefix=/home/work/dist--without-python
make&&makeinstall
2. 編譯zlib, 這個太common,我不啰嗦了, glib-2.0要依賴的。
3. 編譯glib-2.0
下載glib-2.24.2.tar.bz2, 解包, 這個版本的依賴庫很少, 竟然只需要zlib。
老版本需要的libconv, gettext等均不需要了。
同樣, 編寫編譯腳本:
CC=arm-none-linux-gnueabi-gcc./configure--build=i686-linux--host=arm-none-linux
--prefix=/home/work/dist
CFLAGS="-I/home/work/dist/include-L/home/work/dist/lib"
glib_cv_stack_grows=noglib_cv_uscore=noac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yesac_cv_lib_rt_clock_gettime=noglib_cv_monotonic_clock=yes
make&&makeinstall
4. 編譯gstreamer
下載gstreamer-0.10.35.tar.gz, 這個是0.10版本裡面最新的了。
編譯腳本:
CC=arm-none-linux-gnueabi-gccPKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig./configure--build=i686-linux--host=arm-none-linux
--prefix=/home/work/distCFLAGS=-I/home/work/dist/include--disable-registry--disable-loadsave--disable-gtk-doc
ac_cv_func_register_printf_function=no--disable-tests--disable-valgrind--disable-debug--disable-gst-debug
make&&makeinstall
5. 編譯gst plugins base
下載gst-plugins-base-0.10.35.tar.gz。
編譯腳本:
CC=arm-none-linux-gnueabi-gccPKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig./configure--build=i686-linux--host=arm-none-linux
--prefix=/home/work/distCFLAGS=-I/home/work/dist/include--disable-valgrind--disable-x--disable-gnome_vfs--disable-alsa--disable-ogg--disable-pango--disable-theora--disable-vorbis--disable-examples
make&&makeinstall
接下來開始編譯Qt
Qt的配置文件很復雜, 我就不寫出來了, 就是要注意這三點:
1. 在Qt 的configure 時加上-force-pkg-config, 否則會在WebCore的feature.pri中檢查時報"Disabling video e the lack of GLib/Gio/GStreamer.",
也就是說會不支持video.
具體可以看這個pri片段:
!contains(QT_CONFIG,no-pkg-config):system(pkg-config--existsglib-2.0gio-2.0gstreamer-0.10):{
DEFINES-=ENABLE_VIDEO=0
DEFINES+=ENABLE_VIDEO=1
DEFINES+=WTF_USE_GSTREAMER=1
DEFINES-=WTF_USE_GSTREAMER=0
}else{
message("DisablingvideoethelackofGLib/Gio/GStreamer.")
DEFINES-=ENABLE_VIDEO=1
DEFINES+=ENABLE_VIDEO=0
}
如果不指定-force-pkg-config, 就會被當作no-pkg-config.
2. 為configure指定:PKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig, 否則也會diabling video
3. 為了讓webkit庫能找到gstreamer等庫, 還需要在webkit.pro中加上
7. 關於在Windows下編譯webkit內核的詳細資料
webkit.org上已經有完善的資料了
http://www.webkit.org/building/build.html
8. 如何vs2008編譯webkit
不要猜了,編譯生成的右邊有選項是生成發布版(Release)還是除錯版(Debug),根據你的需要選擇,初期默認是Debug,你可以改成Release。發布版的話生成和引用都在release目錄里,除錯版都在debug里
9. MAC OSX用Xcode編譯webkit,有詳細的步驟嗎
1.使用Xcode軟體。Xcode是一個蘋果系統上的集成開發環境(IDE),就是說用Xcode就能編寫C語言程序,並編譯運行。也能開發ios程序等,是一種軟體。在windows上類似這種能編c語言的還有微軟出的visual studio,和其他免費的一些如codeblocks,c-free等。
在Xcode中編譯運行C/C++的操作步驟:
1)打開Xcode,在歡迎界面點擊Create a new Xcode project。
2)彈出一個對話框,在左側欄選擇Mac OS X分類的Application,右側選擇Command Line Tool,點擊Next。
3)在Proct Name填寫項目名稱,如HelloMac,其餘默認即可(type里也可以選擇C或C++),點擊Next後選擇路徑並點擊Create完成項目創建。
4)在Xcode主界面左側點擊main.m,把代碼替換成C/C++的代碼,點擊左上角的Run按鈕即可編譯運行,界面下方會彈出控制台顯示運行結果。