Android源码和内核下载编译流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_19529589/article/details/80901130

原文地址:点击查看

概述

为了深入学习Android系统源码,我们需要下载Android官方的最新源码进行阅读学习,这篇文章我们来总结一下在Ubuntu系统中Android官方源码的下载和编译流程
通过本文可以了解:
  • Ubuntu系统中Android编译环境配置
  • 下载和编译Android源码
  • 下载和编译Android内核源码
  • 将Android源码导入Android Studio
注:本文基于Ubuntu14.04系统中Android Q代码下载编译流程

Ubuntu系统中Android编译环境配置

1.git安装

sudo apt-get install git
git config –global user.email “test@test.com”
git config –global user.name “test”

2.openjdk安装

# 在Ubuntu14.04中需要加入下面源,才能安装openjdk-8版本
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
# 如果是Ubuntu16.04或以上版本,直接安装即可
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
java -version
注:Android源码的编译必须使用openJdk

3.repo安装

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
repo的具体用法和介绍可查看Repo介绍

4.其他依赖库安装


# Ubuntu14.04
sudo apt-get install 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

# Ubuntu16.04
sudo apt-get install 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 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache

下载和编译Android源码

1.下载Android源码

由于国内访问不到Google,因此无法到Google官网下载Android源码,这里推荐到[清华大学开源镜像站](https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/)进行下载,推荐使用如下方式下载

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar # 解压
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

2.编译Android源码

source build/envsetup.sh # 初始化编译环境
lunch # 选择编译目标,运行lunch后出现所有目标,选择一个输入回车即可,这里使用模拟器运行选择aosp_x86_64-eng
make -j4 # 开始编译,后面的参数为编译使用CPU资源,普通电脑推荐用4核进行编译,编译输出目录为out

3.将编译好的系统运行到Android虚拟机中

emulator -partition-size 2048 # 运行虚拟机,指定内存为2G

下载和编译Android内核源码

1.下载内核代码

下面是官方下载地址以及git库的版本区别,国内下载还得使用清华源进行下载

git clone http://android.googlesource.com/kernel/common.git # 通用的Linux内核,后面6套都是以该源码为基础;
git clone http://android.googlesource.com/kernel/exynos.git # 用于使用三星Exynos芯片的Android设备,典型代表是Nexus 10;
git clone http://android.googlesource.com/kernel/goldfish.git # 用于Android模拟器的内核源码;
git clone http://android.googlesource.com/kernel/msm.git # 用于使用高通MSM芯片的Android设备,典型代表是ADP1(G1)、ADP2(G2)、Nexus One和Nexus  4;
git clone http://android.googlesource.com/kernel/omap.git # 用于使用德州仪器(TI)OMAP芯片Android设备,典型代表是PandaBoard和Galaxy Nexus;
git clone http://android.googlesource.com/kernel/samsung.git # 用于使用三星Hummingbird芯片的Android设备,典型代表是Nexus S;
git clone http://android.googlesource.com/kernel/tegra.git # 用于使用NVIDIA (Tefra)芯片Android设备,典型代表是Xoom和Nexus 7。
HTC手机可以在以下地址下载指定设备的Linux内核源码:
http://www.htcdev.com/devcenter/downloads

注:内核代码下载我们也使用[清华源](http://mirrors.ustc.edu.cn/aosp/kernel/),这里需要注意此网站下载速度较慢,因此使用下面命令较快,git库可根据需求进行替换,我下载了模拟器内核

git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git
cd goldfish
git branch -a
git checkout remotes/origin/android-goldfish-2.6.29

2.编译内核代码

配置交叉编译工具
sudo vim /etc/profile # 打开环境变量配置文件,配置交叉编译工具
export PATH=$PATH:~/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
配置makefile文件
cd goldfish
vim Makefile # 打开makefile文件找到并配置如下两个参数
    ARCH      ?=arm
    CROSS_COMPILE  ?=/home/user/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
arm-linux-androidkernel-
开始编译
make goldfish_defconfig # 生成配置文件
make # 编译命令
运行当前内核版本的模拟器
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage
# 查看内核版本
adb shell
cd proc
cat version
内核编译过程中如果出现Out of memory error错误,配置jdk内存重新编译即可
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server

将Android源码导入Android Studio

1.修改AS的配置

因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms和-Xmx的值。README文档中使用的是748m。
较新版本的AS中自带SDK,然后第一次用的时候新的SDK会下载Build Tool 等,大约需要2.25G空间。不想下载的话可以找到android-studio/bin目录下的idea.properties文件,在最后添加一行disable.android.first.run=true,然后再启动AS就好了,然后进去手动配置SDK位置。
(注:每次升级后这些配置都会恢复默认。但SDK不用重新配置)

2.编译生成导入AS所需配置文件(*.ipr)

为了成功将源码导入AS,我们需要先生成AS可是别的项目工程配置文件
在源码根目录依次执行如下命令
source build/ensetup.sh
make idegen && development/tools/idegen/idegen.sh
等待编译完成之后会出现类似下面的结果:
这时会在源码的根目录下生成android.ipr,android.iws和android.iml三个文件
生成的文件包括:
①android.iws 包含工作区的个人设置,比如打开过的文件,版本控制工具的配置,本地修改历史,运行和debug的配置等。
②android.ipr 一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等。
③android.iml 用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。
之后我们在AS中打开源码根目录下新生成的android.ipr

注:第一次打开源码后会进行代码扫描,我这里用了大概4个小时左右,在此期间查看代码比较卡,待扫描完毕,就可以享受流畅的代码跳转和查看了
展开阅读全文

没有更多推荐了,返回首页