Intel/Apple Silicon架構(gòu)MacOS平臺(tái)編譯AOSP源碼

前言

為了學(xué)習(xí)安卓源碼的編譯過(guò)程,以及給Pixel4手機(jī)燒錄鏡像彬向,筆者利用手頭的兩臺(tái)電腦進(jìn)行了編譯AOSP的嘗試,
兩臺(tái)設(shè)備分別為:
1、黑蘋(píng)果(Based on 19款聯(lián)想小新pro13)谷饿,i7 10710U 6核12線程+16GB,OS版本Big Sur 11.5.1妈倔,以下稱(chēng)為Intel平臺(tái)
2博投、21款Macbook Pro 16,M1MAX 10核+32GB启涯,OS版本Monterey 12.5.1贬堵,以下稱(chēng)為Apple Silicon平臺(tái)

AOSP版本為Android11 r46


源代碼標(biāo)記

先說(shuō)結(jié)論:兩臺(tái)設(shè)備均可以完成編譯,但編譯過(guò)程中會(huì)報(bào)出大量錯(cuò)誤结洼,排除這些錯(cuò)誤需要花費(fèi)很多的時(shí)間黎做,而且其中錯(cuò)誤需要修改源碼來(lái)解決,這可能帶來(lái)潛在的問(wèn)題松忍。
另外蒸殿,谷歌官方文檔已提示:

官方提示

\color{red}{因此筆者完全不建議現(xiàn)階段在MacOS平臺(tái)編譯AOSP。}
但是如果你堅(jiān)持要嘗試鸣峭,請(qǐng)繼續(xù)往下看:

一宏所、準(zhǔn)備磁盤(pán)

因?yàn)镸acOS的磁盤(pán)默認(rèn)為APFS不區(qū)分大小寫(xiě)格式,而AOSP的編譯需要在區(qū)分大小寫(xiě)的文件系統(tǒng)中運(yùn)行摊溶,所以需要開(kāi)辟一塊磁盤(pán)
操作步驟:

  • 打開(kāi)磁盤(pán)工具爬骤,選中Macintosh HD宗卷,點(diǎn)擊“+”莫换,名稱(chēng)自己定義竟秫,格式選擇APFS(區(qū)分大小寫(xiě))理朋,大小選項(xiàng)中設(shè)置至少200GB的空間


    添加磁盤(pán)
  • 點(diǎn)擊確定后蹲坷,在/Volumes/下會(huì)自動(dòng)掛載所開(kāi)辟的磁盤(pán)


    掛載磁盤(pán)

二浦夷、安裝配置

1、安裝python喊暖、git和Xcode

  • python和git的安裝沒(méi)什么好說(shuō)的惫企,安裝方法很多,請(qǐng)自行百度
    但需要注意陵叽,MacOS從12.3版本開(kāi)始系統(tǒng)不再預(yù)置python2狞尔,需要手動(dòng)下載安裝
    安裝Xcode直接在AppStore下載即可,安裝過(guò)程很慢巩掺,需要耐心等待
  • 配置git config
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

4沪么、創(chuàng)建bin目錄

  • mkdir ~/bin
  • PATH=~/bin:$PATH

5、下載repo

curl?https://storage.googleapis.com/git-repo-downloads/repo?>?~/bin/repo?//google地址锌半,需要翻墻
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT'|base64 -d > ~/bin/repo//若上?地址不能訪問(wèn)禽车,可使?中科?地址
chmod a+x ~/bin/repo

由于repo運(yùn)行過(guò)程中會(huì)嘗試訪問(wèn)官方的git源更新自己寇漫,因此建議使用utsc鏡像源進(jìn)行更新
在 ~/.bash_profile新增

export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'

6、執(zhí)行source ~/.bash_profile

三殉摔、 源碼下載

1州胳、進(jìn)入準(zhǔn)備好的磁盤(pán)
2、創(chuàng)建源碼存放的文件夾逸月,進(jìn)入文件夾

mkdir AOSP_11
cd AOSP_11

3栓撞、查看源代碼標(biāo)記
打開(kāi)谷歌的源代碼標(biāo)記文檔,從中選擇想要同步的分支碗硬,筆者這里選擇的是android-11.0.0_r46瓤湘,因?yàn)樗亲詈笠粋€(gè)適配Pixel4的Andoird11小版本
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

源代碼標(biāo)記

由于上面的鏈接需要翻墻,所以也提供如下的utsc鏈接供查找
http://mirrors.ustc.edu.cn/aosp/platform/manifest.git/refs/tags/
4恩尾、初始化

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-11.0.0_r46

若想下載其他版本弛说,可用對(duì)應(yīng)的標(biāo)記來(lái)替換android-11.0.0_r46

5、同步源代碼樹(shù)
建議使用以下的命令

repo?sync?-c?--no-tags?--prune?-f?-j4?

其中-j4表示使用4個(gè)線程翰意,但注意不要開(kāi)過(guò)多的線程木人,否則服務(wù)器會(huì)拒絕你的訪問(wèn)

