<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          動(dòng)手編譯一個(gè)你自己的Android系統(tǒng)!

          共 7346字,需瀏覽 15分鐘

           ·

          2021-06-01 20:29

           微信改了推動(dòng)機(jī)制,真愛請(qǐng)星標(biāo)本公號(hào)
          公眾號(hào)回復(fù)加入BATcoder技術(shù)群BAT

          作者張彬666:

          https://www.jianshu.com/u/e94ea7ab2e19


          先上圖,其他的文檔有些不是很全,我這個(gè)我只能說(shuō)我現(xiàn)在刷機(jī)成功了,有圖有真相。我買的Pixel 一代歐版手機(jī) 歐版 歐版 歐版,刷的 android-10.0.0_r5 分支。下圖請(qǐng)忽略相機(jī)名稱(這個(gè)我自己修改的)和WiFi圖標(biāo)顯示圖標(biāo)顯示問(wèn)題,那個(gè)刷官方的ROM包WiFi圖標(biāo)也那樣,但是可以正常上網(wǎng)。


          硬件要求


          電腦


          內(nèi)存推薦16G,硬盤推薦150G以上,最好250G以上。我之前搞內(nèi)存4G的電腦編譯各種問(wèn)題換成16G一次成功,8G能不能編譯過(guò)我不知道。


          協(xié)程能輕量到什么程度?就算你在一個(gè)線程中創(chuàng)建1000個(gè)協(xié)程,也不會(huì)有什么影響。

          軟件要求

          Ubuntu下載


          Ubuntu系統(tǒng),谷歌建議的14.04坑太多,本人安裝的Ubuntu 20.04 LTS版的系統(tǒng)。Android源碼對(duì)Ubuntu版本是有要求的,6.0版本最低要求14.04版本,默認(rèn)網(wǎng)址下載就是LTS版本,個(gè)人推薦安裝15.04以上。


          JDK下載


          15.04版本及以上的JDK下載。


          sudo apt-get update
          sudo apt-get install openjdk-8-jdk


          14.04 版本的JDK下載,它沒(méi)有直接支持JDK 8版本。


          可以下載JDK8U45版本。


          sudo apt-get update
          cd Downloads                 到下載目錄,Downloads為默認(rèn)目錄
          sudo dpkg -i   openjdk-8-jdk_8u45-b14-1_amd64.deb
          解決缺少依賴項(xiàng)的問(wèn)題:sudo apt-get -f install


          安裝的時(shí)候可能會(huì)出現(xiàn)找不到deb文件 有同學(xué)說(shuō)強(qiáng)制安裝,我沒(méi)試過(guò)。


          sudo apt-get update
          cd Downloads                   到下載目錄
          sudo dpkg -i --ignore-depends=libxml2-utils  openjdk-8-jdk_8u45-b14-1_amd64.deb
          解決缺少依賴項(xiàng)的問(wèn)題:sudo apt-get -f install


          工具下載


          sudo apt install git
          sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
          sudo apt-get install python-dev
          sudo apt install adb

          下載代碼

          下載 repo 工具


          清華鏡像步驟如下所示:


          mkdir ~/bin 
          PATH=~/bin:$PATH 
          curl https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo > ~/bin/repo
          chmod a+x ~/bin/repo


          谷歌步驟如下所示:


          mkdir ~/bin 
          PATH=~/bin:$PATH 
          curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
          chmod a+x ~/bin/repo


          初始化名稱和郵箱


          mkdir Aosp     (名稱隨意,我這里叫Aosp)
          cd Aosp
          git config --global user.name "bin zhang" 
          git config --global user.email "[email protected]"


          初始化repo


          清華鏡像的(默認(rèn)下載master分支,后期也可以切換再下載)如下所示:


          repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
          或者
          repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r5


          谷歌的(默認(rèn)下載master分支,后期也可以切換再下載)如下所示:


          repo init -u https://android.googlesource.com/platform/manifest
          或者
          repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r5


          分支情況和對(duì)應(yīng)手機(jī),只截取一部分,這個(gè)太多了。



          下載并且輸出下載的日志


          repo sync -j4 2>&1 | tee sync_log.txt


          這里有時(shí)會(huì)掉線,建議寫一個(gè)shell腳本:


          fn_repo_sync()
          {
              repo sync -j8 2>&1 | tee sync_log.txt
          }
          fn_get_source_code()
          {
              echo "fn_get_source_code:$(pwd)"
              fn_repo_sync
              FETCH_ERROR=`grep -i "error: Exited sync" -A 1  sync_log.txt`
              echo  "${FETCH_ERROR}"
              while [ -n "${FETCH_ERROR}" ]
              do
                  echo "需要重新拉取代碼"
                  fn_repo_sync
                  FETCH_ERROR=`grep -i "error: Exited sync" -A 1  sync_log.txt`
              done
              echo "leave begin download source"
              #repo start ${DATE_TIME} --all
          }
          fn_get_source_code


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

          下載驅(qū)動(dòng)(專有的二進(jìn)制文件),官網(wǎng)地址這個(gè)時(shí)候細(xì)分版本那欄就用到了,先找到Pixel手機(jī),搜索QP1A.191005.007.A1 有幾個(gè)下載幾個(gè)。



          下載完成之后每個(gè)目錄里面有一個(gè)shell腳本,將兩個(gè)shell腳本放在Aosp 目錄下,chmod 777 XXX.sh 然后執(zhí)行 ./XXX.sh 先按一個(gè)回車,一直按回車只到出現(xiàn) I ACCEPT輸入這兩個(gè)單詞再回車,注意在第8條。


          編譯 Android


          關(guān)聯(lián)代碼


          方法一:


          source build/envsetup.sh 


          方法二:


           . build/envsetup.sh


          選擇手機(jī)型號(hào)


          lunch  aosp_sailfish-userdebug


          只截取一部分,這個(gè)也不少。



          編譯并且輸出日志


          make -j4 2>&1 | tee build.log   (電腦內(nèi)存高的可以16或者32,我用的16


          刷機(jī)


          打開OEM開關(guān)


          先點(diǎn)擊設(shè)置---關(guān)于手機(jī)----版本號(hào)七次---開發(fā)者選項(xiàng)---打開OEM解鎖(這步必須可以上網(wǎng),否則打不開)


          進(jìn)入bootloader頁(yè)面(使用方法1時(shí)必須安裝adb)。


          方法1如下所示:


          adb reboot bootloader 


          方法2如下所示:


          使用下圖的快捷鍵,我的手機(jī) Pixel  就是音量減鍵和電源鍵。下圖只貼了一部分手機(jī)機(jī)型。



          在源碼根目錄(我的項(xiàng)目Aosp目錄下)執(zhí)行,這步必須下載SDK,手機(jī)已經(jīng)解鎖的跳過(guò)此步。


          對(duì)于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備):


          fastboot flashing unlock


          對(duì)于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備):


          fastboot oem unlock


          配置adb和fastboot


          su root
          vim ~/.bashrc
          export ADB=/home/zhangbin/Android/Sdk/platform-tools
          export PATH=$ADB:$PATH 
          :wq       保存退出
          source ~/.bashrc

          adb version   確認(rèn)配置的目錄和顯示的一致
          fastboot  --version


          配置生成的out目錄,刷機(jī)


          export ANDROID_PRODUCT_OUT=/home/zhangbin/Aosp/out/target/product/sailfish
          cd Aosp/out/target/product/sailfish
          fastboot flashall -w 


          FAQ


          Question1:怎么重新關(guān)閉引導(dǎo)加載程序?


          Answer1:我能問(wèn)一下為什么要關(guān)閉,你后期使用還得開。車跑偏了哈,回答問(wèn)題。


          對(duì)于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備):


          fastboot flashing lock


          對(duì)于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備):


          fastboot oem lock


          Question2:mac電腦配置有哪些問(wèn)題?


          首先下載mac os 10.11sdk拷貝到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs,然后解壓。



          ·················END·················

          推薦閱讀

          ? 耗時(shí)2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!

          ? 『BATcoder』做了多年安卓還沒(méi)編譯過(guò)源碼?一個(gè)視頻帶你玩轉(zhuǎn)!

          ? 鴻蒙來(lái)了,拜拜了,Powered by Android!

          ? 重生!進(jìn)階三部曲第一部《Android進(jìn)階之光》第2版 出版!

          BATcoder技術(shù)群,讓一部分人先進(jìn)大廠

          大家,我是劉望舒,騰訊云最具價(jià)值專家TVP,著有暢銷書《Android進(jìn)階之光》《Android進(jìn)階解密》《Android進(jìn)階指北》,蟬聯(lián)四屆電子工業(yè)出版社年度優(yōu)秀作者,谷歌開發(fā)者社區(qū)特邀講師,國(guó)內(nèi)首批Android開發(fā)者,百度百科收錄的技術(shù)專家。

          前華為技術(shù)專家,現(xiàn)大廠技術(shù)負(fù)責(zé)人。


          想要加入 BATcoder技術(shù)群,公號(hào)回復(fù)BAT 即可。

          為了防止失聯(lián),歡迎關(guān)注我的小號(hào)


              
            微信改了推送機(jī)制,真愛請(qǐng)星標(biāo)本公號(hào)??
          瀏覽 107
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆久久成人 | 无码在线免费 | 无码伦理一区二区三区 | 大香蕉视频成人视频 | 三级电影网久久 |