AOSP 源碼整編單編

《AOSP 源碼下載》完成后,就可以開編了。

整編

整編匾七,顧名思義就是編譯整個 Android 源碼,最終 out 目錄會生成幾個重要的鏡像文件江兢,其中有 system.img昨忆、userdata.img、ramdisk.img 等杉允,這些是可以刷機的邑贴。

初始化編譯環(huán)境

項目目錄席里,打開終端,輸入命令:

source build/envsetup.sh

選擇編譯目標

命令:

lunch

輸出:

You're building on Linux

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_blueline-userdebug
     4. aosp_car_arm-userdebug
     5. aosp_car_arm64-userdebug
     6. aosp_car_x86-userdebug
     7. aosp_car_x86_64-userdebug
     8. aosp_cf_x86_64_auto-userdebug
     9. aosp_cf_x86_64_phone-userdebug
     10. aosp_cf_x86_64_tablet-userdebug
     11. aosp_cf_x86_64_tablet_3g-userdebug
     12. aosp_cf_x86_64_tv-userdebug
     13. aosp_cf_x86_64_wear-userdebug
     14. aosp_cf_x86_auto-userdebug
     15. aosp_cf_x86_phone-userdebug
     16. aosp_cf_x86_tablet-userdebug
     17. aosp_cf_x86_tablet_3g-userdebug
     18. aosp_cf_x86_tv-userdebug
     19. aosp_cf_x86_wear-userdebug
     20. aosp_crosshatch-userdebug
     21. aosp_marlin-userdebug
     22. aosp_sailfish-userdebug
     23. aosp_taimen-userdebug
     24. aosp_walleye-userdebug
     25. aosp_walleye_test-userdebug
     26. aosp_x86-eng
     27. aosp_x86_64-eng
     28. beagle_x15-userdebug
     29. hikey-userdebug
     30. hikey64_only-userdebug
     31. hikey960-userdebug
     32. hikey960_tv-userdebug
     33. hikey_tv-userdebug
     34. m_e_arm-userdebug
     35. mini_emulator_arm64-userdebug
     36. mini_emulator_x86-userdebug
     37. mini_emulator_x86_64-userdebug
     38. poplar-eng
     39. poplar-user
     40. poplar-userdebug
     41. uml-userdebug

Which would you like? [aosp_arm-eng] 26

編譯目標格式說明

編譯目標的格式:BUILD-BUILDTYPE拢驾,比如上面的 poplar-eng 的 BUILD 是 poplar奖磁,BUILDTYPE 是 eng.

什么是 BUILD

BUILD 指的是特定功能的組合的特定名稱,即表示編譯出的鏡像可以運行在什么環(huán)境繁疤。其中 aosp(Android Open Source Project)代表 Android 開源項目咖为;arm 表示系統(tǒng)是運行在 arm 架構的處理器上,arm64 則是指 64 位 arm 架構處理器稠腊,x86 則表示 x86 架構的處理器躁染,更多設備代碼和編譯目標參考官方文檔:https://source.android.google.cn/source/running.html#selecting-device-build

什么是 BUILDTYPE

BUILDTYPE 則指的是編譯類型架忌,通常有三種:

  • user:用來正式發(fā)布到市場的版本吞彤,權限受限,如沒有 root 權限叹放,不能 dedug 等饰恕。
  • userdebug:在user版本的基礎上開放了 root 權限和 debug 權限。
  • eng:代表 engineer井仰,開發(fā)工程師的版本埋嵌,擁有最大的權限(root等),具有額外調試工具的開發(fā)配置糕档。

如果沒有谷歌手機設備莉恼,可以選擇 arm 或者 x86,我選擇了 aosp_x86-eng速那,編譯完后運行模擬器看看俐银,因此這里選擇序號 26。

開始編譯

通過 make 指令進行代碼編譯:

make -j8

其中 -jN 參數(shù)表示處理并行任務端仰,通常使用的任務數(shù) N 介于編譯時所用計算機上硬件線程數(shù)的 1-2 倍之間捶惜。