四、編譯

1冀偶、初始化環(huán)境:

  • 在AOSP_11目錄下醒第,執(zhí)行envsetup.sh腳本初始化環(huán)境
source build/envsetup.sh
  • 清理之前編譯的輸出文件:
make clobber
  • 選擇編譯目標(biāo)
lunch
  • 執(zhí)行上面的命令后,終端會(huì)輸出如下提示信息:
You're building on Darwin

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_blueline-userdebug
     4. aosp_blueline_car-userdebug
     5. aosp_bonito-userdebug
     6. aosp_bonito_car-userdebug
     7. aosp_bramble-userdebug
     8. aosp_car_arm-userdebug
     9. aosp_car_arm64-userdebug
     10. aosp_car_x86-userdebug
     11. aosp_car_x86_64-userdebug
     12. aosp_cf_arm64_auto-userdebug
     13. aosp_cf_arm64_phone-userdebug
     14. aosp_cf_x86_64_phone-userdebug
     15. aosp_cf_x86_auto-userdebug
     16. aosp_cf_x86_phone-userdebug
     17. aosp_cf_x86_tv-userdebug
     18. aosp_coral-userdebug
     19. aosp_coral_car-userdebug
     20. aosp_crosshatch-userdebug
     21. aosp_crosshatch_car-userdebug
     22. aosp_flame-userdebug
     23. aosp_flame_car-userdebug
     24. aosp_redfin-userdebug
     25. aosp_sargo-userdebug
     26. aosp_sunfish-userdebug
     27. aosp_trout_arm64-userdebug
     28. aosp_trout_x86-userdebug
     29. aosp_x86-eng
     30. aosp_x86_64-eng
     31. arm_krait-eng
     32. arm_v7_v8-eng
     33. armv8-eng
     34. armv8_kryo385-eng
     35. beagle_x15-userdebug
     36. beagle_x15_auto-userdebug
     37. car_x86_64-userdebug
     38. db845c-userdebug
     39. fuchsia_arm64-eng
     40. fuchsia_x86_64-eng
     41. hikey-userdebug
     42. hikey64_only-userdebug
     43. hikey960-userdebug
     44. hikey960_tv-userdebug
     45. hikey_tv-userdebug
     46. pixel3_mainline-userdebug
     47. poplar-eng
     48. poplar-user
     49. poplar-userdebug
     50. qemu_trusty_arm64-userdebug
     51. silvermont-eng
     52. uml-userdebug
     53. yukawa-userdebug
     54. yukawa_sei510-userdebug

Which would you like? [aosp_arm-eng]

關(guān)于lunch選擇进鸠,官方文檔有如下說(shuō)明


構(gòu)建類(lèi)型說(shuō)明

平臺(tái)類(lèi)型代號(hào)

Pixel4代號(hào)flame稠曼,因此筆者選擇22并回車(chē),輸出如下:

//Intel平臺(tái)
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=11
TARGET_PRODUCT=aosp_flame
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_OS=darwin
HOST_OS_EXTRA=Darwin-20.6.0-x86_64-10.16
HOST_BUILD_TYPE=release
BUILD_ID=RQ3A.211001.001
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=hardware/google/av hardware/google/camera hardware/google/interfaces hardware/google/pixel device/google/coral hardware/qcom/sm8150/display hardware/qcom/sm8150/data/ipacfg-mgr hardware/qcom/sm8150/gps vendor/google/airbrush/floral vendor/google/biometrics/face vendor/google/camera vendor/google/darwinn vendor/qcom/sm8150 vendor/qcom/sm8150/proprietary/commonsys/telephony-apps/DataStatusNotification vendor/qcom/sm8150/proprietary/gps vendor/qcom/sm8150/codeaurora/location vendor/google/interfaces vendor/qcom/sensors vendor/google/tools/sensors vendor/qcom/sm7250/codeaurora/commonsys/telephony/ims/ims-ext-common vendor/qcom/sm7250/codeaurora/dataservices/rmnetctl vendor/qcom/sm7250/proprietary/commonsys/qcrilOemHook vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/ims vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/QtiTelephonyService vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/xdivert vendor/qcom/sm7250/proprietary/qcril-data-hal vendor/qcom/sm7250/proprietary/qcril-hal vendor/qcom/sm7250/proprietary/data
//Apple Silicon平臺(tái)
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=11
TARGET_PRODUCT=aosp_flame
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_OS=darwin
HOST_OS_EXTRA=Darwin-21.6.0-x86_64-12.5.1
HOST_BUILD_TYPE=release
BUILD_ID=RQ3A.211001.001
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=hardware/google/av hardware/google/camera hardware/google/interfaces hardware/google/pixel device/google/coral hardware/qcom/sm8150/display hardware/qcom/sm8150/data/ipacfg-mgr hardware/qcom/sm8150/gps vendor/google/airbrush/floral vendor/google/biometrics/face vendor/google/camera vendor/google/darwinn vendor/qcom/sm8150 vendor/qcom/sm8150/proprietary/commonsys/telephony-apps/DataStatusNotification vendor/qcom/sm8150/proprietary/gps vendor/qcom/sm8150/codeaurora/location vendor/google/interfaces vendor/qcom/sensors vendor/google/tools/sensors vendor/qcom/sm7250/codeaurora/commonsys/telephony/ims/ims-ext-common vendor/qcom/sm7250/codeaurora/dataservices/rmnetctl vendor/qcom/sm7250/proprietary/commonsys/qcrilOemHook vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/ims vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/QtiTelephonyService vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/xdivert vendor/qcom/sm7250/proprietary/qcril-data-hal vendor/qcom/sm7250/proprietary/qcril-hal vendor/qcom/sm7250/proprietary/data

