Android4.4 源码编译运行


一直热衷于Android底层的实现原理,所有想编译一把源码并刷机,或者DIY Android系统,经过几天的折腾,今天终于看到自己编译的源码在模拟器中运行,特写下此文以纪念。


本文分为以下三部分:

一、源码下载

二、源码编译

三、模拟器运行


第一部分:源码下载

大家都知道从google下载源码是多么的困难,以至于等到天荒地老发现还没有下完,具体如何从google下载源码,http://source.android.com/中有详细的说明,别忘了挂代理或者自己买个VPN。


我编译的源码不是自己从google爬取的,而是拿了别人的劳动成果,直接在百度网盘下载的,感谢这位兄弟的奉献(http://www.cnblogs.com/-njx/p/3845164.html),百度网怕地址:http://pan.baidu.com/s/1ngsZs


我下载的Android4.4版本,源码是完整的。


二、源码编译

Ubuntu版本:14.04,64bit。


环境准备:http://source.android.com/source/initializing.html,这里有详细的说明,不过我还是想把自己的运行环境说明一下。

1. JDK1.6,编译需要JDK1.6的环境,并且配置好环境变量,包括当前用户以及系统环境变量。

当前用户环境变量配置如下:

# JDK-6
export JAVA_HOME=/usr/lib/jvm/jdk-6-sun/jdk1.6.0_45
export JRE_HOME=${JAVA_HOME}/jre 

# CLASSPATH
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:${JAVA_HOME_7}/lib:${JRE_HOME_7}/lib
 # PATH
export PATH=${JAVA_HOME}/bin:${ADB_HOME}:$PATH


系统环境变量配置如下:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk-7-sun/bin:/home/xxx/android-sdks/platform-tools:/usr/lib/jvm/jdk-6-sun/jdk1.6.0_45/bin"


JDK安装多个版本的配置:

通过命令行安装JDK:

  sudo update-alternatives --install /usr/bin/java java /usr/lib/java/jdk1.6.0_41/bin/java 300
  sudo update-alternatives --install /usr/bin/javac javac /usr/lib/java/jdk1.6.0_41/bin/javac 300

安装后执行:

update-alternatives --config java
选择需要运行的JDK。

2. 编译环境配置
主要是参考source.build中的配置,

Installing required packages (Ubuntu 14.04)

You will need a 64-bit version of Ubuntu. Ubuntu 14.04 is recommended.

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils

Installing required packages (Ubuntu 12.04)

You may use Ubuntu 12.04 to build older versions of Android. Version 12.04 is not supported on master or recent releases.

$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
编译中的大部分问题都是编译环境安装有问题导致的,只要一上两步没问题,编译同样不会碰到问题。
其它ubuntu的安装具体见:http://source.android.com/source/initializing.html

编译:
1. 初始化:
source build/envsetup.sh
2. 选择target
lunch 
然后选择 aosp_arm

3. 
make -j4

等待大概2个小时,就可以顺利编译完成。



三、模拟器运行


按照教程上的做法直接运行emulator,会出现如下错误:

emulator: ERROR: You did not specify a virtual device name, and the system

directory could not be found.

原因是文件路径没有设置,解决办法添加绝对路径:

out/host/linux-x86/bin/emulator -kernel prebuilts/qemu-kernel/arm/kernel-qemu -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img  -sdcard sdcard.img -scale 0.7 -memory 512 -partition-size 1024 


后来又遇到模拟器一直黑屏问题:

解决版本是kernel有问题:

-kernel prebuilts/qemu-kernel/arm/kernel-qemu-armv7 


黑屏没有出现,却卡在启动页面,不知什么原因,重启了模拟器也不起作用,通过重新配置解决了此问题:source build/envsetup.sh, lunch。


然后在运行模拟器,顺利启动,欣喜若狂啊!

以上是这几天的劳动成果,后续会继续阅读源码,并修改源码进行源码级别的改动,以探究Android各模块实现原理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值