说明
 菜鸡尝试编译aosp源码,手中有一台n5x,专门用来折腾。之前刷了fart镜像,好奇制作过程,所以自己来捣鼓一下。原先想用r0env编译,有个依赖过不去(太菜了)还是自己搞个虚拟机吧*。*,把坑又踩了一遍。
 
 编译环境
 虚拟机
虚拟机这里选择vmware16 pro,破解版请自行查找
 
 
 
   
 
 iso
iso这里选择ubuntu20,因为ubuntu的镜像小。试过centos7结果操作过程崩了T。T
镜像下载:
 
  
  # 镜像md5
ca0c7f1cf362eef25f54f6cd61c5fdba *ubuntu-20.04.4-desktop-amd64.iso
 
 
 
 
   
 
 Ubuntu配置如下,内存可开到12G,10G可以编译但还会有卡顿,并且安装过程中请立即分配磁盘,避免后面磁盘大小问题:
 
 
 编译步骤
  
  - 安装jdk,加入环境
   
    
     
      | 
        1
        
        2
        
        3
        
        4
        
        5
        
        6
        
        7
        | 
        
         apt-get install openjdk-8-jdk  
         
         
         vim ~/.bashrc 
         
         
         export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64   
         export PATH=$JAVA_HOME/bin:$PATH  
         source ~/.bashrc |  
 
- 安装依赖, 提示没有python,就apt install python - 
    
     - 
      | 
        1
        | 
        
         apt-get install git-core gnupg flex bison gperf build-essential zipcurl 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 |  
 
- 下载 repo 工具 - 
    
     - 
      | 
        1
        
        2
        
        3
        
        4
        
        5
        
        6
        
        7
        
        8
        
        9
        
        10
        | 
        
         
         
         mkdir ~/bin 
         PATH=~/bin:$PATH  
         curl https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo > ~/bin/repo 
         chmod a+x ~/bin/repo 
         
         
         vim ~/.bashrc 
         在文件末尾加入 
         export PATH=~/bin:$PATH 
         source ~/.bashrc |  
 
- 选择磁盘空间大的建立源码下载文件夹,如果磁盘不够请自行扩展磁盘和挂载文件夹
  
  
 - 
    
     - 
      | 
        1
        
        2
        | 
        
         mkdir -p data/aosp/android-8.1.0_r20 
         cd data/asop/android-8.1.0_r20 |  
 
- 初始化git,repo;初始化repo中应查询清楚编译出来的镜像是否适配手中的手机
 
  
 - 
    
     - 
      | 
        1
        
        2
        
        3
        
        4
        
        5
        
        6
        | 
        
         
         
         git config --globaluser.name "***" 
         git config --globaluser.email "you@example.com" 
         
         
         export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' 
         repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.1.0_r20 |  
 
- 下载源码, 过程很长,请耐性等待 - 
    
     - 
      | 
        1
        
        2
        
        3
        | 
        
         repo sync -j1 
         
         
         repo sync --current-branch |  
 - 
    
     - 
      | 
        1
        
        2
        
        3
        
        4
        
        5
        
        6
        
        7
        
        8
        
        9
        
        10
        
        11
        
        12
        
        13
        
        14
        
        15
        
        16
        
        17
        
        18
        
        19
        
        20
        
        21
        | 
        
         
         
         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 1sync_log.txt` 
          echo  "${FETCH_ERROR}" 
          while[ -n "${FETCH_ERROR}"] 
          do 
              echo "Need to pull the code again" 
              fn_repo_sync 
              FETCH_ERROR=`grep -i "error: Exited sync"-A 1sync_log.txt` 
          done 
          echo "leave begin download source" 
           
         } 
         fn_get_source_code |  
 
- 下载驱动 -  
    - 下载源码对应版本驱动并解压放入源码根目录:
  
  
 
- 依次执行刚解压的shell文件(别enter的太急),每个文件执行都需要在最后输入 “I AGREE”,所以谨慎enter(坑人)。 -  
      - 下载源码后并执行完成驱动文件后的项目根目录:
  
 
- make clobber:删除所有以前编译操作的已有输出,如果编译过单项重新编译就执行这条命令 
 
- 编译
 选择设备编译系统:
  
 - 
    
     - 
      | 
        1
        
        2
        
        3
        
        4
        
        5
        
        6
        
        7
        
        8
        
        9
        
        10
        | 
        
         
         
         source build/envsetup.sh  
         
         
         lunch aosp_hammerhead-userdebug 
         
         
         export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH 
         export LC_ALL=C  
         ulimit -c unlimited      
         
         
         make -j8 |  
 
- 编译完成 -  
    - 编译完成后的镜像在out文件夹下
  
 
刷机
  
  - 配置镜像环境变量 - 
    
     - 
      | 
        1
        | 
        
         export ANDROID_PRODUCT_OUT=/root/data/android-8.1.0_r20/out/target/product/bullhead |  
 
- 进入fastboot模式  
 
- 开始刷机
 如果遇到这个错误“error: Cannot generate image for userdata”,请删除 -w执行
 
- 刷机结束,等待手机重启
  
  
 
遇见问题
  
  - 在编译步骤中出现错误最多的可能在下载源码和编译过程中
    
    - 下载源码的错误多为源的问题,选择国内源即可
- 编译过程中的错误多为环境和版本的问题。环境依赖需要安装齐全,并且查漏补缺把环境补全;并且手机型号,源码,驱动以及设备编译系统都要一致,不可错乱,以免变砖=。=
 
 
  - 在刷机中的问题一般比较简单,一般把oem锁打开刷机即可成功,如有问题可自行搜索
小结
 这次编译本想周末搞完,没想到搞了一个礼拜(踩坑*N),中间还差点手机变砖T。T到总算编译刷机成功。对于fart镜像将相应的代码替换源码编译应该就可以了(还没试)。关于过root检测等系统级别的操作在 编译步骤-8 之前做出修改再编译也应是同理。在网上也有其他编译的文章,但多多少少都有点出入,写完这篇文章,根据步骤自己是可以编译和刷机成功的,但如果还有出入,需自行甄别实现。(手机变砖概不负责)
加油,少年。。。
 
 相关文章
  
  
   
     
 
 
 
更多【2022记录一次编译aosp并刷机n5x】相关视频教程:www.yxfzedu.com