Android 7.1 源码下载编译 (Ubuntu 14.0.4 环境下)

时间:2022-09-27 15:14:04

一 .安装git ,设置git 的邮箱和用户名:

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

二.源码下载:
1.下载安装repo

mkdir ~/bin
PATH=~/bin
:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

2.创建源码文件夹。

mkdir source
cd source

3.初始化代码库

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r22

根据自己的需要修改后面Android 版本号

(AOSP项目当前所有的分支列表参看:版本列表)
4.同步代码库

repo sync

三.构建编译环境
1.安装jdk
android 7.1需要的是openjdk8

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

如果已经安装过openjdk7,需要切换jdk版本

sudo update-alternatives --config java
sudo update-alternatives --config javac

2.其它依赖
命令一行一行的执行。

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

四.源码编译
1.初始化编译环境

source build/envsetup.sh

2.选择编译目标

lunch aosp_arm64-eng

也可以先执行lunch命令,控制台会输出所有的编译目标,输入相应的数字即可

3.开始编译

make -j4

期间可能出现错误可自行百度解决。如果一切顺利的化,在几个小时之后,便可以编译完成.看到### make completed successfully (01:18:45(hh:mm:ss)) ###表示你编译成功了.

4.运行编译后源码镜像

emulator

等一会就会出现模拟器了。

五.模块编译

除了通过make命令编译可以整个android源码外,Google也为我们提供了相应的命令来支持单独模块的编译.

编译环境初始化(即执行source build/envsetup.sh)之后,我们可以得到一些有用的指令,除了上边用到的lunch,还有以下:

  - croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.

其中mmm指令就是用来编译指定目录.通常来说,每个目录只包含一个模块.比如这里我们要编译Launcher2模块,执行指令:

mmm packages/apps/Launcher2/

稍等一会之后,如果提示:make completed success fully 即表示编译完成,此时在out/target/product/gereric/system/app就可以看到编译的Launcher2.apk文件了.

重新打包系统镜像
编译好指定模块后,如果我们想要将该模块对应的apk集成到系统镜像中,需要借助make snod指令重新打包系统镜像,这样我们新生成的system.img中就包含了刚才编译的Launcher2模块了.重启模拟器之后生效.

单独安装模块
我们在不断的修改某些模块,总不能每次编译完成后都要重新打包system.img,然后重启手机吧?有没有什么简单的方法呢?
在编译完后,借助adb install命令直接将生成的apk文件安装到设备上即可,相比使用make snod,会节省很多事件.

补充
我们简单的来介绍out/target/product/generic/system目录下的常用目录:
Android系统自带的apk文件都在out/target/product/generic/system/apk目录下;
一些可执行文件(比如C编译的执行),放在out/target/product/generic/system/bin目录下;
动态链接库放在out/target/product/generic/system/lib目录下;
硬件抽象层文件都放在out/targer/product/generic/system/lib/hw目录下.

Android 自带的emulator 有时会有没有模拟键,adb连接不上等问题,建议大家可以使用Android Studio的模拟器,有几个注意点:
1.我们编译的是aosp_arm64-eng ,所以Android Studio 创建AVD时要选择arm的,不要选x86.
2.把自己编译好的(路径在out/target/product/generic/下)system.img,
userdate.img ,ramdisk.img拷贝到 Android Studio SDK所在目录下的system-images/android-25/google_apis/arm64-v84/下,替换掉原有的文件,运行之前创建的AVD即可,等几分钟就可以看到自己百编译的系统了。

参考博客http://blog.csdn.net/dd864140130/article/details/51718187