编译Android源代码与内核总结
这些天花了些时间自己下载了android源代码来编译,当中走了一些弯路导致耗了些时间,如今又一次梳理总结下,让有同样想法的人自己编译的时候能少走些弯路,官方指导文档在http://source.android.com/source/initializing.html。
1、安装linux环境
我是windows系统,安装了Vmware虚拟机。在虚拟机上装了ubuntu-12.04,我的这个版本号是32位的,这个还蛮重要的。安装32位或者64位的将决定你能编译的android版本号,官方文档里For Gingerbread
(2.3.x) and newer versions, including the master branch, a 64-bit environment is required. Older versions can be compiled on 32-bit systems.
假设你编译的是2.3以上的版本号,就要安装64位的ubuntu系统。否则装32位版本号就可以。我这里编译的是2.3.5版本号,因此选择32位版本号的Ubuntu 12.04.5 LTS。内存3g。硬盘40g(官网建议是30G以上)。
2、安装jdk
非常多网上的资料都讲到http://www.oracle.com官网下载,然后我也去傻傻地下载了,下载了最新版本号1.8以上了,结果后来执行的时候发现andorid使用的是jdk1.6的,因此得安装jdk1.6。
编译的提演示样例如以下:
Your version is: java version "1.6.0_24". The correct version is: Java SE 1.6
在http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html
下载jdk-6u33-linux-i586.bin,然后把它移动到linux文件夹下,我移动到/usr/lib下。
2.1分配权限 chmod +x jdk-6u33-linux-i586.bin
2.2解压 ./jdk-6u33-linux-i586.bin
一路确认下来。最后解压出jdk1.6.0_33目录
2.3配置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jdk1.6.0_33/bin/java"
1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/libjdk1.6.0_33/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jdk1.6.0_33/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jdk1.6.0_33/bin/jar" 1
sudo update-alternatives --config java
假设你的机器本来就装有其它版本号的java,这个时候会让你选择要生效的java版本号,记住选择当前这个1.6的版本号
2.4 改动环境变量:
sudo gedit /etc/environment
export JAVA_HOME=/usr/lib/jdk1.6.0_33
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${JAVA_HOME}/bin:${JRE_HOME}/bin"
sudo gedit /etc/profile
export JAVA_HOME=/usr/lib/jdk1.6.0_33
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
2.5.source /etc/profile
source /etc/environment
2.6.check java version
java -version
得到
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) Client VM (build 20.8-b03, mixed mode, sharing)
3、下载android 源代码
网上非常多教程都是联网下载,但因为众所周知的原因,这种方法可能被墙或者非常慢,我在网上搜了个网址源代码下载 。我下载了2.3.5的源代码Android2.3.5_Kernel.7z。解压后得到.tar,继续解压后得到mydroid目录,这个就是源代码代码,将源代码相同移动到/usr/lib下
进入源代码文件夹,输入make。就会有非常多输出。
当中我遇到的一个问题:
frameworks/base/libs/utils/RefBase.cpp: 在成员函数‘void android::RefBase::weakref_type::trackMe(bool, bool)’中:
frameworks/base/libs/utils/RefBase.cpp:483:67: 错误: 将‘const android::RefBase::weakref_impl’作为‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’实參时丢弃了类型限定 [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 错误 1
这个问题是由于本机装的gcc版本号太高,须要换到合适的能够编译android的版本号
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
第一次编译会比較久,我是放一晚上让它跑,第二天早上起来看到输出
代表成功make编译了源代码。
4、编译linux内核
然后我们还须要编译android的linux内核,尽管是linux源代码,但不能随便从网上下个linux源代码,由于Android在Linux内核的基础上加入了自己所特有的驱动程序,因此要编译android的linux内核必须使用android专门的linux内核。网上非常多方法都是提供git clonehttp://android.googlesource.com/kernel/goldfish.git的方法去下载。但由于有墙因此不好用。我搜了半天了搜到了一个http://pan.baidu.com/s/1qW0TkkO这里就能够下载了。大概300多M,比源代码小多了。
下载完后解压在android源代码文件夹下新建一个文件夹kernel。并将解压后的内核源代码放在该文件夹下
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnp1amll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
还须要对Makefile文件的有些地方做些修改,将
= arm #体系结构为arm
命令行输入chenzujie@ubuntu-chen:/usr/lib/mydroid2.3.5$ emulator -kernel ./kernel/common/arch/arm/boot/zImage &
随后模拟器将启动,此时输入adb shell进入android系统,继续输入
cd /proc
cat version,将看到自己编译出来的版本号,比方我的例如以下
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnp1amll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
好了,大功告成了。
编译Android源代码与内核总结的更多相关文章
- 【Android 系统开发】下载 编译 Android源代码 和 Android kernel源代码
下载Android源码简要流程 : a. 获取repo文件: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo ...
- 下载 编译 Android源代码 和 Android kernel源代码
下载Android源码简要流程 : a. 获取repo文件: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo ...
- [转]编译Android源代码常见错误解决办法
1. 编译时出现/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when ...
- 【转】如何单独编译Android源代码中的模块--不错
原文网址:http://blog.csdn.net//article/details/6566662/ 第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命 ...
- 如何单独编译Android源代码中的模块
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6566662 第一次下载好Android源代码工 ...
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813 本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...
- 编译Android源代码
硬盘空间需要在50G以上,最好100g 系统:ubuntu14.04 交叉工具链:arm-linux-gcc-4.5.1-v6-vfp-20120301 安装 Java 开发环境 $ sudo apt ...
- Ubuntu 下编译Android 源代码
1.配置JDK 1.6 或者1.7(看情况配置,有的Android版本不能在1.7下运行) 2.配置环境:终端:(CTRL+ALT+T) $ sudo apt-get install git gnup ...
- Android源代码编译过程及指令
编译Android源代码分为两种情况: 1. 完整编译源码: ./mk_aliphone.sh --> 完整编译脚本 --> 6735 输入对应的编号 --> userdebug ...
随机推荐
- “HTTP 错误 401.1 - 未授权:登录失败” iis配置和权限问题
今天,将项目发布到IIS服务器上,出现此问题,本地IIS访问正常. 登录失败说明根本登录不了,谈何访问网页,所以要从两方面下手,一.账户:二.账户权限: 一.设置你网站属性的时候,目录安全性-匿名访问 ...
- [Oracle] 常用工具集之 - SQL*Loader
SQL*Loader原理 SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高.其示 ...
- 解决Delphi MDI 闪烁问题(使用WM_SETREDRAW锁屏后进行处理)
procedure TMainForm.CreateMDIChild(const Name: string); var Child: TMDIChild; begin { create a new M ...
- [Android]获取设备相关信息
public static int screenWidth(Activity activity) { DisplayMetrics dm = new DisplayMetrics(); activit ...
- ACdream 1135(MST-最小生成树边上2个值,维护第一个最小的前提下让还有一个最小)
F - MST Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatu ...
- POJ 1325 ZOJ 1364 最小覆盖点集
题意:有A,B两台机器, 机器A 有 n个模式(0, 1, 2....n-1),同样机器B有m个模式, 两个机器一开始的模式都为0,有k个作业(id,x,y) 表示作业编号id, 该作业必须在A机器在 ...
- Spark简述及基本架构
Spark简述 Spark发源于美国加州大学伯克利分校AMPLab的集群计算平台.它立足 于内存计算.从多迭代批量处理出发,兼收并蓄数据仓库.流处理和图计算等多种计算范式. 特点: 1.轻 Spark ...
- android关于实现滑动界面
首先要说的是,滑动界面,我们需要一个以上的view切换,实际上可以使用ArrayList<View> pageViews要保存view信息,然后切换 LayoutInflater infl ...
- linux上svn连接visual svn server时ssl鉴权失败,问题解决(转)
场景:1.在windows 7上安装了visual svn server作为自己的svn服务器. 2.在虚拟机centos 6.3上使用svn客户端check代码,报错: [plain] view p ...
- zoj3471(状压dp)
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257 题意:不超过10种气体,两两之间相互碰撞可以产生一定的能量,如 ...