参考 博文 http://blog.youkuaiyun.com/yangblocker/article/details/9673097
一、环境配置
电脑: MacBook Pro 2.5GHz Intel Core i5
内存:4GB 1600 MHz DDR3
OS: Snow Leopard 10.8.4
XCode: 4.6.4
JDK:1.6 这个必须是1.6版本。如果是1.7的话要另外安装1.6版本,并设置为默认版本,不会的我稍后介绍方法。
二、设置Mac OS X的编译环境
基本的参照官网Setting up a Mac OS X build environment。
这里特别要强调一下Android源代码必须在大小写敏感的文件系统下编译,而Mac OS默认不是大小写敏感的,因此需要创建
一个大小写敏感的磁盘镜像文件。具体方法有两种:一种是用命令创建,还有一种就是用系统自带的磁盘管理工具。
命令方法:用hdiutil create命令,我尝试过,但失败了,有谁知道麻烦告诉我下。
磁盘工具:进入应用程序/实用工具/磁盘工具,选择文件->新建->新建空白映像
点击创建,ok,创建好了。磁盘镜像文件保存在当前用户根目录下,我的是在/ywen目录下。我们需要其将挂载到某个目录下面,在终端进入创建的磁盘镜像文件目录,输入hdiutil attach ~/android.dmg -mountpoint /Volumes/android。这样就将其挂载到Volumes目录下。至此,基本环境完成。
三、下载Android 4.2.2源码。
参照官网Downloading the Source Tree。
首先我们要先进入到我们刚才挂载的目录下去。执行 $ cd /Volumes/android。
然后在按照官网步骤一步一步进行。
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir WORKING_DIRECTORY (创建源码保存的文件目录)
$ cd WORKING_DIRECTORY/
然后就是下载源码了,这里我强烈推荐下使用Android内核剖析(柯元旦著)一书提供的一段防止下载异常的脚本。因为单独下载可能会出现下载异常然后某个链接下载失败的情况。
[plain] view plaincopy
#!/bin/bash
#FileName get-android.sh
PATH=~/bin:$PATH
repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1
repo sync
while [ $? = 1 ]; do
echo "================sync failed, re-sync again ====="
sleep 3
repo sync
done
复制上面代码保存到刚才的源码目录(WORKING_DIRECTORY)里。如:get-android.sh。
最后在终端执行 $ ./get-android.sh开始下载源码了。接下来就是漫长的等待,我也不清楚要下载多久,我都是晚上把电脑丢在那里,设置不让电脑休眠(休眠可能会掉网的),一直下载。当出现下图所示很多个100%时,那恭喜你,下载完成了。
四、编译下载的源码
设置编译初始化环境
1、$ source build/envsetup.sh
2、选择编译目标 $lunch full-eng
开始编译代码
$ make
编译过程很漫长,也是最关键的部分,有很多有意思的事情会发生的。
1、如果之前java版本不是1.6的,这个时候就会报错了,提示java version不正确。关于这个错误。可以查看这里https://forum.processing.org/topic/how-to-re-enable-java-1-6-on-mac-osx-mountain-lion,看不懂的也可以问我,大家一起讨论。
2、如果出现 If you wish to build using higher version of SDK, build/core/combo/HOST_darwin-x86.mk:66: * try setting BUILD_MAC_SDK_EXPERIMENTAL=1 before build/core/combo/HOST_darwin-x86.mk:67: * rerunning this command 这种错误的话。
在终端执行export BUILD_MAC_SDK_EXPERIMENTAL=1就可以了。继续执行$make 编译源码
3、我记得在编译了一个多小时吧的时候出现个棘手错误,停止编译了,错误如下。
当时有点茫然,google了下,说是webkit的一个bug。可参考这里https://groups.google.com/forum/#!msg/android-building/MrM4BneUoCw/f0xHBHgsgEsJ。
(个人补充 :)
关于上面的错误,就是原作者所说的webKitbug的解决办法 参考https://bug-92264-attachments.webkit.org/attachment.cgi?id=154381 ; 上面就是说要修改XPathParser.cpp 文件,修改 46,47 添加代码
using namespace WebCore;
using namespace XPath;
如下:
using namespace WTF;
using namespace Unicode;
//namespace WebCore {
//namespace XPath {
using namespace WebCore;
using namespace XPath;
修改 627 行 方法的代码 (注释的是源代码) 修改如下:
void Parser::deleteNodeTest(Step::NodeTest* t)
{
// if (t == 0)
// return;
// ASSERT(m_nodeTests.contains(t));
m_nodeTests.remove(t);
delete t;
}
//}} 记得注释2个右括号
继续$make 最后编译成功后会出现
nstalled file list: out/target/product/generic/installed-files.txt
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Running: mkyaffs2image -f out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
编译后运行模拟器::
首先 source build/envsetup.sh (假如你这行命令你之前设置好了就不用了,)
输入 $ lunch 命令
跟住会提示你选择版本,我们选择 第一个版本1, 输入1
命令运行完 输入命令 emulator
导入android源码
第二部分:搭建Eclipse源码工程
1. 进入源码目录下的development/ide/eclipse,把android-formatting.xml ,android.importorder , .classpath拷贝到源码目录
2. chmod +x .classpath 赋予执行权限
3. 在eclipse工程菜单 window-->preferences-->java-->Code Style-->Formatter 导入android- formatting.xml文件,organize imports导入android.importorder文件
4. 新建一个java工程,导入android源码 (参考下面导入android源码)
5. 修改eclipse配置,位于android.importorder目录下的eclipse.ini文件,修改-Xms,-Xmx为128和512
-Xms128m
-Xmx512m
第三部分:调试android源码
1. 退出Eclipse工程
2. 在android源码目录执行 . build/envsetup.sh ,初始化环境变量
3. 启动模拟器 emulator &
4. 等模拟器启动成功后,启动ddms ddms &5. 在ddms上选择你需要调试的进程,一般如果是调试系统自带的应用,比如联系人,选中下面进程
6. 打开Eclipse工程,设置调试端口
选择你的工程,右键打开菜单选择 Debug AS—Debug configuration 弹出窗口,选择Remote JAVA Application,右键在菜单选择NEW,弹出下面的视图,修改Port为8700
源代码导入到eclipse工程中
转自: http://blog.chinaunix.net/uid-26215986-id-3969849.html
文地址: Android源码导入Eclipse 作者: hurly117 下载源码编译后,将Android源码导入Eclipse,方便查看.
1. 将源码目录/development/ide/eclipse 中的.classpath复制到源码根目录下(和development文件夹同一目录).
.classpath在linux下时隐藏文件,需要显示隐藏文件后才能看到.
android-formatting.xml用来配置eclipse编辑器的代码风格,可以不导入
android.importorder用来配置eclipse的import的顺序和结构,可以不导入
* 导入方法
window->preferences->java->Code style->Formatter中导入android-formatting.xml
window->preferences->java->Code style->Organize Imports中导入android.importorder
2. 更改Eclipse的缓存设置
更改Eclipse目录下的eclipse.ini文件,下面仅作参考,不能小于下面的数值
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
问题:
导入的源码编译后有很多的错误:
Project'AFDebug' is missing required library:'out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar
Project'AFDebug' is missing required library:'out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar
网上的说法是编译时出现问题,需要在源码目录下执行下面的命令:
make clobber
make -j4
另一种解决方法:
在.classpath 删除下面两行
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar"/>
添加
<classpathentry kind="lib" path="/work/froyo/out/target/common/obj /JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>
上传我的classpath文件:

修改classpath文件后,还是报错:在out目录找一个jar包导入,我忘记目录地址了,就上传我找的jar包,文件太大了放在我的云盘中:
http://yunpan.cn/Qea2DyTgQ3jHF (访问密码:963e)