说明下面文章经过博主在ubuntu12.04 64位编译过android4.4.4_r1+android4.4.4_r2+android4.0.3_r6+android2.3_x+android5.1.1_r6+android5.1.1_r12这些版本均成功,希望对大家有帮助
一、安装ubuntu
http://www.ubuntu.org.cn/index_kylin 挑选一个版本,怎么安装就不啰嗦了,补充一点千万要大一点,反正大了也不占实际空间,等下空间小就又要重装系统了,编译一个版本准备100G吧,编译2个版本的内核就准备200G吧,编译过程不用害怕,出错了就百度,然后用apt-get安装需要的软件就行,我这里选择Ubuntu12.04 desktop 64位,用的是vwmare虚拟机
1. 常用命令
给予root权限
Sudo或者sudo –s或者root权限
如果你是下载的是别人丢网上的android源码压缩文件可以用下面的解压
解压 命令
.tar.gz 格式解压为 tar –zxvf xx.tar.gz
.tar.bz2 格式解压为 tar –jxvf xx.tar.bz2
安装7z:apt-get install p7zip-full
使用7z:7z x file file是要解压的文件名
2.用root的权限登录(议设置,用root登录,方便后续操作)
对于Ubuntu12.04 desktop 64位系统
执行: gedit /etc/lightdm/lightdm.conf修改配置文件
[SeatDefaults]
allow-guest=false
autologin-user=root
autologin-user-timeout=0 #0秒就登录
autologin-session=lightdm-autologin
user-session=ubuntu
greeter-session=unity-greeter
然后我们启动root帐号:打开中断输入
sudo passwd root
根据提示输入root帐号密码。
重启ubuntu,不需要手动输入root用户名密码,系统会自动进入root用户。
二、安装jdk
必须安装jdk1.6,注意你用的ubuntu是64位的就安装64位的jdk,如果用32位的就安装32位的jdk,我这里用64位的
1. 把jdk-6u35-linux-x64.bin放到/usr/lib/java目录下,并且修改成777权限
2. 运行./jdk-6u35-linux-x64.bin
3. 配置环境变量
Gedit /etc/environment
JAVAHOME=/usr/lib/java/jdk1.6.0_35 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/java/jdk1.6.0_35/bin:/usr/lib/java/jdk1.6.0_35/jre/bin" CLASSPATH=/usr/lib/java/jdk1.6.0_35/lib:/usr/lib/java/jdk1.6.0_35/jre/lib
4. 执行命令,使配置生效
source /etc/environment ( source /home/username/.bashrc )
验证是否安装成功,中断输入
Java –version,
Javac
java
三、对于ubuntu12.04 64位desktop版编译android4.0.3和android4.4.4配置和编译过程
1、ubuntu环境变量详解
用户环境变量通常被存储在下面的文件中:
· ~/.profile
· ~/.bash_profile 或者 ~./bash_login
· ~/.bashrc
上述文件在Ubuntu 10.0以前版本不推荐使用。
系统环境变量一般保存在下面的文件中:
· /etc/environment
· /etc/profile
· /etc/bash.bashrc
/etc/profile和 /etc/bash.bashrc在Ubuntu 10.0版本中不推荐使用。
(1)修改办法1
/etc/environment改了之后 使他立即生效source /etc/environment 这个不行啊每次打开终端都要输入一次,你还是重启电脑吧,重启电脑就永久生效了
(2)修改办法2
用编辑器打开/etc/profile,然后加入
export JAVA_HOME=/usr/java/jdk1.7.0_04
exportPATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
然后输入 source /etc/profile使其生效,不行就重启
(3)临时导入
source build/envsetup.sh 临时导入sh的环境变量到系统环境变量中
2、安装编译过程中需要的软件
建议安装完这些软件,看下面5出错解决办法里面需要安装的软件和配置,还请也安装上,免得中途出问题,又要安装,,当然也可以跟我一样,等会儿出错了,再去安装
sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev
sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential
sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libslibncurses5-dev
3、下载android源码
使用
apt-get install curl 先安装curl
apt-get install git 安装git
curl"http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo">/bin/repo
这样在/bin目录下面有一个repo文件了,repo是google提供的用来专门下载源码的脚本
chmod a+x repo
mkdir my_down_android_core 千万别用中文目录,注意”桌面”也是中文啊,别丢桌面,桌面也是中文目录,等下编译会报错
cd my_down_android_core
repo init -u https://android.googlesource.com/platform/manifest
好等一会儿会让你输入姓名和邮箱的,输入就是了
自己去这里https://android.googlesource.com/platform/manifest/+refs挑选一个喜欢的版本吧然后
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1
repo sync 如果网络不稳定有可能会中断,中断以后你继续repo sync就行了
如果出现fatal: '../platform/abi/cpp.git' does not appear to be a gitrepository”错误则
1、在存放android系统源代码的目录(也就是执行repo sync命令的目录)下,有个.repo的隐藏目录,用ls -a可以查看的到,进入该目录:cd.repo;
2、打开.repo目录下的manifest.xml文件(命令vimmanifest.xml)并找到fetch属性,在我的文件中显示fetch="..",将fetch修改为fetch="git://Android.git.linaro.org/",保存并退出;
3、继续repo sync就可以下载了。
4、编译配置
cd到你下载的源码目录 (注意第二次编译前要make clean)
source build/envsetup.sh
lunch
然后选择编译的平台 1
make –jn(n建议用cpu核心的2倍,不知道自己电脑cpu核心的百度找答案)(建议先看下先把下面出错解决办法要安装的软件安装上,不要怕编译过程报啥错误就百度,然后把软件安装上就行了)
5、出错解决办法
下面是我编译依次报错和解决办法。
报错1:/usr/include/features.h:324:26:致命错误: bits/predefs.h:没有那个文件或目录编译中断
解决1: apt-get installlibc6-dev-i386
报错2: make: ***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]错误 1
解决2:因为gcc版本太高了,安装
apt-get install gcc-4.4
apt-get install g++-4.4
然后把系统的gcc和g++这两个变量都链接到4.4版本
cd到/usr/bin目录
ls -l gcc*可以看到gcc链接的是gcc-4.6
我们把这个链接的删掉,
然后输入ln -s gcc-4.4 gcc,重新换成我们的链接
再次输入ls -l gcc*发现已经链接到我们的啦
可以看到已经指向我们的gcc-4.4了,用同样的办法,让g++链接到g++-4.4
ln -s g++-4.4 g++
报错3:
g++: selected multilib '32' not installed
make: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl]错误 1
解决3:
apt-get install g++-4.4-multilib gcc-4.4-multilib
报错4:
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: ***[out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1
解决4:
apt-get install lib32z1-dev
报错5:
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make: ***[out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb]错误 1
解决5:
apt-get install lib32ncurses5-dev
错误6:
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
host SharedLib: libEGL_translator (out/host/linux-x86/obj/lib/libEGL_translator.so)
make: ***[out/host/linux-x86/obj/lib/libGLES_CM_translator.so]错误 1
解决6:
ln-s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
错误7:
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so]错误 1
解决7:
ln -s /usr/lib/i386-linux-gnu/libX11.so.6/usr/lib/i386-linux-gnu/libX11.so
报错8:
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: ***[out/host/linux-x86/obj/lib/libGLES_CM_translator.so]错误 1
make: *** 正在等待未完成的任务....
host SharedLib: libGLES_V2_translator(out/host/linux-x86/obj/lib/libGLES_V2_translator.so)
make: *** [out/host/linux-x86/obj/lib/libEGL_translator.so]错误 1
解决8:
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2/usr/lib/libGL.so (注意看/usr/lib/i386-linux-gnu/mesa/目录下面/libGL.so的版本),同上错误6一样的
报错9:
make: ***[out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/libbcc-stamp.c] 错误 1
make: *** 正在删除文件“out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/libbcc-stamp.c”
make: *** 正在等待未完成的任务....
解决9
apt-get install git
apt-get install git-core
6、测试和运行
(1)用源码自带的运行,在ubuntu上运行
方法一:运行emulator命令(先cd到源码目录),出现这个说明成功(注意以后每次如果你重启电脑之后运行模拟器都要输入,source build/envsetup.sh 不然emulator找不到命令的)
选择setting->about phone可以看到一些信息
题外话:运行adb可以push文件到模拟器哦
方法二:完整命令
在ubuntu上完整命令(书上那么写但是我没有成功android4.0.3和androdi4.4.4失败)
emulator –kernel ./prebuilt/android-arm/kernel/ kernel-qemu-armv7 –sysdir./out/target/product/generic –system system.img –data userdata.img –ramdiskramdisk.img
额外加上命令
emulator -partition-size 500可以设置启动的内存大小
(2):把编译好的文件用android sdk自带模拟器运行
第一种方式
在windows上,注意哦这里你要先安装好android sdk自带的模拟器哦,
把ubuntu上面那4个文件拷贝到windows然后运行下面命令
D:\android_core\myAndroidAVD\android4.0.3>emulator -kernelkernel-qemu-armv7 -sy
sdir D:\android_core\myAndroidAVD\android4.0.3 -systemsystem.img -data userdata
.img -ramdisk ramdisk.img
运行起来之后再此目录下回生成一个hardware-qemu.ini文件
修改hw.ramSize为hw.ramSize=1024,不然内存太小会很卡的,如果有别的异常请用android sdk自带模拟器自己建立一个,然后对比此文件的设置吧
注意这种办法不能,只能android4.0.3有用,对于android4.4.4失败
第二种方式
在android sdk的镜像下载目录system-images,打开然后偷龙换凤,换掉上面那四种文件即可,然后用android sdk自带的模拟器管理软件来生成一个模拟器
经过不断尝试
对于android4.0.3的kernel文件为
/prebuilt/android-arm/kernel/kernel-qemu-armv7文件有用也就是android2.6.xx 有用,记得复制到android sdk下载的镜像目录后改名为kernel-qemu
对于android4.4.4的kernel文件为
/prebuilts/qemu-kernel/arm/kernel-qemu-armv7 有用,记得复制到android sdk下载的镜像目录后改名为kernel-qemu
/prebuilts/qemu-kernel/arm/kernel-qemu 无效
编译后得到的文件说明
我们可以在源码目录的out/target/product/generic/生成对应固件等文件
Build 结果的目录结构
所有的编译产物都将位于 /out目录下,该目录下主要有以下几个子目录:
· /out/host/:该目录下包含了针对主机的 Android开发工具的产物。即 SDK中的各种工具,例如:emulator,adb,aapt等。
· /out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java应用代码和 Java 库。
· /out/target/product/<product_name>/:包含了针对特定设备的编译结果以及平台相关的 C/C++库和二进制文件。其中,
· /out/dist/:包含了为多种分发而准备的包,通过“make disttarget”将文件拷贝到该目录,默认的编译目标不会产生该目录。
Build 生成的镜像文件
Build 的产物中最重要的是三个镜像文件,它们都位于 /out/target/product/<product_name>/目录下。
这三个文件是:
· system.img:包含了 Android OS的系统文件,库,可执行文件以及预置的应用程序,将被挂载为根分区。
· ramdisk.img:在启动时将被 Linux内核挂载为只读分区,它包含了 /init文件和一些配置文件。它用来挂载其他系统镜像并启动 init进程。
· userdata.img:将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据。
编译android源码部分内容
把我们写的helloandroid apk编译到android源码里面去
在packages/experimental目录下,开发一个helloandroid
重新编译打包得到system.img文件,用这个启动模拟器,就可以看到helloworld了.
单独编译和打包
用mmm单独编译某个模块,然后用make snod命令来纯粹执行打包android系统镜像文件system.img的操作
1、Source build/envsetup.sh
2、mmm./packages/experimental/HelloAndroid/ 单独编译源码一部分,而不需要全部编译
编译完成以后在
Out/target/product/generic/system/lib目录
如果是动态链接库文件,并且是硬件抽象层文件,就保存在
Out/target/product/generic/system/lib/hw目录
3、Make snod
就可以重新打包生成system.img文件,在
Out/target/product/generic/目录
然后同上运行模拟器可以看到
四、Vmware安装ubuntu12.04 64位编译android2.3x源码详细过程
先安装好ubuntu和java和root启动,详细见编译android4.x的笔记,下面只说需要安装的软件
错误1:
/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc:没有那个文件或目录
解决1:apt-get install lsb-core
错误2:/bin/bash: bison: 未找到命令
解决2:$ sudo apt-get install bison
错误3./bin/bash: flex:未找到命令
解决3 apt-get install flex
错误4.external/clearsilver/cgi/cgi.c:22:18:致命错误: zlib.h:没有那个文件或目录
解决4 sudo apt-get install zlib1g-dev
错误5 make:[out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/skin/window.o]
解决6 6sudo apt-getinstall libx11-dev
错误6. sh: gperf: notfound
解决6 sudo apt-getinstall gperf
错误5/usr/include/features.h:324:26:致命错误:bits/predefs.h:没有那个文件或目录
解决6 apt-get install gcc-multilib即可
错误6 g++: selected multilib '32'not installed
解决6 apt-get installg++-4.4-multilib gcc-4.4-multilib
错误7 /usr/bin/ld: skippingincompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld:cannot find -lz
解决7 apt-get install lib32z1-dev
错误8 /usr/bin/ld: cannot find-lncurses
解决8 然后接着在终端输入 apt-get install libncurses*
错误9:还是上面的6错误
解决9 :apt-get install lib32ncurses5-dev
五、Vmware安装ubuntu12.04 64位编译android5.1.1_r6源码详细过程
同上,不过不要安装jdk1.6而是安装openjdk1.7
sudo apt-get install default-jre
sudo apt-get install default-jdk
参考文章
《android系统源代码情景分析》罗阳升第一章
http://jingyan.baidu.com/article/5bbb5a1b3a541313eba17915.html android4.4源码编译环境搭建
http://jingyan.baidu.com/article/3c48dd34777079e10ae3585b.html Android 4.4 源码下载
http://jingyan.baidu.com/article/a501d80ce61ad0ec630f5e0b.html android4.4源码编译
Ubuntu11.1032位编译android4.0
http://blog.csdn.net/flydream0/article/details/7036156如何在Ubuntu11.10(32位)下载Android4.0源码(图文)
http://blog.csdn.net/flydream0/article/details/7046612如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)
查看cpu核心数
http://jingyan.baidu.com/article/27fa7326ff3b9146f9271f7e.html 如何查看电脑CPU的核心个数
查看ubuntu隐藏文件
http://jingyan.baidu.com/article/49711c61415945fa441b7c89.html 如何在ubuntu下查看隐藏的文件和文件夹
安装jdk
http://jingyan.baidu.com/article/60ccbceb63432364cab197cb.htmlUbuntu下安装JDK1.6
在官网下载历史jdk版本
http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html如何在官网下载java JDK的历史版本
安装repo办法
https://source.android.com/source/downloading.html#installing-repo