編譯安卓系統(tǒng)9.0源碼

1. 準(zhǔn)備環(huán)境

  • PC
    • 系統(tǒng):Mac OSX 10.14.4 (18E226)
    • 至少250GB固態(tài)硬盤
    • JDK 1.8.0_171
    • Xcode 10 SDK
    • Android SDK
  • Mobile
    • 設(shè)備: Google Pixel

2. 配置環(huán)境

  • 2.1 創(chuàng)建大小寫敏感的磁盤鏡像

    
    # 可以通過磁盤管理工具進(jìn)行設(shè)置贴捡,也可以通過以下命令生成250g的鏡像文件
    $ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 250g -volname android android.dmg
    
    android.dmg 表示當(dāng)前目錄下生成android.dmg.sparseimage
    
    
  • 2.2 將鏡像文件轉(zhuǎn)為可讀寫磁盤

    
    # 稍微會(huì)等一會(huì)培遵,我的移動(dòng)硬盤
    # 已耗時(shí): 6m 10.512s
    # 速度:414.6M 字節(jié)/秒
    $ hdiutil convert android.dmg.sparseimage -format UDRW -o android.dmg
    
    

    PS: 創(chuàng)建鏡像的目的是方便移動(dòng),大文件移動(dòng)挺快酵紫。無(wú)所謂的可以直接在大小寫敏感的硬盤(磁盤管理工具格式化為大小寫敏感)上直接操作扒最,省去這一步丑勤。

    
    # 查詢當(dāng)前目錄所在分區(qū)的分區(qū)是否大小寫敏感
    $ diskutil info . | grep Name
    
    

3.下載源碼

  • 3.1 下載repo工具并且給這個(gè)工具可執(zhí)行權(quán)限

    
    $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo -O repo & chmod +x repo
    
    
  • 3.2 源碼地址

    
    # 推薦使用清華大學(xué)TUNA鏡像源,使用每月更新的初始化包進(jìn)行下載更新吧趣。具體步驟請(qǐng)看
    
    https://mirror.tuna.tsinghua.edu.cn/help/AOSP/
    
    
  • 3.3 同步分支android-9.0.0_r36源碼法竞,需要獲取所有源碼可以先repo sync,然后再切換分支(我獲取的所有源碼强挫,編譯+源碼總共200GB)

    
    # 查看可切換的分支 
    $ cd .repo/manifests 
    $ git branch -a | cut -d / -f 3 
    # 切換到9.0分支
    $ repo init -b android-9.0.0_r36
    # long time ..., 報(bào)錯(cuò)繼續(xù)repo sync
    $ repo sync
    # 直到顯示下面內(nèi)容岔霸,即為同步完成
    Syncing work tree:100%,done.
    
    
    • 同步源碼報(bào)錯(cuò),其他依賴環(huán)境貌似我這之前裝過俯渤,沒遇到其他錯(cuò)誤
    
    warning: gpg (GnuPG) is not available.
    warning: Installing it is strongly encouraged.
    # 解決方法:
    $ brew install gpg
    
    

4. 編譯源碼

  • 4.1 首先進(jìn)入bash環(huán)境

    
    $ bash
    
    
  • 4.2 初始化編譯環(huán)境

    
    bash-5.0$ source build/envsetup.sh
    including device/generic/car/vendorsetup.sh
    including device/generic/mini-emulator-arm64/vendorsetup.sh
    including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
    including device/generic/mini-emulator-mips/vendorsetup.sh
    including device/generic/mini-emulator-mips64/vendorsetup.sh
    including device/generic/mini-emulator-x86/vendorsetup.sh
    including device/generic/mini-emulator-x86_64/vendorsetup.sh
    including device/generic/uml/vendorsetup.sh
    including device/google/crosshatch/vendorsetup.sh
    including device/google/cuttlefish/vendorsetup.sh
    including device/google/marlin/vendorsetup.sh
    including device/google/muskie/vendorsetup.sh
    including device/google/taimen/vendorsetup.sh
    including device/linaro/hikey/vendorsetup.sh
    including sdk/bash_completion/adb.bash
    
    
  • 4.3 配置編譯信息
    訪問https://developers.google.com/android/images得到對(duì)應(yīng)設(shè)備的combo名稱呆细,這里Pixel對(duì)應(yīng)sailfish

    這里執(zhí)行lunch后輸入45,或者輸入aosp_sailfish-userdebug

    
    $ lunch
    You're building on Darwin
    
    Lunch menu... pick a combo: 
       ...
       45. aosp_sailfish-userdebug
       ...
    Which would you like? [aosp_arm-eng] 45
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=9
    TARGET_PRODUCT=aosp_sailfish
    TARGET_BUILD_VARIANT=userdebug
    TARGET_BUILD_TYPE=release
    TARGET_ARCH=arm64
    TARGET_ARCH_VARIANT=armv8-a
    TARGET_CPU_VARIANT=kryo
    TARGET_2ND_ARCH=arm
    TARGET_2ND_ARCH_VARIANT=armv8-a
    TARGET_2ND_CPU_VARIANT=kryo
    HOST_ARCH=x86_64
    HOST_2ND_ARCH=x86
    HOST_OS=darwin
    HOST_OS_EXTRA=Darwin-18.5.0-x86_64-10.14.4
    HOST_BUILD_TYPE=release
    BUILD_ID=PQ3A.190505.001
    OUT_DIR=out
    ============================================
    
    

