编译Android源码并完成刷机

7,493 阅读4分钟

准备工作

1.VirtualBox,下载地址 www.virtualbox.org/wiki/Downlo… 我的版本是6.0.20。
2.Ubuntu18.04 下载地址 ubuntu.com/download/al… 我的版本是18.04LTS
3.Nexus 6P,你有新款的Google手机也可以,其他手机是不行的没有对应的驱动

  • 注意事项:最好给Ubuntu分配200G以上的磁盘空间,我电脑是16G内存给Ubuntu分配8G内存(内存太小编译可能不通过),我电脑CPU是i5-4590差一点,给Ubuntu分配4个处理器。磁盘大小分配了之后好像不能修改,内存和处理器数可以在关闭虚拟机在设置里面调整。

1. 下载 repo工具

  1. 安装git、openjdk-8、python等工具

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

    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 ccache libgl1-mesa-dev libxml2-utils xsltproc unzip  
    
  2. 配置repo

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

2. 下载源码

  1. 新建源码目录,进入源码目录
    mkdir aosp
    cd aosp

  2. 配置repo使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc最后面:
    1). 命令行通过gedit打开.bashrc文件 gedit ~/.bashrc
    2). 将export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/粘贴到最后
    3). 命令行输入source ~/.bashrc刷新环境变量

  3. 给git添加自己的邮箱和姓名:
    git config --global user.email "username@gmail.com"
    git config --global user.name "username"

  4. 初始化仓库:
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

  5. 初始化并指定版本,因为我是Nexus 6P手机,所以下载的Android必须支持Nexus 6P,对应关系查看地址: source.android.google.cn/setup/start…


因为我的手机是Nexus 6P,我这里选择的版本是android-7.1.1_r27,你可以根据自己的手机来选择对应的版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r27
6. 同步源码
repo sync

3.编译源码

经过漫长的等待我们同步完成源码,接下来编译:

  1. 如果android 6.0~8.1的,还的到源码根目录配置jack-admin
    1).查看病并且开启jack服务
    ./prebuilts/sdk/tools/jack-admin list-server
    prebuilts/sdk/tools/jack-admin start -server
    prebuilts/sdk/tools/jack-admin stop -server
    
    2). 如果命令不存在。则需要安装,如下命令:
    cd prebuilts/sdk/tools/
    ./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
    
    安装完成后,重新开启。
  2. 开始编译
    1). 脚本初始化环境: source build/envsetup.sh
    2). 删除上一次编译的结果,初次编译可以不需要这一步: make clobber
    3). 选择编译目标
    lunch
    
    会有以下信息输出:
    You're building on Linux
    
    Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. full_fugu-userdebug
     8. aosp_fugu-userdebug
     9. mini_emulator_arm64-userdebug
     10. m_e_arm-userdebug
     11. m_e_mips64-eng
     12. m_e_mips-userdebug
     13. mini_emulator_x86_64-userdebug
     14. mini_emulator_x86-userdebug
     15. aosp_dragon-userdebug
     16. aosp_dragon-eng
     17. aosp_marlin-userdebug
     18. aosp_sailfish-userdebug
     19. aosp_flounder-userdebug
     20. aosp_angler-userdebug
     21. aosp_bullhead-userdebug
     22. hikey-userdebug
     23. aosp_shamu-userdebug
    
    Which would you like? [aosp_arm-eng] 
    

意思就是要你选择编译目标的格式,编译目标的格式组成为BUILD-BUILDTYPE,比如aosp_arm-eng的BUILD为aosp_arm,BUILDTYPE为eng。

其中BUILD表示编译出的镜像可以运行在什么环境,aosp代表Android开源项目,arm表示系统是运行在arm架构的处理器上。 更多参考官方文档( source.android.google.cn/source/runn… )。 BUILDTYPE 指的是编译类型,有以下三种:

  • user:用来正式发布到市场的版本,权限受限,如没有 root 权限,不能 dedug,adb默认处于停用状态。
  • userdebug:在user版本的基础上开放了 root 权限和 debug 权限,adb默认处于启用状态。一般用于调试真机。
  • eng:开发工程师的版本,拥有最大的权限(root等),具有额外调试工具的开发配置。一般用于模拟器。 如果你没有Nexus设备,只想编译完后运行在模拟器查看,那么BUILD可以选择aosp_x86,BUILDTYPE选择eng,Which would you like? [aosp_arm-eng]后面直接输入对应序号5就可以。

我这里的手机是Nexus 6p查看对应表可以看到支持的格式是aosp_angler-userdebug,所以我输入20,回车.
4). 开始编译

make -j4

-jN根据自己的CPU核心来设置,等待编译完成,我电脑性能差编译花了差不多4个小时

5).最终会在源码跟目录out/target/product/angler目录下生成镜像文件:
* system.img:系统镜像
* ramdisk.img:根文件系统镜像
* userdata.img:用户数据镜像
* recovery.img:recovery镜像
* boot.img:启动镜像
* vendor.img:驱动镜像

4. 刷机

  1. 电脑连接手机,启动fastboot
    adb reboot bootloader

  2. 我的电脑在手机处于fastboot界面后VirtualBox与手机就连不上了,所以我把boot.img、system.img、recovery.img、vendor.img拷贝到windows上来,我们只刷这几个镜像文件。

  3. 手机已经解锁的跳过此步

    #对于新款设备(2015 年及之后发布的设备)
    fastboot flashing unlock
    
    #对于老款设备(2014 年及之前发布的设备)
    fastboot oem unlock
    
  4. 配置adb环境变量,或者到adb目录下执行命令

    fastboot flash system {system.img的路径}
    fastboot flash recovery {recovery.img的路径}
    fastboot flash boot {boot.img的路径}
    fastboot flash vendor {vendor.img的路径}
    

    重启手机完成刷机。

    参考连接:
    www.jianshu.com/p/4df53ed23…
    blog.csdn.net/qq_35460159…
    liuwangshu.cn/tags/AOSP基础…