查看計算機上的核心數(shù):

cat /proc/cpuinfo | grep processor
processor   : 0
processor   : 1
processor   : 2
processor   : 3

可看到創(chuàng)建的虛擬機 CPU 核心共有 4 個,那么要實現(xiàn)最快的編譯速度荔烧,可以使用介于 make -j4 到 make -j8 之間的命令吱七。

不出意外,當看到:#### build completed successfully (03:55:24 (hh:mm:ss)) ####就整編成功了鹤竭。

運行模擬器

整編完踊餐,網上很多都是說直接運行命令:emulator,但是我報以下錯誤了:

emulator: WARNING: Couldn't find crash service executable /media/ubuntu/disk/Project/AOSP9/prebuilts/android-emulator/linux-x86_64/emulator64-crash-service

emulator: WARNING: system partition size adjusted to match image file (1080 MB > 800 MB)

queryCoreProfileSupport: swap interval not found
failed to create drawable
failed to create drawable
failed to create drawable
failed to create drawable
failed to create drawable
failed to create drawable
failed to create drawable
failed to create drawable
getGLES2ExtensionString: Could not make GLES 2.x context current!

第一個警告不管,第二個警告可以 emulator 加參數(shù) -partition-size 2048解決,也可以不管故爵,最后一個折騰了很久刁俭,可以加參數(shù)-gpu off窜管,完整運行模擬器的命令:emulator -gpu off -partition-size 2048散劫,這時應該又會報:

emulator: WARNING: Couldn't find crash service executable /media/ubuntu/disk/Project/AOSP9/prebuilts/android-emulator/linux-x86_64/emulator64-crash-service

emulator: WARNING: system partition size adjusted to match image file (1338 MB > 800 MB)

emulator: ERROR: Running multiple emulators with the same AVD is an experimental feature.
Please use -read-only flag to enable this feature.

只能重啟一下才能解決。

如果編譯完成后啟動模擬器時卡在黑屏幕帆,可以嘗試編譯其他的获搏!

emulator 還有很多參數(shù),可以用 emulator -help 查看失乾,參數(shù)如下:

-sysdir <dir> 為模擬器在<dir>目錄中搜索系統(tǒng)硬盤鏡像
-system <file> 為模擬器從<file>文件中讀取初始化系統(tǒng)鏡像
-datadir <dir> 設置用戶數(shù)據寫入的目錄
-kernel <file> 為模擬器設置使用指定的模擬器內核
-ramdisk <file> 設置內存RAM 鏡像文件(默認為<system>/ramdisk.img)
-image <file> 廢棄常熙,使用-system <file> 替代
-init-data <file> 設置初始化數(shù)據鏡像(默認為<system>/userdata.img)
-initdata <file> 和"-init-data <file>"使用方法一致
-data <file> 設置數(shù)據鏡像(默認為<datadir>/userdata-qemu.img)
-partition-size <size> system/data 分區(qū)容量大小(MB)
-cache <file> 設置模擬器緩存分區(qū)鏡像(默認為零時文件)
-no-cache 禁用緩存分區(qū)
-nocache 與"-no-cache"使用方法相同
-sdcard <file> 指定模擬器SDCard 鏡像文件(默認為<system>/sdcard.img)
-wipe-data 清除并重置用戶數(shù)據鏡像(從initdata 拷貝)
-avd <name> 指定模擬器使用Android 虛擬設備
-skindir <dir> 設置模擬器皮膚在<dir>目錄中搜索皮膚(默認為<system>/skins 目錄)
-skin <name> 選擇使用給定的皮膚
-no-skin 不適用任何模擬器皮膚
-noskin 使用方法與"-no-skin"相同
-memory <size> 物理RAM 內存大小(MB)
-netspeed <speed> 設置最大網絡下載、上傳速度
-netdelay <delay> 網絡時延模擬
-netfast 禁用網絡形態(tài)
-tarce <name> 代碼配置可用
-show-kernel 顯示內核信息
-shell 在當前終端中使用根Shell 命令
-no-jni Dalvik 運行時禁用JNI 檢測
-nojni 使用方法與"-no-jni"相同
-logcat <tag> 輸出給定tag 的Logcat 信息