BUILD_ID=PQ3A.190505.001
這里提前把BUILD_ID對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)下載好八匠,訪問https://developers.google.com/android/drivers得到Pixel binaries for Android 9.0.0 (PQ3A.190505.001)的兩個(gè)驅(qū)動(dòng)絮爷,解壓后放入源碼目錄下解壓诡曙。解壓后再執(zhí)行對(duì)應(yīng)的sh腳本即可。(用于編譯好源碼后略水,線刷安卓系統(tǒng)到Pixel手機(jī)上价卤。)

PS: 執(zhí)行shell腳本時(shí)需要同意協(xié)議,^ + c 快捷鍵可以快速跳過協(xié)議閱讀渊涝,直接彈出同意協(xié)議輸入位置慎璧。

  • 4.4 開始構(gòu)建

    • 腳本(ccache.sh)
    
     #!/usr/bin/env bash 
     export USE_CCACHE=1 #開啟CCACHE。此配置可以提高二次全編譯的速度跨释⌒厮剑可以添加到.bashrc文件中,
     export CCACHE_DIR=./.ccache #設(shè)置緩存目錄的路徑鳖谈。也可以添加到.bashrc文件中岁疼,
     # prebuilts/misc/linux-x86/ccache/ccache -M 50G #設(shè)置緩存目錄的大小。這個(gè)配置一次即可缆娃。
     prebuilts/misc/darwin-x86/ccache/ccache -M 50G #設(shè)置緩存目錄的大小捷绒。這個(gè)配置一次即可。
    
    
    
    # 啟動(dòng)ccache緩存
    $ sh ccache.sh
    # 開40個(gè)線程編譯贯要,等待編譯完成
    $ make -j40 
    
    
  • 遇到的報(bào)錯(cuò)

    
    # 找不到j(luò)dk暖侨,這個(gè)在根目錄的.bash_profile文件中添加
    
    

    解決方法:
    export ANDROID_JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home

    
     # 報(bào)錯(cuò)找不到對(duì)應(yīng)的MacOSX.sdk,比如找不到MacOSX10.13.sdk
    ============================================
    [1/1] out/soong/.minibootstrap/minibp out/soong/.bootstrap/build.ninja
    [55/56] glob prebuilts/ndk/stl.bp
    [77/77] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
    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 -o out/soong/build.ninja Android.bp
    internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13"]
    ninja: build stopped: subcommand failed.
    11:57:25 soong bootstrap failed with: exit status 1
    
    #### failed to build some targets (16 seconds) ####
    
    

    解決方法:下載Mac OSX SDK,Clone下來復(fù)制MacOSX10.13.sdk到目錄/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs下(我測(cè)試的10.13版本崇渗,其他版本自測(cè))

    
      # 報(bào)錯(cuò)sdm710 target not found
    [1/1] out/soong/.minibootstrap/minibp out/soong/.bootstrap/build.ninja
    FAILED: out/soong/.bootstrap/build.ninja
    out/soong/.minibootstrap/minibp -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/.bootstrap/build.ninja.d -o out/soong/.bootstrap/build.ninja Android.bp
    internal error: could not open symlink hardware/qcom/sdm710/Android.bp; its target (display/os_pickup.bp) cannot be opened
    ninja: build stopped: subcommand failed.
    11:02:11 soong minibootstrap failed with: exit status 1
    
    #### failed to build some targets (1 seconds) ####
    
    

    解決方法:git clone 該鏈接的目錄文件到hardware/qcom/sdm710目錄下(全部clone)
    https://android.googlesource.com/platform/hardware/qcom/sdm710/

  • 4.5 編譯完成
    #### build completed successfully (25 seconds) ####

