文档章节

Mac OS X 10.8.4下Android4.2.2源码下载与编译

Jonson
 Jonson
发布于 2014/04/19 01:41
字数 1895
阅读 777
收藏 5
点赞 0
评论 0


参考 博文  http://blog.csdn.net/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

  1. #!/bin/bash   

  2.    #FileName  get-android.sh  

  3.    PATH=~/bin:$PATH   

  4.    repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1   

  5.    repo sync   

  6.    while [ $? = 1 ]; do   

  7.    echo "================sync failed, re-sync again ====="   

  8.    sleep 3   

  9.    repo sync   

  10.    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

未命名

7.debug后在选择的进程上面如果出现了未命名  ,则表示成功进入调试了。


源代码导入到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文件,下面仅作参考,不能小于下面的数值     

  1. -Xms128m

  2. -Xmx512m

  3. -XX:MaxPermSize=256m

    3. 新建一个Java Project,输入名字,将use default location勾掉,指定到你源码的目录下,Eclipse就会自动将源码导入.



问题:
    导入的源码编译后有很多的错误:
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.zip

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

© 著作权归作者所有

共有 人打赏支持
Jonson
粉丝 21
博文 131
码字总数 17942
作品 0
肇庆
在Mac OS X 10.9上编译安装nginx

在Mac OS X 10.9上编译安装nginx 很早就听闻nginx的大名,轻量级高并发的特性一直吸引着我,但一直没有时间顾及,最近由于各种原因,准备学习一下nginx这个神器。好的,让我们进入正题。今天...

ihaolin
2014/04/08
0
3
Mac OS X 重大漏洞 改时钟获系统最高权限

Mac OS X可能是目前最安全的一个计算机系统了,但这并不代表它无坚不催。在半年前,苹果Mac OS X中一个地址不明的安全漏洞被发现,恶意入侵者可通过修改用户的时钟,利用时间设置来绕开系统的...

oschina
2013/09/02
2.9K
93
OpenSSL 1.0.1f 发布

OpenSSL包含一个命令行工具用来完成OpenSSL库中的所有功能,更好的是,它可能已经安装到你的系统中了。 OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密S...

fei
2014/01/07
2.9K
2
Mac OSX 10.10 Yosemite编译OpenJDK 9

在Mac OSX 10.10系统上编译了下OpenJDK9,以下仅是个人安装记录,供参考。 编译时间:2015-06-13 系统版本:Mac OS X Yosemite 10.10.4 编译OpenJDK版本:JDK 9 相关软件版本: XCode版本:X...

易水瑶
2015/06/13
0
2
Mac 的虚拟技术--xhyve

FreeBSD 下的虚拟技术 bhyve (The BSD Hypervisor) 包含在了 FreeBSD 10.0 发行版中。而这个 xhyve 是基于 bhyve 的 Mac OS X 移植版本,也就是说我们想在 Mac 上运行 Linux 的话除了 Virtua...

红薯
2015/08/10
4.1K
0
苹果发布OS X 10.8.4正式版

苹果今天终于向 Mac 用户发布了 OS X 10.8.4 正式版,除了改善企业 WiFi 和微软 Exchange 服务的兼容性外,还修正了许多 Bug、增强稳定性、兼容性和安全性。以下是具体更新内容: — 改进了与...

chinaphp
2013/06/05
810
5
构建Hybrid应用-构建ionic开发环境

在ionic的文档上,安装环境介绍: 安装ionic/Install Ionic 首先您需要安装 Node.js. 其次, 安装最新版本的cordova 和 ionic command-line tools. 通过参考Android 和 iOS 官方文档来安装. 提...

我家有宝
2015/11/19
0
0
Xcode ARC需要什么版本的环境支持

Mac OS X v10.6 和 v10.7 (64位应用) 的Xcode 4.2以上版本支持ARC,iOS 4 和 iOS 5 下ARC都能工作,但Weak不支持Mac OS X v10.6 和 iOS 4,所以要想在iOS 4下运行用ARC的程序,只能用strong。...

东方皓
2013/05/06
0
0
Intellij Idea编译Elasticsearch源码

如果想阅读Elasticsearch源码,定制功能,不可避免的要编译Elasticsearch。本文图文并茂,介绍如何使用Intellij Idea编译Elasticsearch源码包。 一、软件环境 Intellij Idea:2017.1版本 Elas...

napoay
2017/03/27
0
0
Mac OS X 上基于 FreeBSD/bhyve 的虚拟技术 xhyve

FreeBSD 下的虚拟技术 bhyve (The BSD Hypervisor) 是去年1月份正式发布的,包含在了 FreeBSD 10.0 发行版中。今天要玩的这个 xhyve 是基于 bhyve 的 Mac OS X 移植版本,也就是说我们想在 ...

鉴客
2015/08/10
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
14分钟前
0
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
15分钟前
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
15分钟前
0
0
jq 判断复选框是否被选中,复选框后台接收

1. 效果 2. 代码 html部分: JS部分: var rememberLogin = $("#rememberLoginId").is(':checked')//获取复选框是否被选中 var rememberLoginval = $("#rememberLoginId").attr('value')//拿......

Lucky_Me
22分钟前
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
22分钟前
0
0
《趣谈网络协议》之为什么要学习网络协议?

一、协议 1.协议的定义 简单说协议就是一个规则,保证沟通交流双方可以互相听懂、理解或者可以双方合作可以顺利进行的一个约定和规则。 2.生活中例子 (1)有一种叫“程序猿”的物种,敲着一种...

aibinxiao
24分钟前
1
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
28分钟前
0
0
Java 正则表达式相关资料

1.java正则表达式过滤html标签

IT追寻者
31分钟前
0
0
点赞出现数字变大效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ padding: 50px; border: 1px solid #dddddd; } .item{ position: relative; } ......

南桥北木
50分钟前
0
0
anroid中批量将px转换成dp

package com.qu;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class Aaaa {public static void main(String[] args) {String fi......

android-key
51分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部