读一读Android系统源代码 一:下载源码、编译framework模块

来源:互联网 发布:如何用备忘录编程 编辑:程序博客网 时间:2024/03/29 15:28


花了一天的时间把android-2.3.1_r1的源代码下载了下来,体积是12G,是通过VPN来从官方下载的。推荐两个可以免费试用的VPN:greenVPN、WormHole。

官网下载源码教程:Establishing a Build Environment

官网教程的翻译和简化:点击打开链接

老罗对源码下载管理工具repo的解读:点击打开链接


源码下载整体来说还是难度不大的,主要是访问官方源代码仓库的问题。可以从国内的镜像站下载,也可以VPN从官方下载。

下面说说android-2.3.1_r1的编译环境问题。


编译系统:virtual box上运行的Ubuntu14.04-64位。

android-2.3.1需要安装jdk1.6版本

官方给出的所需的工具包:

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip


安装之前先更新一下:

sudo apt-get update


我在安装这些工具包时把 l 和 1 搞混了,导致找不到包的问题,建议直接复制命令安装。


OK之后:

(在源代码文件夹下运行)

初始化环境:

. build/envsetup.sh


选择编译的目标平台(运行之后会给出几个平台的选项,选择你要编译的版本):

lunch


最后,编译framework模块!

make framework

然而事情并没有这么顺利。

问题一:

make: *** [out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes-with-local.dex]

原因:系统内存小于编译framework要求的最低内存

解决:提高虚拟机的内存


问题二:

frameworks/base/include/utils/KeyedVector.h:193:31: error: 'indexOfKey' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]

frameworks/base/include/utils/KeyedVector.h:193:31: note: declarations in dependent base 'android::KeyedVector >' are not found by unqualified lookup


frameworks/base/include/utils/KeyedVector.h:193:31: note: use 'this->indexOfKey' instead

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/AssetManager.o] Error 1

原因:g++和gcc的版本问题。再apt-get 更新之后,g++和gcc最新版本为4.8。这里需要的是版本4.4

解决:

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++
sudo apt-get install g++-4.4-multilib


最后编译framework模块成功!在文件夹out/target/product/generic/system/framework/framework下会有framework.jar  framework-res.apk两个文件。使用adb将其push到手机的system/framework中,重启此模块,就可以测试它了。


未完待续...




0 0