你會(huì)發(fā)現(xiàn)客年,Apple Silicon平臺(tái)也被識(shí)別成了HOST_ARCH=x86_64霞幅,但是不用管,繼續(xù)下一步

  • 開(kāi)始編譯代碼:
    使用 make 編譯代碼搀罢,GNU Make 同樣可以借助 -jN 參數(shù)處理并行任務(wù),通常使用的任務(wù)數(shù) N 介于編譯時(shí)所用計(jì)算機(jī)上硬件線程數(shù)的 1-2 倍之間侥猩,筆者這里參照i7 10710的規(guī)格榔至,線程數(shù)統(tǒng)一選擇12
make -j12
  • 執(zhí)行完之后,開(kāi)始編譯并輸出:
//Intel平臺(tái)
13:51:59 ************************************************************
13:51:59 You are building on a machine with 16GB of RAM
13:51:59 
13:51:59 The minimum required amount of free memory is around 16GB,
13:51:59 and even with that, some configurations may not work.
13:51:59 
13:51:59 If you run into segfaults or other errors, try reducing your
13:51:59 -j value.
13:51:59 ************************************************************
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=11
TARGET_PRODUCT=aosp_flame
//Apple Silicon平臺(tái)
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=11
TARGET_PRODUCT=aosp_flame
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_OS=darwin
HOST_OS_EXTRA=Darwin-21.6.0-x86_64-12.5.1
HOST_BUILD_TYPE=release
BUILD_ID=RQ3A.211001.001
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=hardware/google/av hardware/google/camera hardware/google/interfaces hardware/google/pixel device/google/coral hardware/qcom/sm8150/display hardware/qcom/sm8150/data/ipacfg-mgr hardware/qcom/sm8150/gps vendor/google/airbrush/floral vendor/google/biometrics/face vendor/google/camera vendor/google/darwinn vendor/qcom/sm8150 vendor/qcom/sm8150/proprietary/commonsys/telephony-apps/DataStatusNotification vendor/qcom/sm8150/proprietary/gps vendor/qcom/sm8150/codeaurora/location vendor/google/interfaces vendor/qcom/sensors vendor/google/tools/sensors vendor/qcom/sm7250/codeaurora/commonsys/telephony/ims/ims-ext-common vendor/qcom/sm7250/codeaurora/dataservices/rmnetctl vendor/qcom/sm7250/proprietary/commonsys/qcrilOemHook vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/ims vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/QtiTelephonyService vendor/qcom/sm7250/proprietary/commonsys/telephony-apps/xdivert vendor/qcom/sm7250/proprietary/qcril-data-hal vendor/qcom/sm7250/proprietary/qcril-hal vendor/qcom/sm7250/proprietary/data
============================================

接下來(lái)欺劳,耐心等待即可唧取。。划提。(當(dāng)然枫弟,事情不會(huì)如此簡(jiǎn)單,有大量的坑等著你)

五鹏往、編譯遇到的坑

問(wèn)題1淡诗、Could not find a supported mac sdk

錯(cuò)誤信息:

--- FAIL: TestVndkUsingCoreVariant (0.04s)
    cc_test.go:524: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:524: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:524: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
--- FAIL: TestVndkWhenVndkVersionIsNotSet (0.03s)
    cc_test.go:530: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:530: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:530: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:530: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:530: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:530: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
--- FAIL: TestVndkWithHostSupported (0.04s)
    cc_test.go:434: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:434: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:434: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:434: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:434: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
    cc_test.go:434: "Could not find a supported mac sdk: [\"10.10\" \"10.11\" \"10.12\" \"10.13\" \"10.14\" \"10.15\"]"
FAIL
21:30:32 soong bootstrap failed with: exit status 1
ninja: build stopped: subcommand failed.

#### failed to build some targets (29 seconds) ####

1、問(wèn)題原因:
找不到支持列表中指定的mac sdk
2、解決辦法:
方法1: 直接修改/x86_darwin_host.go

  • 首先按照下面的方法查看自己電腦上的 mac sdk:
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
ls
  • 如果提示找不到此目錄韩容,請(qǐng)?jiān)贏ppStore下載并安裝Xcode
  • 如果已經(jīng)安裝過(guò)Xcode款违,會(huì)打印出當(dāng)前 XCode 提供的 SDK 版本號(hào),其中MacOSX.sdk為指向MacOSX12.X.sdk的軟鏈接群凶,如下