-no-audio 禁用音頻支持
-noaudio 與"-no-audio"用法相同
-audio <backend> 使用指定的音頻backend
-audio-in <backend> 使用指定的輸入音頻backend
-audoi-out <backend> 使用指定的輸出音頻backend
-raw-keys 禁用Unicode 鍵盤翻轉圖
-radio 重定向無線模式接口到個性化設備
-port <port> 設置控制臺使用的TCP 端口
-ports <consoleport>,<adbport> 設置控制臺使用的TCP 端口和ADB 調試橋使用的TCP 端口
-onion <image> 在屏幕上層使用覆蓋PNG 圖片
-onion-alpha <%age> 指定上層皮膚半透明度
-onion-rotation 0|1|2|3 指定上層皮膚旋轉
-scale <scale> 調節(jié)模擬器窗口尺寸(三種:1.0-3.0碱茁、dpi症概、auto)
-dpi-device <dpi> 設置設備的resolution (dpi 單位) (默認165)
-http-proxy <proxy> 通過一個HTTP 或HTTPS 代理來創(chuàng)建TCP 連接
-timezone <timezone> 使用給定的時區(qū),而不是主機默認的
-dns-server <server> 在模擬系統(tǒng)上使用給定的DNS 服務
-cpu-delay <cpudelay> 調節(jié)CUP 模擬
-no-boot-anim 禁用動畫來快速啟動
-no-window 禁用圖形化窗口顯示
-version 顯示模擬器版本號
-report-console <socket> 向遠程socket 報告控制臺端口
-gps <device> 重定向GPS 導航到個性化設備
-keyset <name> 指定按鍵設置文件名
-shell-serial <device> 根shell 的個性化設備
-old-system 支持舊版本(pre 1.4)系統(tǒng)鏡像
-tcpdump <file> 把網絡數(shù)據包捕獲到文件中
-bootchart <timeout> bootcharting 可用
-qemu args.... 向qemu 傳遞參數(shù)
-qemu -h 顯示qemu 幫助
-verbose 和"-debug-init"相同
-debug <tags> 可用早芭、禁用調試信息
-debug-<tag> 使指定的調試信息可用
-debug-no-<tag> 禁用指定的調試信息
-help 打印出該幫助文檔
-help-<option> 打印出指定option 的幫助文檔
-help-disk-images 關于硬盤鏡像幫助
-help-keys 支持按鈕捆綁(手機快捷鍵)
-help-debug-tags 顯示出-debug <tag>命令中的tag 可選值
-help-char-devices 個性化設備說明
-help-environment 環(huán)境變量
-help-keyset-file 指定按鍵綁定設置文件
-help-virtula-device 虛擬設備管理

補充

模擬器運行需要四個文件,分別是:

  • Linux Kernel
  • system.img
  • userdata.img
  • ramdisk.img

上面我 lunch 命令時選擇的是 aosp_x86-eng诅蝶,因此 linux 默認使用的 AOSP/prebuilds/qemu-kernel/x86/kernel-qemu 下的 kernel-qemu退个,而其他文件則是使用的 AOSP/out/target/product/generic_x86 目錄下的 system.img、userdata.img调炬、ramdisk.img语盈。

單編

單編就是編譯某個模塊,比如 Setting缰泡,會在 out 目錄對應的產品有 Settings.apk刀荒,例如:out/target/product/generic_x86/system/priv-app/Settings/Settings.apk,這是可以直接安裝的棘钞。

1缠借、source build/envsetup.sh

2、lunch

3宜猜、選擇單編版本序號

4泼返、編譯

4.1、mmm

