日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Chromium Android编译指南

發(fā)布時(shí)間:2024/4/11 Android 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chromium Android编译指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先決條件

需要有一臺(tái)裝有Linux操作系統(tǒng)環(huán)境的主機(jī)來(lái)做編譯,這個(gè)環(huán)境的搭建配置方法可以參考Linux-specific build instructions。目前還不支持在其它(Mac/Windows)平臺(tái)上來(lái)為Android編譯Chromium。

獲取代碼

首先需要下載并安裝depot_tools包。在一個(gè)適當(dāng)?shù)媚夸浵耤lone depot_tools包:

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

然后修改.bashrc文件,將depot_tools的路徑加進(jìn)環(huán)境變量PATH中:

export PATH=$PATH:/path/to/depot_tools

如果從來(lái)沒(méi)有下載過(guò)Chromium的代碼的話,為源碼創(chuàng)建一個(gè)文件夾并下載源碼:

mkdir ~/chromium && cd ~/chromium fetch --nohooks android # This will take 30 minutes on a fast connection

如果之前下載過(guò)Linux版的Chromium代碼,則可以通過(guò)給.gclient文件(在上面的源碼根目錄下,即~/chromium目錄)附上target_os = ['android']來(lái)添加對(duì)Android的支持:

cat > .gclient <<EOFsolutions = [ ...existing stuff in here... ]target_os = [ 'android' ] # Add this to get Android stuff checked out. EOF

執(zhí)行g(shù)client sync 來(lái)獲取Android版的代碼:

gclient sync

(可選)下載LKGR

如果想編譯某個(gè)良好狀態(tài)下的Chromium,則可以同步LKGR(“l(fā)ast known good revision”)的代碼。可以在這里找到它,還可以在這里找到最近的100個(gè)版本。然后運(yùn)行:

gclient sync --nohooks -r <lkgr-sha1>

這不是一個(gè)典型的開(kāi)發(fā)者工作流所需要的;而只是用于Chromium的一次性編譯。

為編譯做配置

Chromium的整個(gè)編譯流程為:通過(guò)GYP或GN產(chǎn)生最終編譯所需的ninja配置文件,然后由ninja根據(jù)產(chǎn)生的這些配置文件做編譯。為Android編譯Chromium可以通過(guò)GYP或GN來(lái)做配置,但GN增量編譯最快,不久之后這也將成為唯一的編譯配置方式。它們都是給Chromium的Android編譯產(chǎn)生ninja文件的元構(gòu)建系統(tǒng)。在構(gòu)建瀑布中這兩種構(gòu)建都會(huì)被經(jīng)常測(cè)試。

GYP配置 (已廢棄 -- 使用GN來(lái)代替)

如果你在使用GYP,則在與.gclient位置相同的文件夾下,創(chuàng)建一個(gè)名為‘chromium.gyp_env’的文件,其中具有如下的內(nèi)容:

echo "{ 'GYP_DEFINES': 'OS=android target_arch=arm', }" > chromium.gyp_env

注意, “arm”是默認(rèn)的體系架構(gòu),它可以省略。如果是給x86或MIPS編譯,則可以將target_arch改成“ia32”或“mipsel”。

注意:如果在使用GYP_DEFINES環(huán)境變量,則它將覆蓋這個(gè)文件中的設(shè)置。或者清除它,或者把它設(shè)置為上面的值,然后執(zhí)行g(shù)client runhooks。

參考 build/android/developer_recommended_flags.gypi 來(lái)了解其它建議的GYP設(shè)置。創(chuàng)建了chromium.gyp_env之后,你需要運(yùn)行下面的命令來(lái)為gyp文件更新工程。你也需要在添加新的gyp文件、更新gyp文件或同步代碼庫(kù)時(shí),再次執(zhí)行這個(gè)命令。

gclient runhooks

這將下載更多東西,并提示你接受Terms of Service for Android SDK packages。

GN配置(建議采用)

如果你使用GN,則創(chuàng)建一個(gè)編譯目錄,并通過(guò)如下命令設(shè)置編譯標(biāo)記:

$ gn args out/Default

直接執(zhí)行這個(gè)命令會(huì)報(bào)錯(cuò),比如:

hanpfei0306@hanpfei0306:/media/data/Projects/OpenSource/chromium/src$ gn args out/Default gn.py: Could not find gn executable at: /media/data/Projects/OpenSource/chromium/src/buildtools/linux64/gn

提示找不到chromium/src/buildtools/linux64/gn命令,如同GYP配置那樣,需要執(zhí)行 gclient runhooks 。

可以選擇out目錄內(nèi)其它的名字來(lái)替代out/Default。但不要使用GYP的out/Debug或out/Release,它們可能與GYP構(gòu)建沖突。

同時(shí)要知道某些腳本(比如tombstones.py,adb_gdb.py)需要設(shè)置CHROMIUM_OUTPUT_DIR=out/Default。

這個(gè)命令(gn args out/Default)將用GN構(gòu)建參數(shù)文件啟動(dòng)編輯器。在這個(gè)文件中添加:

target_os = "android" target_cpu = "arm" # (default) is_debug = true # (default)# Other args you may want to set: is_component_build = true is_clang = true symbol_level = 1 # Faster build with fewer symbols. -g1 rather than -g2 enable_incremental_javac = true # Much faster; experimental

也可以指定target_cpu的值為“x86”和“mipsel”。以后可以在那個(gè)目錄下重新運(yùn)行g(shù)n args來(lái)編輯標(biāo)記。參考GN構(gòu)建配置來(lái)了解你可能想要設(shè)置的其它標(biāo)記。

這個(gè)命令啟動(dòng)系統(tǒng)默認(rèn)的編輯器,創(chuàng)建chromium/src/out/Default/args.gn文件,并根據(jù)這個(gè)文件的內(nèi)容來(lái)產(chǎn)生ninja文件。也就是在對(duì)這個(gè)文件做了修改,保存退出之后,gn會(huì)根據(jù)這個(gè)文件的內(nèi)容來(lái)產(chǎn)生ninja文件。

但這個(gè)文件本身不一定非要通過(guò)系統(tǒng)默認(rèn)的編輯器來(lái)創(chuàng)建,也可以用任意一款自己用起來(lái)順手的編輯器創(chuàng)建。只是在創(chuàng)建完了之后,需要再次運(yùn)行g(shù)n args out/Default,然后保存直接退出,以便于讓gn工具產(chǎn)生后續(xù)編譯所需要的ninja文件。

安裝依賴

通過(guò)如下的命令來(lái)更新編譯所需的系統(tǒng)包:

./build/install-build-deps-android.sh

還要確保OpenJDK 1.7被選為了默認(rèn)得JDK:

sudo update-alternatives --config javac sudo update-alternatives --config java sudo update-alternatives --config javaws sudo update-alternatives --config javap sudo update-alternatives --config jar sudo update-alternatives --config jarsigner

同步子目錄

gclient sync

編譯

模塊編譯,如:

$ ninja -C out/Default/ net $ ninja -C out/Default/ url $ ninja -C out/Default/ zlib

這將在chromium/src/out/Default下產(chǎn)生這些模塊的BUILD.gn文件中定義得targets,比如net和url的共享庫(kù),zlib得靜態(tài)庫(kù)等。

參考文檔

Android Build Instructions

總結(jié)

以上是生活随笔為你收集整理的Chromium Android编译指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。