亲测编译成功,首先是下载,google官网能够下载当然是最好的,但是我们大多数不能下载,推荐使用清华大学的镜像站,网址如下
http://mirrors.tuna.tsinghua.edu.cn/
在AOSP中
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 WORKING_DIRECTORY
cd WORKING_DIRECTORY
3.初始化仓库:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
# 或 repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
注意如果你有更好的镜像地址直接修改就可以了。
4.如果需要某个特定的 Android 版本:对于版本名字参照镜像网站和官网
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r1
5.同步源码树(以后只需执行这条命令来同步):
repo sync
6.使用每月更新的初始化包
由于首次同步需要下载 37GB 数据,过程中任何网络故障都可能造成同步失败,因此你可以选择使用每月更新的初始化包。
首先到 http://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/ 选择合适自己的构建包,aosp-latest.tar.xz 经过了 xz 压缩, 相对 aosp-latest.tar 小一些,但是解压的时间也要考虑进来,27G的压缩包呢!(如果CPU核多可以使用pxz解压)
使用方法如下:
wget http://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
repo sync # 正常同步
我没有使用6这个方法,网络断了之后,直接退出来然后继续同步
安装JDK
首先用以下命令搜索JDK版本
apt-cache search openjdk
执行安装
sudo apt-get install openjdk-7-jdk
查看是否安装成功
java -version
3、配置java_home
直接运行
echo $JAVA_HOME
并不能看到输出。
设置:
echo export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/" >> ~/.bashrc
然后重启terminal或通过使用以下命令
source ~/.bashrc
此时重新输入echo $JAVA_HOME,就可以看到配置好的路径了
1.编译代码
首先在Android源代码目录下的build目录下,有个脚本文件envsetup.sh,执行这个脚本文件后,就可以获得一些有用的工具:
. ./build/envsetup.sh
lunch
选择一个版本,建议选择eng版本
开始编译
make -j8
编译完成后会有输出 在out目录下
2.编译完成之后编译sdk
sudo make PRODUCT-sdk-sdk
编译生成的SDK在out/host/linux-x86/SDK下。之后如果在ubuntu下使用eclipse进行开发,可以使用你编译的SDK。
注意!!!这里生成的文件一定要移出out目录,否则在单编时会删除(删除后只能重新编译SDK),相应的指向也变成你移动到的文件夹。
下面就在模拟器中运行镜像,建议切到root用户下,首先配置几个环境变量,将自己编译的SDK设为优先级最高,在源码根目录下
如何进入root目录以及如何设置密码:
首先设置密码
sudo passwd root
进入root:
su root
update-alternatives --install /usr/bin/AndroidSDK AndroidSDK /code/sdk/android-sdk_eng.root_linux-x86 255
需要注意的是/code 后面是我移动sdk生成的文件位置,不要照抄,并且确保路径正确,即sdk下面有这个android-sdk_eng.root_linux-x86文件
这样会在/etc/alternatives下生成一个指向该SDK目录的软连接AndroidSDK,这个目录主要存放一些系统默认打开的程序的信息和配置。那么/usr/bin/AndroidSDK就指向这个软连接。接着执行:
gedit ~/.bashrc
在文件末尾添加:
export ANDROID_SDK_HOME=/usr/bin/AndroidSDK
export PATH=$ ANDROID_SDK_HOME/tools:$PATH
export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
第三个ANDROID_PRODUCT_OUT的指向不要照抄,按照你的路径
接着就可以执行:
source ./build/envsetup.sh
与编译源码时执行的相同,作用也是相同的
lunch sdk-eng
emulator
单独编译(建议切换到root下面)
如果你不想编译整个系统,就想编译某一个应用程序,可以使用mmm命令,使用之前,在源码目录下先要执行:
build/envsetup.sh
这样会生成一些命令,有m即make、mm编译当前目录下所有模块、mmm编译指定目录下所有模块。你可以把packages/apps/Music应用的application name改成MyMusic(AndroidManifest.xml中),然后执行:
mmm packages/apps/Music
在out/target/product/generic/system/app中就可以看见Music.apk,然后执行:
make snod
重新生成system.img。
再次启动emulator。