mmm packages/apps/Settings/

編譯指定目錄下的模塊姨拥,但不編譯它所依賴的其它模塊绅喉。

4.2、mm

先進入目錄:

cd packages/apps/Settings/

再編譯

 mm

編譯當前目錄下的模塊叫乌,它和 mmm 一樣柴罐,不編譯依賴模塊。

4.3憨奸、mma

編譯當前目錄下的模塊及其依賴項革屠。

4.4、mmma [module_path]

編譯指定路徑下所有模塊,且包含依賴

4.5屠阻、make

make: 不帶任何參數(shù)則是編譯整個系統(tǒng)

make MediaProvider

單個模塊編譯红省,會把該模塊及其依賴的其他模塊一起編譯,會搜索整個源代碼來定位 MediaProvider 模塊所使用的 Android.mk 文件国觉,還要判斷該模塊依賴的其他模塊是否有修改吧恃。

make snod

如果我們修改代碼,想看效果麻诀,怎么辦痕寓?

1、可以在編譯完成后蝇闭,借助 adb install -r apk路徑直接將生成的 apk 文件安裝到設備上呻率。

2、可以編譯好完成后呻引,再使用make snod礼仗,重新生成 system.img,再運行模擬器也可逻悠。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末元践,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子童谒,更是在濱河造成了極大的恐慌单旁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饥伊,死亡現(xiàn)場離奇詭異象浑,居然都是意外死亡,警方通過查閱死者的電腦和手機琅豆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門愉豺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人趋距,你說我怎么就攤上這事粒氧。” “怎么了节腐?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵外盯,是天一觀的道長。 經常有香客問我翼雀,道長饱苟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任狼渊,我火速辦了婚禮箱熬,結果婚禮上类垦,老公的妹妹穿的比我還像新娘。我一直安慰自己城须,他們只是感情好蚤认,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糕伐,像睡著了一般砰琢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上良瞧,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天陪汽,我揣著相機與錄音,去河邊找鬼褥蚯。 笑死挚冤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的赞庶。 我是一名探鬼主播训挡,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歧强!你這毒婦竟也來了舍哄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤誊锭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弥锄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丧靡,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年籽暇,在試婚紗的時候發(fā)現(xiàn)自己被綠了温治。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡戒悠,死狀恐怖熬荆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情绸狐,我是刑警寧澤卤恳,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站寒矿,受9級特大地震影響突琳,放射性物質發(fā)生泄漏。R本人自食惡果不足惜符相,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一拆融、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦镜豹、人聲如沸傲须。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泰讽。三九已至,卻和暖如春散怖,著一層夾襖步出監(jiān)牢的瞬間菇绵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工镇眷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咬最,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓欠动,卻偏偏與公主長得像永乌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子具伍,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容

  • 《AOSP 源碼下載》完成后翅雏,就可以開編了。 整編 整編人芽,顧名思義就是編譯整個 Android 源碼望几,最終 out...
    迷途小碼農h閱讀 1,407評論 0 2
  • 在Android Studio代碼調試一文中,簡單的介紹了代碼調試的一些技巧.現(xiàn)在我們來談談android源碼編譯...
    涅槃1992閱讀 191,233評論 104 450
  • 黑色的海島上懸著一輪又大又圓的明月橄抹,毫不嫌棄地把溫柔的月色照在這寸草不生的小島上。一個少年白衣白發(fā)惕味,悠閑自如地倚坐...
    小水Vivian閱讀 3,110評論 1 5
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了禀倔? 不是不允許自己墜落榄融, 我沒有滴水不進的保護膜。 就是害怕變得面...
    悶熱當乘涼閱讀 4,246評論 0 13
  • 感覺自己有點神經衰弱救湖,總是覺得手機響了剃袍;屋外有人走過;每次媽媽不聲不響的進房間突然跟我說話捎谨,我都會被嚇得半死民效!一整...
    章魚的擁抱閱讀 2,172評論 4 5