//Intel平臺(tái)
MacOSX.sdk  MacOSX12.1.sdk 
//Apple Silicon平臺(tái)
MacOSX.sdk  MacOSX12.3.sdk
  • 在/build/soong/cc/config/x86_darwin_host.go 文件中找到 “darwinSupportedSdkVersions“ 添加 MacOSX.sdk 對(duì)應(yīng)的版本號(hào)——以Intel平臺(tái)為例
darwinSupportedSdkVersions = []string{
        "10.10",
        "10.11",
        "10.12",
        "10.13",
        "10.14",
        "10.15",
        "12.1",
}

辦法2插爹、下載支持的sdk

  • https://github.com/phracker/MacOSX-SDKs/releases下載當(dāng)支持的sdk版本

    下載sdk

  • 解壓并將sdk放入/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs目錄下
    比較坑的是,網(wǎng)上有很多解決此問(wèn)題的指導(dǎo)到這里就結(jié)束了请梢,所以再次開(kāi)始編譯仍然會(huì)報(bào)相同的錯(cuò)赠尾!

  • 修改系統(tǒng)支持的最小SDK版本
    進(jìn)入/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/目錄
    使用Xcode打開(kāi)Info.plist文件,將MinimumSDKVersion改成你想支持的最低版本毅弧,筆者這里修改成了10.15


    修改sdk版本
  • 由于該文件和所在目錄都有權(quán)限限制气嫁,因此無(wú)法直接修改
    如果你比較懶,那就直接

sudo chmod 777 MacOSX.platform
sudo chmod 777 Info.plist

但是更建議先復(fù)制到當(dāng)前用戶有權(quán)限修改的目錄下形真,然后修改杉编,待完成修改后,復(fù)制回去:

cp /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist ~/Downloads

方法選擇
筆者更推薦第二種方法咆霜,因?yàn)槿绻?dāng)前sdk版本和支持的sdk版本相差過(guò)大(例如筆者這種情況)時(shí)邓馒,強(qiáng)行使用新sdk會(huì)帶來(lái)更多的潛在麻煩,穩(wěn)妥起見(jiàn)還是老老實(shí)實(shí)用官方推薦的sdk吧

問(wèn)題2蛾坯、too many open files

錯(cuò)誤日志如下:

FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
error: prebuilts/sdk/Android.bp:25:1: module "metalava-sdk-android-jars": glob: fcntl: too many open files
error: system/timezone/distro/tools/Android.bp:16:1: module "create_time_zone_distro" variant "darwin_common": glob: open /Volumes/AOSP/WORKING_DIRECTORY/system/timezone/distro/tools/src/main/com/android/timezone: too many open files
error: cts/tools/vm-tests-tf/Android.bp:58:1: module "vmtests-dfh-dex-generated" variant "darwin_common": glob: fcntl: too many open files

1光酣、問(wèn)題原因:
打開(kāi)的文件數(shù)量超過(guò)了系統(tǒng)限制
2、 解決辦法:
當(dāng)然是把這個(gè)值改大一點(diǎn)

ulimit -S -n 2048

問(wèn)題3脉课、host_ldlibs: Host library '-lrt' not available

1救军、錯(cuò)誤日志:

FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
error: external/v8/Android.bp:181:16: module "v8_bytecode_builtins_list_generator" variant "darwin_x86_64": host_ldlibs: Host library `-lrt` not available
error: external/v8/Android.bp:209:16: module "v8_torque" variant "darwin_x86_64": host_ldlibs: Host library `-lrt` not available
21:48:40 soong bootstrap failed with: exit status 1

#### failed to build some targets (01:16 (mm:ss)) ####

2、問(wèn)題原因:https://stackoverflow.com/questions/47703239/ld-library-not-found-for-lrt
在舊的 Linux 系統(tǒng)中有 -lrt 供 GNU libc 使用倘零,但是在新的 glibc(after 2.17 from 2013) 之后就沒(méi)有這個(gè)了唱遭。
3、解決辦法:
在external/v8/Android.bp找到 -lrt 呈驶,把它們?nèi)孔⑨尩艏纯伞?/p>

問(wèn)題4拷泽、找不到頭文件sys/prctl.h

1、錯(cuò)誤日志:

