《深入解析Android5.0系统》 一书笔记
在开始研究Android系统之前,我们要准备好一些开发的资料,比如Ubuntu,源码,开发资料等,Android系统本身来说,非常的庞大,应用使用的是JAVA语言,底层使用C/C++,所以,如果条件允许的话,尽可能的多掌握一些吧。
一.Ubuntu
我们更多的可能会选择 Window + Ubuntu 来进行工作,所以我们会比较依赖虚拟机,在我之前的博客中已经有介绍了,这里不会重复介绍
Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置
Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境
Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名
Android源码浅析(六)——SecureCRT远程连接Linux,配置端点和字节码
这里我选择的是最新的Ubuntu 17.10.1 算是尝尝鲜吧。
紧接着,我们需要安装一些必要的工具,比如git,vim之类的,我们来看下命令
sudo apt-get install git
sudo apt-get install vim
sudo apt-get install repo
sudo apt-get install curl
sudo apt-get install make
到这里,我们的准备工作算是可以了,我们现在需要准备一些开发工具
二.开发工具
我们需要安装一下便利于我们开发的东西,比如JDK
1.JDK
我这里安装的是JDK1.7,在哪里下载的话,自己官网或者其他地方随便搜索以下就出来了
//解压
sudo tar zxvf jdk-7u79-linux-x64.tar.gz
//移动
sudo mv jdk1.7.0_79 /usr/lib/jdk/
//配置
vim ~/.bashrc
//末尾处
export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_79
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
2.OpenJDK
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
3.Android Studio/SDK
下载下来解压,然后自动安装SDK即可,前提是有JDK
4.Source Insight
Source Insight是个神器,可以很方便的搜索,查找源码中的内容
三.下载源码
PS:参考 Google 教程 https://source.android.com/source/downloading.html, 将 https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替即可。
在国内想要下载一份源码,实际上并不是那么容易的….
这里我们通过清华大学的源去下载
1.下载repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
这里的代码应该很好理解吧,创建一个bin的文件夹来指定这个文件夹是PATH,然后去下载repo,并且给予权限
2.同步源码
mkdir Aosp
cd Aosp
//repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
//指定版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.0.0_r1
repo sync
正常来讲,我们上面的命令,是创建一个Aosp的文件夹然后init初始化后直接去同步代码的,但是我们实际操作过程中,会碰到几个小问题
- a.repo sync 没有反应
这个可能是最开始curl repo的时候repo有问题,我们可以进入bin目录下
vim repo
看下你的repo脚本里有没有内容,如果没有的话,需要参考
按照上面的提示,首先在你的bin目录下
//删除原先的无用repo
rm -rf repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
- b.无法连接源
这里要注意下,repo的运行过程中会尝试访问官方的git源更新自己
如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
注意重启或者刷新终端,这样我们就可以继续init了
到这里,我们就可以repo sync 来同步这份源码了。
在这里说一下,就是在sync过程中碰到的一些错误
这个错误:
error: Exited sync due to fetch errors
可以参考 When running repo sync error: Exited sync due to fetch errors
输入
repo sync -f -j8
即可解决
碰到的第二个问题
RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function
这是由于git默认缓存大小不足导致的,使用下面的命令增加缓存大小
git config --global http.postBuffer 2000000000
碰到的第三个问题
Cannot fetch platform/packages/apps/OMA-DM
据说很多人下载Android5.0的源码的时候都碰到了这个问题
我的解决是
在进入 .repo目录下的xml配置文件中注释掉这一行
终于,漫长的N个小时过去了,这份5.0的AOSP源码也下载下来了,不过我们还需要去下载一样东西,那就是kernel
四.下载Kernel
内核我们需要单独的去下载,并且每个厂家的都不一样,所以都会有些差异的,具体可参考这篇博客:
我使用的是google 自己手机的tegra的内核
cd device/asus/grouper/
//查看记录
git log kernel
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/tegra.git
cd tegra/
git checkout 5d8ecd2
五.源码编译
事实上编译才是重头戏,因为很多问题都会出现,我们需要一步步的来排查,首先我们来看下编译源码的步骤
source build/envsetup.sh
//选择编译目标版本
lunch
//多线程编译
make -j8
这里我选择的是aosp_x86-eng
但是在编译过程中,会出现很多问题,我这里并没有去编译,因为我只是去看源码,主要还是一个个去解,再写出来很麻烦,所以我想下次编译的时候专门写一篇。
本篇文章先写到这里,下篇我们来学习下Build环境
PS:有兴趣的朋友可以加群讨论下:484167109