环境说明
系统ubuntu 14.04 x64
手机谷歌N5
下载源码
配置repo工具环境安装repo
apt-get install -y curl git
mkdir -p ~/bin/
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod ax ~/bin/repo
ln -s ~/bin/repo /bin/repo
设置镜像地址
#在~/.bashrc末尾添加
export REPO_URLhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
下载源码
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.1.1_r14
repo sync
安装依赖
# 安装openjdk7
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install -y openjdk-7-jdk
# 安装相关依赖
sudo apt-get install -y git-core 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
开始编译初始化环境变量
cd ${AOSP_DIR}
source ./build/envsetup.sh
加入驱动程序(此处假设当前目录为AOSP目录)
在《Driver Binaries for Nexus and Pixel Devices》找到自己手机对应的驱动并下载到${AOSP_DIR}目录下。
此处我们找到Nexus 5 (GSM/LTE) binaries for Android 5.1.1 (LMY48M)下的三个驱动。
释放驱动文件
将第二步得到的三个驱动文件压缩包解压得到三个sh文件然后分别执行三个sh文件。
选择编译版本
lunch
注意nexus对应的版本是aosp_hammerhead_userdebug
设置swap交换分区(由于编译需要大量的交换分区此处设置4096)
# (count的值等于1024 x 你想要的文件大小, 8192000是8G1024000是1G)
dd if/dev/zero of/opt/swap bs1024 count8192000
# 创建swap文件
mkswap /opt/swap
swapon /opt/swap
为了使每次开机时都能正常使用swap文件所以这里需要把swap文件增加到fstab文件中。修改/etc/fstab在最后一行增加如下内容
/opt/swap swap swap defaults 0 0
开始编译
make
刷入机器
假设我们当前目录是AOSP手机已经连上并且已经处于bootloader模式。可以按照下面的命令执行
# 1. 进入out/target/product/hammerhead目录
cd out/target/product/hammerhead
# 2. 进行双清
fastboot format cache
fastboot format userdata
# 刷入所有image
env ANDROID_PRODUCT_OUTpwd fastboot flashall -w
env ANDROID_PRODUCT_OUTpwd fastboot flashall -w表示刷入所有image。也可以分别单个刷入image
fastboot flash recovery recovery.img
fastboot flash boot boot.img
fastboot flash cache.img
fastboot flash system system.img
fastboot flash userdata userdata.img
配置一些环境变量方便开发
在~/.bashrc的末尾添加
export AOSP_ROOT/usr/local/aosp
export PATH$PATH:${AOSP_ROOT}/out/host/linux-x86/bin
用Android Sutdio打开AOSP
cd development/tools/idegen/
mm -B
cd ../../../
development/tools/idegen/idegen.sh
执行成功后就可以用Android Sutdio打开在AOSP根目录下的android.ipr文件。
此处还有个细节需要将项目依赖中原来的JAVA依赖删掉否则将出现错误引用转跳。
常见问题如何切换分支
在工作目录再执行
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.1.1_r14
repo sync
其中-b后面的参数为分支版本(Android 版本列表)。
repo sync经常卡住不动
这是由于BUG吧由于网络原因导致请ctrl c结束掉重新执行repo sync。
快速生成image
# 生成system.img
make snod
# 生成boot.img
make bootimage-nodeps
此处只是根据out已经编译好的文件进行打包并不进行编译。
系统存在多个JAVA环境版本的时候jdk版本切换
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javah
sudo update-alternatives --config javap
sudo update-alternatives --config javadoc
如果安装了多个orical-java环境请先到/etc/profile.d/文件夹下把jdk.*相关文件删掉。
如何查看分支
cd .repo/manifests
git branch
查看所有分支
cd .repo/manifests
git branch -a
切换本地分支
repo init -b android-6.0.1_r63
repo sync
关闭SELINUX
编辑device/lge/hammerhead/BoardConfig.mk文件。BOARD_KERNEL_CMDLINE下面加上如下语句。
BOARD_KERNEL_CMDLINE : androidboot.selinuxpermissive
参考资料