FAILED: out/soong/.intermediates/external/v8/v8_libbase/darwin_x86_64_static/obj/external/v8/src/base/platform/platform-linux.o
 prebuilts/clang/host/darwin-x86/clang-r383902b1/bin/clang++ -c -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer-arithmetic -Wno-null-dereference -Wno-pointer-compare -Wno-xor-used-as-pow -Wno-final-dtor-non-final-class  -fPIC -funwind-tables -D__STDC_FORMAT_MACROS -D__STDC_CONSTANT_MACROS -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -mmacosx-version-min=10.10 -DMACOSX_DEPLOYMENT_TARGET=10.10 -m64 -integrated-as -fstack-protector-strong -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -no-canonical-prefixes -DNDEBUG -UDEBUG -fno-exceptions -Wno-multichar -O2 -g -fno-strict-aliasing -Werror=date-time -Werror=pragma-pack -Werror=pragma-pack-suspicious-include -D__compiler_offsetof=__builtin_offsetof -faddrsig -Werror=int-conversion -fexperimental-new-pass-manager -Wno-reserved-id-macro -Wno-unused-command-line-argument -fcolor-diagnostics -Wno-sign-compare -Wno-defaulted-function-deleted -Wno-inconsistent-missing-override -Wno-c99-designator -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang   -target x86_64-apple-darwin -B/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin -fPIC -Wsign-promo -Wimplicit-fallthrough -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -Wno-gnu-include-next   -Iexternal/v8/src -Iexternal/v8 -Iexternal/libcxx/include -Iexternal/libcxxabi/include -Wall -Werror -Wno-endif-labels -Wno-implicit-fallthrough -Wno-import -Wno-format -Wno-unused-variable -Wno-unused-parameter -Wno-unused-private-field -Wno-sign-compare -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-undefined-var-template -Wno-non-virtual-dtor -Wno-user-defined-warnings -Wno-unused-lambda-capture -Wno-missing-braces -fno-exceptions -fvisibility=hidden -fno-rtti -g0 -Os -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64 -DV8_ATOMIC_OBJECT_FIELD_WRITES -DV8_ATOMIC_MARKING_STATE -DV8_ENABLE_LAZY_SOURCE_POSITIONS -DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH -DV8_SNAPSHOT_COMPRESSION -DV8_NO_ARGUMENTS_ADAPTOR -DDISABLE_UNTRUSTED_CODE_MITIGATIONS -UANDROID -DV8_TARGET_ARCH_X64 -std=gnu++14 -D_LIBCPP_DISABLE_AVAILABILITY -nostdinc++ -Isystem/core/include -Isystem/media/audio/include -Ihardware/libhardware/include -Ihardware/libhardware_legacy/include -Ihardware/ril/include -Iframeworks/native/include -Iframeworks/native/opengl/include -Iframeworks/av/include  -Ilibnativehelper/include_jni -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -Werror=fortify-source -Werror=address-of-temporary -Werror=return-type -Wno-tautological-constant-compare -Wno-tautological-type-limit-compare -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-int-in-bool-context -Wno-sizeof-array-div -Wno-tautological-overlap-compare -Wno-deprecated-copy -Wno-range-loop-construct -Wno-misleading-indentation -Wno-zero-as-null-pointer-constant -Wno-deprecated-anon-enum-enum-conversion -Wno-deprecated-enum-enum-conversion -Wno-string-compare -Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-pessimizing-move -MD -MF out/soong/.intermediates/external/v8/v8_libbase/darwin_x86_64_static/obj/external/v8/src/base/platform/platform-linux.o.d -o out/soong/.intermediates/external/v8/v8_libbase/darwin_x86_64_static/obj/external/v8/src/base/platform/platform-linux.o external/v8/src/base/platform/platform-linux.cc
external/v8/src/base/platform/platform-linux.cc:13:10: fatal error: 'sys/prctl.h' file not found
#include <sys/prctl.h>
         ^~~~~~~~~~~~~
1 error generated.
16:47:22 ninja failed with: exit status 1

#### failed to build some targets (02:03:51 (hh:mm:ss)) ####

2袖瞻、問(wèn)題原因:
編譯腳本錯(cuò)誤的引用了platform-linux.cc(官方放棄治療后這類(lèi)問(wèn)題會(huì)越來(lái)越多)
3司致、解決辦法:
工程目錄下全局搜索 “platform-linux”,并把 “platform-linux.cc” 改為 “platform-macos.cc”聋迎。涉及到的文件有:
external/v8/Android.libbase.bp
external/v8/BUILG.gn
external/v8/genmakefiles.py

問(wèn)題5脂矫、'mach/mach_init.h' file not found

1、錯(cuò)誤日志:

