因为之前没编译过android源码,make时各种错误让我痛苦了好几天的时间。。。
1.到oracle的官网上下载1.6的JDK(切记一定要是1.6的,其他版本的会出错;如果你的ubuntu是64位的选择x64的版本,32位的就选择i586版本的JDK)
2.下载android源码,这里我用repo下载了几次都没有成功,所以用了网上别人下好的4.4源码,再此感谢
3.硬件环境:
3.1.硬盘容量:因为安装ubuntu12.04时是在win7下用wubi装的双系统,所以ubuntu12.04最大的虚拟硬盘只有30G(这肯定不够我们编译源码的),最好有80G以上的硬盘。辛好还有一个800G的磁盘设备,我们将它挂载到ubuntu下让终端可以访问它:
先用fdisk -l查看硬盘信息,然后sudo mount /dev/sda5 /mnt/sda5,修改/etc/fstab文件:加入/dev/sda5 /mnt/sda5 ntfs auto 0 0 ,重新启动发现挂载成功
将我们android4.4的源码移动到该挂载的磁盘上解压缩,编译前大概有9G的大小,此后我们将在这块磁盘上编译我们的源码
PS:源码目录不要有中文,不然make时会出错
3.2内存:系统最好要有8G以上的物理内存,不然make时会提示出错,具体是什么错误忘记了
4.安装JDK(我下载的是jdk-6u38-linux-x86.bin):
sudo mkdir /usr/local/java
切换到jdk-6u38-linux-x86.bin目录下
sudo mv jdk-6u38-linux-x86.bin /usr/local/java
cd /usr/local/java
sudo chmod 755 jdk-6u38-linux-x86.bin --修改权限为可执行
sudo sh jdk-6u38-linux-x86.bin --执行jdk.bin,生成目录jdk1.6.0_38
5.设置jdk的环境变量:
sudo vim /etc/profile --在/etc/profile 中添加环境变量会使所有的用户都受到影响,如果不同的用户想要用不同的jdk就不要在/etc/profile上设置了
在末尾添加上:
#for java_environment
export JAVA_HOME=/usr/local/java/jdk1.6.0_38
export JRE_HOME=/usr/local/java/jdk1.6.0_38/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
保存退出,重启系统
ctrl+alt+T,输入java -version,可以看到
就说明jdk安装成功了
6.安装编译android源码时需要用到的工具链(由前辈们总结出来):
sudo apt-get install git git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown
sudo apt-get install libxml2-utils xsltproc gcc-multilib lib32readline5-dev
装好上述的工具链后你会发现make时基本很顺利
7.准备好上面的步骤后可以开始编译源码了:
切换到android4.4的目录
source build/envsetup.sh
make -jn(n由你的电脑决定,2核的是4,4核的是8,我用的-j4,发现make时快了很多)
这个时间应该会很久,可以去看场电影了,回来发现
生成system.img就说明编译成功了,编译后的源码有35G左右
8启动模拟器:
source build/envsetup.sh
lunch full-eng
emulator ---如果你不先lunch一下的话会提示你系统没有emulator这个命令
成功!!!
接下来是kernel的编译:
PS:编译sdk时将system.img自动删除了,不能运行模拟器了,艹,只能重新编译内核,辛好之前有编译过有经验编译起来不难(重新编译后文件大小没有增加,还是原来的大小) 1.下载goldfish内核: goldfish版本:3.4(来源:网盘,试了从网址下载不行), 解压 2. 在Android4.4目录下创建一个kernel文件夹,将解压后的goldfish放在kernel文件夹下 通过终端进入解压后的goldfish文件夹,运行export PATH=$PATH:/mnt/sda5/Android4.4/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin
3.
修改
goldfish-android-goldfish-3.4
目录下的
Makefile
文件:
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
#
上面注释掉,加入下面的
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
4.
在
goldfish-android-goldfish-3.4
目录下如下命令:
$ make goldfish_armv7_defconfig
在
goldfish-android-goldfish-3.4
目录执行
make
命令:
$make
编译成功 PS:
在android4.4kernel目录下make时,出现错误make:arm-eabi-gcc:命令未找到解决方法:配置环境变量时一定要在当前的编译内核的终端标签页内对环境变量进行配置,在其他标签页或者终端中是不行的。
1、sudo gedit /etc/profile
2、在文件末尾加入arm-eabi-gcc编译器的bin目录保存退出,如果该目录下没有,那你需要自己去下载arm-eabi-gcc编译器,并将整个路径替换为你机器上对应的路径。不过正常情况下安卓源码中应该是有该编译器的。
exportPATH=$PATH:/你的安卓源码目录/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin
如果该路经已存在,1、2步可省略。
3、su切换到root权限
4、source/etc/profile
5、make
成功解决!!!
参考:http://www.jianshu.com/p/6d97b4a10b18