一、前言
最近在研究Xposed框架定制,恰好又看到看雪上两个大佬关于源码定制和Xposed源码定制的帖子,所以尝试基于Android6.0版本,详细记录一下从源码下载到Xposed框架定制的全过程。
二、Android 源码下载
1.环境准备
实验平台: | *Ubuntu 16.0.4 * |
---|---|
运行内存: | (物理内存4G+交换内存8G) |
磁盘空间: | 300G |
(1)内存配置
我们首先给虚拟机分配一个物理内存4G 然后设置虚拟内存8G,开始实验之前记得快照,考虑到源码编译可能需要很大的内存,我们提前配置好交换内存
(1)在Home目录创建一个大小为8G的swap文件
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=8k
注:从 /dev/zero 文件读出内容并存到/swapfile文件中,块大小为1MByte,总共 16K 个块,也就是总共 8GB
(2)格式化新增的swap文件:
$ sudo mkswap /swapfile
(3)启动新增的swap文件
$ sudo swapon /swapfile
(4)通过free命令就可以看到,swap分区增大了8G
$ free
(5)关闭新增的swap文件
$ sudo swapoff /swapfile
再次通过free命令就可以看到,swap分区减小了8G
(6)开机后自动启动新增的swap文件,在/etc/fstab中新增如下命令
$ vim /etc/fstab
/swapfile none swap sw 0 3
(2)磁盘扩展
我们可以为虚拟机设置一个比较大的磁盘空间,但是如果你的虚拟机已经分配了一个磁盘空间,可能你需要扩展你的磁盘空间,这里可以详细参考磁盘空间扩展,去扩大你的虚拟机磁盘,这里最好保证自己的磁盘空间充足。
2.配置adb和fastboot
(1)下载platform-tools压缩包
我们到后面需要使用adb和fastboot,所以我们需要下载platform-tools资源包
然后我们解压到自己的目录
mkdir -p /home/user/Android
unzip platform-tools_r30.0.5-linux.zip -d /home/user/Android
(2)配置环境变量
我们配置环境变量
vim ~/.bashrc
添加:
#add Android Sdk platform tools to path
#add START
export ADB_PATH=/home/tom/Android/platform-tools
export PATH=$PATH:$ADB_PATH
#add END
激活环境:
source ~/.bashrc
我们可以测试一下配置:
(3)安装repo命令
创建必要目录,git-repo工具保存目录,这里需要保存在bin目录下,不然后面可能出问题
mkdir /home/tom/bin ##没有就创建
由于使用Google的repo源需要挂代理,所以我们使用清华的源repo源,无需挂代码就可以很快下载Android源码了
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /home/tom/bin/repo
cp repo ~/bin/
后面是对应的repo保存路径
设置权限:
chmod +x /home/tom/bin/repo
由于bin的环境变量已经配置过了,所以我们只需要去加入REPO_URL,来更新镜像源
配置环境变量:
vim ~/.bashrc
##在bashrc中添加
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
##激活环境变量
source ~/.bashrc
配置环境变量或下载repo失败时,注意一下空格,大部分是此原因导致的
(4)下载源码
从清华的镜像源官网上我们可以看见有两种方法:
<1>使用每月更新的初始化包
我们初始化代码仓库:
cd /home/tom/SourceCode/
我们下载初始包,我们需要下载最新的aosp-latest.tar文件以及对应的md5值,官方镜像网址
我们可以验证文件的完整性,进行MD5校验
md5sum aosp-latest.tar
下载完毕后可以使用tar -zxvf aosp-latest.jar指令解压该文件,解压出来文件夹名称为aosp,里面只有一个叫.repo的隐藏文件夹,该文件夹就是仓库,安卓源代码都在里面,可以使用CTRL+H来查看该隐藏文件夹
tar -zxvf aosp-latest.jar
然后我们只需要在目标文件夹下同步即可
repo sync
<2>传统的初始化方法
我们进入我们的目标文件夹