第四章

源代码的下载和编译

1.1下载,编译和测试Android源代码

Android源代码包含内嵌在Android系统中的应用程序的源代码,Android SDK带的各种工具的源代码和Android NDK的源代码

1.1.1配置Android源代码下载环境

1.创建一个用于存放下载脚本文件(repo)的目录

#mkdir ~/bin

#PATH=-/bin:$PATH

2.下载repo脚本文件

#curl http://dl-ssl.google.com/dl/googlesource/git-repo>~/bin/repo

#chmod a+x ~/bin/repo

3.创建用于存放Android源代码的目录

#mkdir android_source

#cd android_source

4.初始化

#repo init –u http://android. googlesource.com/platform/manifest

# repo init –u http://android. googlesource.com/platform/manifest –b android-4.0.1_r1

5.开始下载Android源代码

#repo sync

1.1.2Android源代码目录结构解析

包括abi,bionic,bootable,build,cts,dalvik,development,device,docs,external,ndk等等目录名

1.1.3下载Android源代码中的一部分

方法一:使用repo sync命令

#repo sync platform/bootable/recovery

# repo sync platform/packages/apps/Camera

方法二:使用git clone命令

#git clone http://android. googlesource.com/<project name>

#git clone http://android. googlesource.com/ platform/bootable/recovery

1.1.4编译Android源代码

1.初始化编译环境

#source build/envsetup.sh

#.build/envsetup.sh

//例如,编译Calendar工程

#cd /working/android2.3.4_sre

#source build/envsetup.sh

#cd packages/apps/Calculator

#mm

2.选择目标

#lunch full-eng

3.编译Android源代码

#make

#make –j4

1.1.5out目录结构分析

out目录是存放编译Android源代码生成的目标文件的默认目录。

out目录中有两个直接子目录:host 和 target

out/host目录,主要是一些编译过程中需要的一些库和工具

out/target目录包含common 和 product

1.1.6将自己的APK作为Android内置程序发布

为了测试system.img文件,可以将一个自己生成的apk程序嵌入system.img文件中,这样在测试system.img文件时这个apk程序就和其他原生的应用程序一样出现在应用程序列表中,而且该程序无法卸载(除非获取root权限,并直接将apk文件删除)。

1.1.7用模拟器测试system.img文件

生成system.img文件需要一个mkyaffs2image命令行工具。该命令行工具可以将system目录打包成system.img文件。

#mkyaffs2image system system.img                          //重新生成system.img文件

#emulator –avd myavd –system system.img –data userdata.img//使用模拟器测试刚生成的system.img文件

1.2下载和编译Linux内核源代码

1.2.1下载Linux内核源代码

#git clone http://android. googlesource.com/kernel/common.git //下载最新的linux内核源代码

#git branch –a                                          //查看当前在哪个远程版本库

#git checkout –b android-3.0 remotes/origin/android-3.0//导出linux3.0的内核

#git clone http://android. googlesource.com/kernel/goldfish.git  //下载Google为Android模拟器提供的linux内核

#git checkout –b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29//进入goldfish目录,导出goldfish

1.2.2Linux内核源代码的目录结构

1.2.3安装Android内核的编译环境

交叉编译器:指在A架构的CPU上编译可在B架构CPU上运行的程序。

原因:交叉编译器无法在目标平台上安装或者目标平台性能较低,所以不得已才在性能较高,限制较少的平台上进行编译。

做法:在Makefile文件中找到ARCH 和CROSS_COMPILE并设置变量

        ARCH    ?=arm

        CROSS_COMPILE?=arm-none-linux-gnueabi-

      1.准备工作

       arm-linux-gcc-4.3.2.tgz   arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2

2.解压编译器

#tar zxvf arm-linux-gcc-4.3.2.tgz –C

#tar jxvf arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2 -C

3.验证交叉编译器是否安装成功

#ls /usr/local/arm –L

4.安装libncurses5

#apt-get install libncurses5 -dev

1.2.4配置和编译Linux内核

1.编译内核

#export PATH=/root/compilers/arm-none-linux-gnueabl/bin:$PATH

#cd ~/linux_kernel

#make clean

#make

2.安装QT

apt-get install libqt4-dev

3.在Android模拟器中测试linux内核

emulator –avd myavd –kernel /root/kernel/goldfish/arch/arm/boot/zImage

原文地址:https://www.cnblogs.com/yajuan2013/p/5445858.html