• 自己动手编译Android(LineageOS)源码


    一、编译LineageOS源码

    准备

    • 设备:小米 MIX2
    • 设备代号:chiron
    • Android版本:9.0
    • PC配置:
      • 系统:Ubuntu18.04
      • 至少12G RAM
      • 至少200GB 剩余硬盘空间
      • 良好的网络环境

    1.下载并解压SDK

    sdk中包含fastboot和adb

    下载

    wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip

    解压

    unzip platform-tools-latest-linux.zip -d ~

    添加到环境变量

    gedit ~/.profile

    输入:

    # add Android SDK platform tools to path
    if [ -d "$HOME/platform-tools" ] ; then
        PATH="$HOME/platform-tools:$PATH"
    fi
    

    保存。

    使改动生效:

    source ~/.profile

    2.安装依赖

    安装必要库和工具

    sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

    安装openjdk-8-jdk

    sudo apt install -y openjdk-8-jdk

    3.配置源

    创建repo存放目录

    mkdir -p ~/bin

    创建源码存放目录

    mkdir -p ~/android/lineage

    × 注:请确保该目录所在的磁盘有足够的空间(至少200G)

    安装repo

    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

    chmod a+x ~/bin/repo

    ~/bin放入环境变量

    gedit ~/.profile

    加入:

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    使改动生效:
    source ~/.profile

    初始化repo

    cd ~/android/lineage

    repo init -u https://github.com/LineageOS/android.git -b lineage-16.0

    × 注:这里的lineage-16.0是分支名,对应Android 9.0。更多分支请浏览:https://github.com/LineageOS/android

    4.拉取源码

    repo sync

    5.配置源码

    cd device/xiaomi

    git clone https://github.com/LineageOS/android_device_xiaomi_chiron -b lineage-16.0 chiron

    提取vendor信息

    提取手机厂商的库。这一步将手机连接电脑,并保证手机能被adb
    命令操控,还需要手机授予adb root权限。

    adb shell su -c setenforce 0

    cd chiron

    ./extract-files.sh

    提取需要点时间,需耐心等待

    拉取kernel

    cd kernel/qcom

    git clone https://github.com/LineageOS/android_kernel_qcom_msm8998 -b lineage-16.0 msm8998

    配置构建环境

    source build/envsetup.sh

    配置设备信息

    breakfast chiron

    6.配置构建工具

    配置ccache

    gedit ~/.bashrc

    加入:

    export USE_CCACHE=1

    使改动生效:

    source ~/.bashrc

    执行:

    ccache -M 50G

    来设置缓存大小

    × 注:ccache默认在home目录,请确保home目录有足够的空间。如果想自定义ccache的目录,可以在~/.bashrc文件里加入export CCACHE_DIR=/path/to/.ccache。缓存大小根据自己硬盘大小设置,设置25G以上可以显著提高源码的构建速度。

    配置jack

    gedit ~/.bashrc

    加入:

    export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8G"

    使改动生效:

    source ~/.bashrc

    7. 构建

    构建整个源码

    croot

    brunch chiron

    × 注:构建成功后,在源码目录执行cd $OUT进入编译好的ROM的存放目录。lineage-16.0-xxxxxxxx-UNOFFICIAL-chiron.zip为编译好的刷机包。

    只构建某个模块

    mmm <模块名>

    例如构建frameworks中的base

    mmm frameworks/base

    打包成system.img

    有时候我们只修改system里的模块,没必要编译整个源码,就只打包system.img

    make snod

    编译system

    make systemimage

    8.刷入手机(可选)

    下载twrp

    https://dl.twrp.me/chiron/

    刷入trwp

    刷入recovery前,要先解锁手机的bootloader,如何解锁,各个厂商不太一样,这里就不阐述了。

    adb reboot bootloader

    fastboot flash recovery twrp.img

    fastboot reboot

    刷入system.img

    我们调试源码时,如果不想刷入整个ROM,可以只刷入system.img。以下命令将system.img刷入system分区

    fastboot flash system system.img

    刷入ROM

    将编译好的刷机包,通过adb push命令将刷机包传输到手机存储。进入twrp界面,擦除system分区,data分区。选择手机存储中的刷机包,刷入!!!

    9.常见问题

    (1) 编译目标设备为emulatorx86时在编译时出错,提示yasm找不到。

    安装yasm

    sudo apt-get install yasm

    (2) adb命令提示没有权限

    lsusb

    找到类似一行:

    Bus 001 Device 005: ID 18d1:4ee7 Google Inc.

    编辑51-android.rules:

    sudo gedit /etc/udev/rules.d/51-android.rules

    输入类似的内容:

    # MIX2 normal
    SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev"
    # MIX2 fastboot
    SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="d00d",MODE="0666",GROUP="plugdev"
    

    ×注:idVendor,idProduct分别为lsusb命令显示的ID。开机状态和fastboot模式都需要添加权限,所以,需要增加两行。

    更改文件权限:

    sudo chmod a+r /etc/udev/rules.d/51-android.rules

    二、模拟器使用LineageOS

    将emulator所在的目录加入环境变量

    在源码目录,cd $OUT

    设置模拟器路径

    # 设置模拟器目录
    if [ -d "/android_source_path/prebuilts/android-emulator/linux-x86_64" ] ; then
        PATH="/android_source_path/prebuilts/android-emulator/linux-x86_64:$PATH"
    fi
    

    设置OUT目录

    export ANDROID_PRODUCT_OUT=/android_source_path/out/target/product/emulatorx86

    使用编译好的镜像启动(arm):

    emulator64-arm -kernel ./prebuilts/qemu-kernel/arm64/kernel-qemu -sysdir $ANDROID_PRODUCT_OUT -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img

    使用编译好的镜像启动(x86):

    emulator64-x86 -kernel ./prebuilts/qemu-kernel/x86/kernel-qemu -sysdir $ANDROID_PRODUCT_OUT -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img

    参考

  • 相关阅读:
    ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
    ASP.NET Core 中文文档 第四章 MVC(3.1)视图概述
    ASP.NET Core 中文文档 第四章 MVC(2.3)格式化响应数据
    ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
    ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
    ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
    mysql 解除正在死锁的状态
    基于原生JS的jsonp方法的实现
    HTML 如何显示英文单、双引号
    win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)
  • 原文地址:https://www.cnblogs.com/luoyesiqiu/p/10701419.html
Copyright © 2020-2023  润新知