FAILED: out/soong/.intermediates/external/v8/v8_libbase/android_arm64_armv8-a_static_cfi_com.android.art.debug/obj/external/v8/src/base/platform/platform-macos.o
 prebuilts/clang/host/darwin-x86/clang-r383902b1/bin/clang++ -c -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer-arithmetic -Wno-null-dereference -Wno-pointer-compare -Wno-xor-used-as-pow -Wno-final-dtor-non-final-class -D__ANDROID_APEX__ -D__ANDROID_SDK_VERSION__=10000  -Werror=implicit-function-declaration -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -no-canonical-prefixes -DNDEBUG -UDEBUG -fno-exceptions -Wno-multichar -O2 -g -fno-strict-aliasing -Werror=date-time -Werror=pragma-pack -Werror=pragma-pack-suspicious-include -D__compiler_offsetof=__builtin_offsetof -faddrsig -Werror=int-conversion -fexperimental-new-pass-manager -Wno-reserved-id-macro -Wno-unused-command-line-argument -fcolor-diagnostics -Wno-sign-compare -Wno-defaulted-function-deleted -Wno-inconsistent-missing-override -Wno-c99-designator -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang -ffunction-sections -fdata-sections -fno-short-enums -funwind-tables -fstack-protector-strong -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -Wstrict-aliasing=2 -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Werror=format-security -nostdlibinc -march=armv8-a  -target aarch64-linux-android10000 -Bprebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/aarch64-linux-android/bin -fPIC -Wsign-promo -Wimplicit-fallthrough -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -Wno-gnu-include-next -fvisibility-inlines-hidden  -Iexternal/v8/src -Iexternal/v8 -D__LIBC_API__=10000 -D__LIBM_API__=10000 -D__LIBDL_API__=10000 -Iexternal/libcxx/include -Iexternal/libcxxabi/include -Ibionic/libc/include -Wall -Werror -Wno-endif-labels -Wno-implicit-fallthrough -Wno-import -Wno-format -Wno-unused-variable -Wno-unused-parameter -Wno-unused-private-field -Wno-sign-compare -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-undefined-var-template -Wno-non-virtual-dtor -Wno-user-defined-warnings -Wno-unused-lambda-capture -Wno-missing-braces -fno-exceptions -fvisibility=hidden -fno-rtti -g0 -Os -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64 -DV8_ATOMIC_OBJECT_FIELD_WRITES -DV8_ATOMIC_MARKING_STATE -DV8_ENABLE_LAZY_SOURCE_POSITIONS -DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH -DV8_SNAPSHOT_COMPRESSION -DV8_NO_ARGUMENTS_ADAPTOR -DDISABLE_UNTRUSTED_CODE_MITIGATIONS -DV8_TARGET_ARCH_ARM64 -flto -fsanitize-cfi-cross-dso -fsanitize-blacklist=external/compiler-rt/lib/cfi/cfi_blacklist.txt -fsanitize=cfi -fsanitize-trap=all -ftrap-function=abort -std=gnu++14 -fno-rtti -Isystem/core/include -Isystem/media/audio/include -Ihardware/libhardware/include -Ihardware/libhardware_legacy/include -Ihardware/ril/include -Iframeworks/native/include -Iframeworks/native/opengl/include -Iframeworks/av/include -isystem bionic/libc/include -isystem bionic/libc/kernel/uapi -isystem bionic/libc/kernel/uapi/asm-arm64 -isystem bionic/libc/kernel/android/scsi -isystem bionic/libc/kernel/android/uapi -Ilibnativehelper/include_jni -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -Werror=fortify-source -Werror=address-of-temporary -Werror=return-type -Wno-tautological-constant-compare -Wno-tautological-type-limit-compare -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-int-in-bool-context -Wno-sizeof-array-div -Wno-tautological-overlap-compare -Wno-deprecated-copy -Wno-range-loop-construct -Wno-misleading-indentation -Wno-zero-as-null-pointer-constant -Wno-deprecated-anon-enum-enum-conversion -Wno-deprecated-enum-enum-conversion -Wno-string-compare -Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-pessimizing-move -MD -MF out/soong/.intermediates/external/v8/v8_libbase/android_arm64_armv8-a_static_cfi_com.android.art.debug/obj/external/v8/src/base/platform/platform-macos.o.d -o out/soong/.intermediates/external/v8/v8_libbase/android_arm64_armv8-a_static_cfi_com.android.art.debug/obj/external/v8/src/base/platform/platform-macos.o external/v8/src/base/platform/platform-macos.cc
external/v8/src/base/platform/platform-macos.cc:9:10: fatal error: 'mach/mach_init.h' file not found
#include <mach/mach_init.h>
         ^~~~~~~~~~~~~~~~~~
1 error generated.
[ 50% 24333/48037] //bionic/libc:common_libc versioner preprocess include
warning: attempted to generate guard with empty availability: obsoleted = 21
warning: attempted to generate guard with empty availability: obsoleted = 23
[ 50% 24334/48037] //bionic/libc:libc.llndk versioner preprocess include
warning: attempted to generate guard with empty availability: obsoleted = 21
warning: attempted to generate guard with empty availability: obsoleted = 23
[ 50% 24335/48037] //bionic/libc:libc.llndk versioner preprocess include
warning: attempted to generate guard with empty availability: obsoleted = 21
warning: attempted to generate guard with empty availability: obsoleted = 23
10:33:54 ninja failed with: exit status 1

#### failed to build some targets (04:24 (mm:ss)) ####

2霉晕、問(wèn)題原因:
在incldue目錄下找不到指定的頭文件

3庭再、解決辦法:
這是最難頂?shù)囊粋€(gè)問(wèn)題捞奕,
Mac 系統(tǒng)的頭文件是有由Xcode 提供的,筆者已經(jīng)安裝了Xcode佩微,并配置了支持版本的SDK缝彬,在
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/mach目錄下也能找到此頭文件


頭文件

