博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己动手编译Android(LineageOS)源码
阅读量:4338 次
发布时间:2019-06-07

本文共 3248 字,大约阅读时间需要 10 分钟。

准备

  • 设备:红米3s
  • 设备代号:land
  • Android版本:7.1.1
  • 源码提供:Lineage
  • PC配置:
    • 系统:Ubuntu16.04 x64
    • 至少12G RAM
    • 至少80GB 剩余硬盘空间
    • 良好的网络环境

1.下载并解压SDK

sdk中包含fastboot和adb

下载
解压
unzip platform-tools-latest-linux.zip -d ~

添加到环境变量

gedit ~/.profile

输入:

# add Android SDK platform tools to pathif [ -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 libesd0-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

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

安装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 existsif [ -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 cm-14.1

× 注:这里下载的是lineageOS的源码,cm-14.1是分支名。更多分支请浏览:

4.下载源码

repo sync

5.配置源码

cd ~/android/lineage

加入vendor源

gedit .repo/local_manifests/roomservice.xml

加入:

<project name="TheMuppets/proprietary_vendor_xiaomi" path="vendor/xiaomi" remote="github" revision="cm-14.1" />
× 注:其中name是远程项目的路径;path是本地目录的路径;revision是分支名(具体分支请看:)

更新源码

repo sync

配置构建环境

source build/envsetup.sh

配置设备信息

breakfast land

6.配置构建工具

配置ccache

gedit ~/.bashrc

加入:

export USE_CCACHE=1

保存。

使改动生效:

source ~/.bashrc

执行:

ccache -M 50G
× 注:ccache默认在home目录,请确保home目录有足够的空间。如果想自定义ccache的目录,可以在~/.bashrc文件里加入export CCACHE_DIR=<路径>

配置jack

gedit ~/.bashrc
加入:
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"

保存。

使改动生效:

source ~/.bashrc

7. 构建

构建整个源码

croot

brunch land

× 注:在源码目录执行cd $OUT进入编译好的ROM的存放目录。lineage-14.1-xxxxxxxx-UNOFFICIAL-land.zip为编译好的刷机包。

只构建某个模块

mmm <模块名>

例如构建frameworks中的base

mmm frameworks/base

打包成system.img

有时候我们只修改system模块里不需要编译的文件,没必要重新编译,只需要打包system.img

make snod

编译system

有时候我们只修改system里的代码,没必要编译整个Android源码,只需要编译system.img

make systemimage

编译Linux内核

有时候我们只修改内核里的代码,没必要编译整个Android源码,只需要编译boot.img

make bootimage

8.刷入手机(可选)

下载twrp

刷入trwp

在开机状态下,打开USB调试。而且设备要先解锁bootloader。

adb reboot bootloader

fastboot flash recovery twrp.img

fastboot reboot

刷入system.img

我们调试系统源码时,如果不想刷入整个ROM,可以只刷入system.img

fastboot flash system $OUT/system.img

× 注:$OUT指向system.img生成目录

刷入内核

我们调试内核源码时,如果不想刷入整个ROM,可以只刷入boot.img
fastboot flash boot $OUT/boot.img

刷入ROM

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

9.常见问题

adb命令提示没有权限

lsusb

找到类似一行:

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

编辑51-android.rules:

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

输入:

SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev"

×注:idVendor,idProduct分别为lsusb命令显示的ID

更改文件权限:

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

提示Out of space? the tree size of...

在device目录下找到BoardConfig.mk文件,将其中BOARD_xxxx_PARTITION_SIZE字段后面的值调大点

10.参考

转载于:https://www.cnblogs.com/luoyesiqiu/p/10701419.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-05熔断降级服务异常报警通知
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-08 断路器监控仪表参数
查看>>
UI基础--烟花动画
查看>>