5. 修改源碼

  • 5.1 去掉wifi感嘆號(hào)

    
    // 去掉感嘆號(hào)
    // 進(jìn)入文件夾
    // /Volumes/sandisk/aosp/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
    // 修改地址鏈接為如下
        // private static final String DEFAULT_HTTPS_URL     = "https://www.google.com/generate_204";
        private static final String DEFAULT_HTTPS_URL     = "https://www.qualcomm.cn/generate_204";
        private static final String DEFAULT_HTTP_URL      =
                // "http://connectivitycheck.gstatic.com/generate_204";
                "http://www.qualcomm.cn/generate_204";
        // private static final String DEFAULT_FALLBACK_URL  = "http://www.google.com/gen_204";
        private static final String DEFAULT_FALLBACK_URL  = "http://www.qualcomm.cn/generate_204";
        private static final String DEFAULT_OTHER_FALLBACK_URLS =
                // "http://play.googleapis.com/generate_204";
                "http://www.qualcomm.cn/generate_204";
    
    
  • 5.2 默認(rèn)adb為root

    ro.secure=0即可

    
    /Volumes/sandisk/aosp/build/make/core/main.mk
    
    ## user/userdebug ##
    
    user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
    enable_target_debugging := true
    tags_to_install :=
    ifneq (,$(user_variant))
      # Target is secure in user builds.
      ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
      ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=1
    
      ifeq ($(user_variant),user)
        ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0
      endif
    
      ifeq ($(user_variant),userdebug)
        # Pick up some extra useful tools
        tags_to_install += debug
      else
        # Disable debugging in plain user builds.
        enable_target_debugging :=
      endif
    
      # Disallow mock locations by default for user builds
      ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1
    
    else # !user_variant
      # Turn on checkjni for non-user builds.
      ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1
      # Set device insecure for non-user builds.
      ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
      # Allow mock locations by default for non user builds
      ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1
    endif # !user_variant
    
    
  • 5.3 修改默認(rèn)輸入法(參考其他文章)

    /Volumes/sandisk/aosp/frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加如下內(nèi)容:

    
    <string name="def_default_input_method" translatable="false">com.google.android.inputmethod.pinyin/.PinyinIME</string>
    <string name="def_enabled_input_methods" translatable="false">com.google.android.inputmethod.pinyin/.PinyinIME</string>
    
    

    /Volumes/sandisk/aosp/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java方法內(nèi)添加如下內(nèi)容:

    
    loadStringSetting(stmt, Secure.ENABLED_INPUT_METHODS,
                        R.string.def_default_input_method);
    
    

    /Volumes/sandisk/aosp/packages/apps/創(chuàng)建GoogleInput文件夾字逗,進(jìn)入GoogleInput創(chuàng)建Android.mk文件,添加如下內(nèi)容:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := GoogleInput
    LOCAL_MODULE_TAGS := optional
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_CERTIFICATE := PRESIGNED
    include $(BUILD_PREBUILT)
    LOCAL_MULTILIB := 64
    
    

    將GoogleInput.apk放入該目錄下

    build/make/target/product/core.mk文件中修改如下:

    PRODUCT_PACKAGES += \
    移除Latin \
    末尾新增GoogleInput
    

    編譯模塊:

    
    # 編譯系統(tǒng)鏡像
    $ mmm packages/apps/GoogleInput/
    $ make snod
    
    
  • 5.4 修改系統(tǒng)名稱

    修改/device/google/marlin/aosp_sailfish.mk文件內(nèi)容為:

    
    PRODUCT_MODEL := Pixel
    
    

    編譯模塊:

    
    # 編譯系統(tǒng)鏡像
    $ mmm packages/apps/GoogleInput/
    $ make snod
    
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宅广,一起剝皮案震驚了整個(gè)濱河市葫掉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跟狱,老刑警劉巖俭厚,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異兽肤,居然都是意外死亡套腹,警方通過查閱死者的電腦和手機(jī)绪抛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門资铡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幢码,你說我怎么就攤上這事笤休。” “怎么了症副?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵店雅,是天一觀的道長(zhǎng)政基。 經(jīng)常有香客問我,道長(zhǎng)闹啦,這世上最難降的妖魔是什么沮明? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮窍奋,結(jié)果婚禮上荐健,老公的妹妹穿的比我還像新娘。我一直安慰自己琳袄,他們只是感情好江场,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窖逗,像睡著了一般址否。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碎紊,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天佑附,我揣著相機(jī)與錄音,去河邊找鬼仗考。 笑死帮匾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痴鳄。 我是一名探鬼主播瘟斜,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痪寻!你這毒婦竟也來了螺句?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤橡类,失蹤者是張志新(化名)和其女友劉穎蛇尚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顾画,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡取劫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了研侣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱邪。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖庶诡,靈堂內(nèi)的尸體忽然破棺而出惦银,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布扯俱,位于F島的核電站书蚪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏迅栅。R本人自食惡果不足惜殊校,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望读存。 院中可真熱鬧箩艺,春花似錦、人聲如沸宪萄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拜英。三九已至静汤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間居凶,已是汗流浹背虫给。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侠碧,地道東北人抹估。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像弄兜,于是被迫代替她去往敵國(guó)和親药蜻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

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