網(wǎng)上有教程提供了此問(wèn)題的解決辦法:
把MacOSX10.15.sdk/usr/include/目錄下的文件復(fù)制到 /Library/Developer/CommandLineTools/usr/include 目錄下,然后

export C_INCLUDE_PATH=/Users/xxx/Develop/mac_include/include

或者直接

export C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include

筆者嘗試了這兩種方法之后哺眯,均會(huì)報(bào)錯(cuò)谷浅,此問(wèn)題逐漸陷入無(wú)解的境地。

但是奶卓,網(wǎng)上一篇教程評(píng)論區(qū)的一條回復(fù)提醒了筆者:?jiǎn)栴}3一疯、4、5均為/externel/v8這個(gè)倉(cāng)內(nèi)的文件所引起夺姑,這個(gè)倉(cāng)最后的提交是:

commit dc02784c8323eab361da0fa9aaf796bfee98aee5 (HEAD, tag: android-11.0.0_r46, tag: android-11.0.0_r43, tag: android-11.0.0_r40, tag: android-11.0.0_r39, tag: android-11.0.0_r38, tag: m/android-11.0.0_r46, aosp/android11-qpr3-s1-release, aosp/android11-qpr3-release)
Merge: c35ae874 e11facc1
Author: android-build-team Robot <android-build-team-robot@google.com>
Date:   Tue Apr 6 22:04:22 2021 +0000

    Snap for 7262953 from e11facc1049b2a0c85e4f3e5ff214127851ddf2f to rvc-qpr3-release
    
    Change-Id: Iae0a5ef411ead7201768d5c574a4676142bf7968

commit e11facc1049b2a0c85e4f3e5ff214127851ddf2f
Merge: 2eab410d 2dc37779
Author: Cindy Zhou <zhouci@google.com>
Date:   Tue Apr 6 17:56:24 2021 +0000

    Update v8 cfi blocklist am: 2dc3777900
    
    Original change: https://googleplex-android-review.googlesource.com/c/platform/external/v8/+/13949411
    
    Change-Id: I4b8313c4d29464d13c66add8c2932aeb3655b868

其中有幾條提交值得注意:

commit 2eab410d1a22744d330b3a4565f26a52c1d1d8eb
Merge: de8ec0ef c509674b
Author: Rubin Xu <rubinxu@google.com>
Date:   Wed Mar 17 14:53:58 2021 +0000

    [automerger skipped] [DO NOT MERGE] Fix OSX builds for V8 am: 5658a66011 -s ours am: 05251a6458 -s ours am: 70ec779ad7 am: 655032cb7c -s ours am: c509674b68
    
    Original change: https://googleplex-android-review.googlesource.com/c/platform/external/v8/+/13799500
    
    Change-Id: I8b94be689a70a2e0590244117e4f9c4a84ff26cf

commit c509674b68584088c88dd2aa04cc0d3616ef116c
Merge: bb466bed 655032cb
Author: Rubin Xu <rubinxu@google.com>
Date:   Wed Mar 17 14:14:27 2021 +0000

    [automerger skipped] [DO NOT MERGE] Fix OSX builds for V8 am: 5658a66011 -s ours am: 05251a6458 -s ours am: 70ec779ad7 am: 655032cb7c -s ours
    
    am skip reason: subject contains skip directive
    
    Original change: https://googleplex-android-review.googlesource.com/c/platform/external/v8/+/13799500
    
    Change-Id: Id90137931ba6224330aa4f9fb7c40ccde7d75fa2

commit 655032cb7ca217b7395649185d202c37f7681f39
Merge: 2df4129b 70ec779a
Author: Rubin Xu <rubinxu@google.com>
Date:   Wed Mar 17 13:32:27 2021 +0000

    [automerger skipped] [DO NOT MERGE] Fix OSX builds for V8 am: 5658a66011 -s ours am: 05251a6458 -s ours am: 70ec779ad7
    
    Original change: https://googleplex-android-review.googlesource.com/c/platform/external/v8/+/13799500
    
    Change-Id: Iab9638c60ae6ba5364f304728c4e1602a1064744

可以看到墩邀,官方在2021年5月份時(shí)還在試圖修復(fù)此倉(cāng)在MacOS平臺(tái)編譯的問(wèn)題,但是前文也提到盏浙,從6月份開(kāi)始眉睹,官方就放棄維護(hù)了。因此筆者猜測(cè)废膘,此倉(cāng)在5月份之前的某些提交可能導(dǎo)致了MacOS平臺(tái)的編譯問(wèn)題竹海。

繼續(xù)尋找,發(fā)現(xiàn)有很多的提交是為了執(zhí)行操作Upgrade V8 to 8.8.278.14丐黄,例如

