美文网首页Android开发
Android源码编译烧录

Android源码编译烧录

作者: 猫咪不吃鱼 | 来源:发表于2021-06-23 10:30 被阅读0次

    编译环境/设备

    • ubuntu 20.04 LTS
    • openjdk 1.8
    • Pixel
    • Android版本:9.0
    sudo add-apt-repository ppa:openjdk-r/ppa
    sudo apt install openjdk-8-jdk
    
    
    • 编译依赖
    sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
    sudo apt-get install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
    sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install -y git-core gnupg zip curl zlib1g-dev gcc-multilib
    sudo apt-get install -y libc6-dev-i386 x11proto-core-dev libx11-dev
    sudo apt-get install -y unzip m4 lib32z-dev ccache libssl-dev
    sudo apt-get install -y lib32ncurses5-dev
    

    代码下载

    1. 安装初始化依赖工具
     sudo apt install curl python git
    
    1. 配置repo工具
    mkdir ~/bin
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    
    1. 修改repo默认源,通过国内镜像更新:在~/.bashrc文件里添加如下两行,保存退出,然后执行source ~/.bashrc更新环境变量
    PATH=~/bin:$PATH
    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
    
    1. 配置git信息
    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
    1. 初始化仓库
    mkdir AOSP
    cd AOSP
    repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
    
    1. 查看源码分支,选择其一下载
      初始化完成之后,使用 “ls -a” 命令查看所有隐藏文件,找到.repo,切换到.repo/manifests目录,执行 git branch -a 可以看到所有分支,再次执行 “repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b + 分支名” ,如选择9.0版本:
    repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-9.0.0_r46 --depth=1 --platform=auto
    
    1. 同步源码
    repo sync
    

    编译源码

    1. 初始化编译环境,切换到源码根路径下,执行如下命令:
    source build/envsetup.sh
    
    1. 选择编译目标,真机选项见 官方文档
    lunch aosp_arm64-eng
    
    1. 开始编译,可能等待数个小时
    make -j12
    
    1. 当出现如下字样时,编译成功
    #### build completed successfully ####
    

    启动模拟器

    如果中途关闭了终端,需要重新执行source build/envsetup.sh 和lunch命令才能启动模拟器

    emulator
    

    真机烧录

    这里我采用的真机是 Pixel 一代,目前这款手机可以一直升级到 Android 10,注意在选择真机的时候,一定要问清楚BootLoader是否可解锁!同时真机烧录之前,需要将对应设备的 驱动 一同编译进去,否则将设备将变成一块板砖!设备的驱动需要到 官网 上找对应的 手机型号Android 版本 的驱动!之后就可以开始编译安装了,过程比较简单,网上很多不再赘述,可参见 pixelXL 下载编译源代码刷机烧录记录

    1. 进入bootloader 模式并解锁
    adb reboot bootloader
    解锁手机:sudo fastboot flashing unlock
    
    1. 烧录系统之前,先双清一下
    sudo fastboot erase cache
    sudo fastboot erase userdatas
    
    1. 刷入系统镜像
    // 进入Android编译产生的文件 /out/target/product/sailfish 执行如下命令
    sudo fastboot flashall -w
    

    不过这里有一个问题,当我在执行这条命令时,会出现 error: ANDROID_PRODUCT_OUT not set 这样的错误,虽然我按着网上的教程配置了相关变量,但还是无济于事,于是我采用单个img烧录形式才成功:

    sudo fastboot flash boot_a boot.img
    sudo fastboot flash system_a system.img
    sudo fastboot flash system_b system_other.img
    sudo fastboot flash vendor vendor.img
    sudo fastboot flash userdata userdata.img
    
    1. 重启设备
     sudo fastboot reboot 
    

    Google底包镜像系统

    这里简单提一下怎么烧录Google官方的镜像底包,打开 镜像底包 链接,找到对应设备对应版本号系统镜像,下载之后解压,可以看到如下文件:

    图片.png

    Windows系统上运行 flash-all.bat ,Linux系统上运行flash-all.sh,不过这里如果直接运行可能会出问题,需要做如下修改:
    去掉最后一行命令中的 -w 变更如下:

    fastboot update image-sailfish-pq3a.190801.002.zip
    

    可能出现的问题

    1. 安装依赖冲突解决
      可能是apt的源版本不对,直接在网络上搜寻的apt源大多没有标明ubuntu版本,建议在清华大学镜像源上,选择对应版本的源:
    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    
    图片.png
    1. 找不到libncurses.so.5之类的库,可采用如下暴力手段:
    sudo apt-get install libncurses* 
    
    
    1. Running an x86 based Android Virtual Device (AVD) is 10x faster
    图片.png

    出现如上问题,意思是使用一个x86的模拟器比使用arm内核的要快10倍,建议换成内核为x86的模拟器,否则模拟器启动、运行都会比较慢,可能会等待几分钟才能启动

    相关文章

      网友评论

        本文标题:Android源码编译烧录

        本文链接:https://www.haomeiwen.com/subject/jsovyltx.html