commit 9580a23bc5b8874a0979001d3595d027cbb68128
Author: Rubin Xu <rubinxu@google.com>
Date:   Tue Feb 16 09:38:50 2021 +0000

    Upgrade V8 to 8.8.278.14
    
    Bug: 162604069
    Bug: 167389063
    Test: gts-tradefed run gts-dev --module GtsGmscoreHostTestCases
          --test com.google.android.gts.devicepolicy.DeviceOwnerTest#testProxyPacProxyTest
    Test: m -j proxy_resolver_v8_unittest && adb sync && adb shell \
          /data/nativetest/proxy_resolver_v8_unittest/proxy_resolver_v8_unittest
    
    Merged-In: Ifb09923b9d7f6d8990fb062d7dc0294edf2c098e
    Change-Id: Ifb09923b9d7f6d8990fb062d7dc0294edf2c098e

于是筆者將此倉(cāng)直接回退到了2021年1月8日的版本:

cd external/v8
git reset --hard 55fc782bb8accc49ae3ed52e6856d55392e2a579

然后重新開(kāi)始編譯
至此斋配,編譯過(guò)程不再有源自v8倉(cāng)的報(bào)錯(cuò)產(chǎn)生,兩個(gè)平臺(tái)均完成了編譯:
其中Apple Silicon平臺(tái)耗時(shí)2小時(shí)23分鐘


Apple Silicon平臺(tái)

Intel平臺(tái)耗時(shí)3小時(shí)22分


Intel平臺(tái)

可以看到Apple Silicon平臺(tái)借助龐大的晶體管規(guī)模灌闺,編譯速度相比Intel平臺(tái)確實(shí)有一定提升艰争,但是這個(gè)提升并沒(méi)有想象中那么大。

參考鏈接

https://blog.csdn.net/dirksmaller/article/details/124977651
http://www.reibang.com/p/37f5f826b642
https://blog.csdn.net/w__y__q/article/details/121570143
https://51wlb.top/aosp/#%E9%97%AE%E9%A2%98%E4%B8%80%EF%BC%9ACould_not_find_a_supported_mac_sdk
https://blog.csdn.net/qq_34231329/article/details/125522049
http://events.jianshu.io/p/7971444b5359
http://www.reibang.com/p/5df66b910ce0

最后

筆者只是在macOS平臺(tái)嘗試了最簡(jiǎn)單的AOSP源碼編譯桂对,如果要將鏡像燒錄進(jìn)Pixel手機(jī)甩卓,還需要下載對(duì)應(yīng)機(jī)型的驅(qū)動(dòng)文件,整合進(jìn)源碼并編譯后才能燒錄
例如Pixel4對(duì)應(yīng)的驅(qū)動(dòng)


下載驅(qū)動(dòng)

至于修改了externel/v8倉(cāng)編譯出的鏡像蕉斜,在燒錄進(jìn)手機(jī)后是否會(huì)存在問(wèn)題逾柿,筆者已沒(méi)有更多的精力去嘗試。

回到開(kāi)頭的話蛛勉,為什么筆者不建議現(xiàn)階段在MacOS平臺(tái)編譯AOSP鹿寻。因?yàn)镸acOS平臺(tái)編譯AOSP存在的變量實(shí)在太多睦柴,芯片架構(gòu)诽凌、OS大小版本、SDK版本坦敌、系統(tǒng)庫(kù)路徑侣诵、Xcode痢法、AOSP版本等等,任何一項(xiàng)不匹配都會(huì)帶來(lái)大量的問(wèn)題杜顺。人的精力是有限的财搁,為什么要編譯AOSP,是否值得花這么多時(shí)間來(lái)解決編譯環(huán)境的問(wèn)題躬络,這是我們要思考的尖奔。筆者還是建議把有限的時(shí)間投入到最核心的工作中。所以后續(xù)編譯源碼和燒錄鏡像至手機(jī)的工作穷当,筆者會(huì)切換到Linux平臺(tái)進(jìn)行提茁。
以上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市馁菜,隨后出現(xiàn)的幾起案子茴扁,更是在濱河造成了極大的恐慌,老刑警劉巖汪疮,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峭火,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡智嚷,警方通過(guò)查閱死者的電腦和手機(jī)卖丸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纤勒,“玉大人坯苹,你說(shuō)我怎么就攤上這事∫√欤” “怎么了粹湃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)泉坐。 經(jīng)常有香客問(wèn)我为鳄,道長(zhǎng),這世上最難降的妖魔是什么腕让? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任孤钦,我火速辦了婚禮,結(jié)果婚禮上纯丸,老公的妹妹穿的比我還像新娘偏形。我一直安慰自己,他們只是感情好觉鼻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布俊扭。 她就那樣靜靜地躺著,像睡著了一般坠陈。 火紅的嫁衣襯著肌膚如雪萨惑。 梳的紋絲不亂的頭發(fā)上捐康,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音庸蔼,去河邊找鬼解总。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姐仅,可吹牛的內(nèi)容都是我干的花枫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掏膏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼乌昔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起壤追,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磕道,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后行冰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體溺蕉,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年悼做,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疯特。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肛走,死狀恐怖漓雅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朽色,我是刑警寧澤邻吞,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站葫男,受9級(jí)特大地震影響抱冷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梢褐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一旺遮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盈咳,春花似錦耿眉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春西傀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桶癣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拥褂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牙寞。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓饺鹃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親间雀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悔详,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容