原文网址:http://www.mcuos.com/thread-4553-1-1.html

建立编译环境

1.在VirtualBox上安装Ubuntu

2.安装JDK
   $ sudo apt-get install sun-java5-jdk  或
   $ sudo apt-get install sun-java6-jdk (donut 1.6)
3.安装flex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(可选),build-essential,zip,curl。
   $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
4.安装Valgrind(可选),此工具可以帮你查找内存泄漏、堆栈破坏以及数组访问越界等错误。
   $ sudo apt-get install valgrind
5.下载Android源代码

从Android官方下载donut分支的Android源代码
sudo apt-get install git-core curl
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo

cd ~/bin/
   $ ./repo init -u git://android.git.kernel.org/platform/manifest.git -b android-1.6_r2
   $ ./repo sync

6.在 ~/.bashrc 加环境变量。
   $ vim ~/.bashrc
在.bashrc文件的最后面加入如下2行,即将JDK的安装路径加入到环境变量中
       export JAVA_HOME=/usr/lib/jvm/java-6-sun
       export ANDROID_JAVA_HOME=$JAVA_HOME
完成后,$source ~/.bashrc即可生效。

运行   $ java -version 将出现下面提示:
      [root@Neil java]# java -version
      java version "1.6.0_11"
      Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
      Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
      [root@Neil java]# 
说明Java已经成功被安装了

通过
$ update-alternatives --config javadoc
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
然后选一个编号,就切换过去了。

编译Android

$ cd android            //(进入android目录)
  $ make                  //(编译android)

注意:编译时要确保系统的内存在1.2GM以上,且有足够的硬盘可用空间,否则会编译失败终止。
    Android编译环境提供了”showcommands”选项来显示编译命令行,如:
    $ make showcommands

1.5_r2版编译出错的解决方法:
The Android code contains a bug that hasn’t been solved up to the date of this article.
So before you start compiling the code, you’ll need a few modifications, or the build will fail (after consuming some of your time and patience). The error is:
external/qemu/sockets.c: In function 'sock_address_init_resolve':
external/qemu/sockets.c:637: error: 'EAI_NODATA' undeclared (first use
in this function)
external/qemu/sockets.c:637: error: (Each undeclared identifier is
reported only once
external/qemu/sockets.c:637: error: for each function it appears in.)
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/
sockets.o] Error 1
To fix this, before compiling the android code, open ~/mydroid/external/qemu/sockets.c and add
#define __USE_GNU
just before the #include <netdb.h>

新编译的system.img不能正常使用sdcard 的解决办法:
    $ mount -t vfat /dev/block//vold/179:0 /sdcard
    也可以更改system/core/vold程序

运行emulator
我们这里使用已经编译好的模拟器kernel镜像,即kernel-qemu,位于android/prebuilt/android-arm/kernel目录下,然后运行模拟器。

1.在 ~/.bashrc 加环境变量。(本项可选)
   $ vim ~/.bashrc
在.bashrc文件的最后面加入如下2行,即将Android工具的路径
   export PATH=/archer/external/android/out/host/linux-x86/binPATH
   export ANDROID_PRODUCT_OUT=/archer/external/android/out/target/product/generic

   export ANDROID_SWT=/android/out/host/linux-x86/framework 

2.创建Android虚拟设备
   $ cd android/out/host/linux-x86/bin    (进入模拟器程序所在目录)
   $ ./android create avd -t 2 -n g1
其中 -t 指定TargetID (Android 1.5 SDK的ID为2,Android 1.0 SDK的ID为1),-n指定创建的Android虚拟设备名字。

3.运行emulator
   $ cd android/out/host/linux-x86/bin    (进入模拟器程序所在目录)
   $ ./emulator -avd g1                     或者
   $ ./emulator -avd g1 -scale 0.8
其中 -avd指定Android设备名,-scale指定缩放比例。
按 Ctrl + F12 可以使模拟器屏幕旋转90度,即横屏、竖屏切换。
4.删除创建的Android虚拟设备
   $ ./android delete avd -n g1

编译linux kernel

直接编译Android源码时,并没有编译 linux kernel。如果只运行模拟器,不用编译 linux kernel。
从emulator获取内核编译参数的配置文件:
  启动模拟器
  $ adb pull /proc/config.gz .
   解压缩config.gz  $ gzip -d config.gz
   将config文件替换kernel文件夹下的.config文件。
根据需要,修订config与Makefile配置文件

编译模块

Android中的一个应用程序可以单独编译,编译后需要重新生成system.img。
在Android目录下运行 
$ . build/envsetup.sh  或者 
$ source build/envsetup.sh ,然后就会多出几个可用的命令:

- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.
- cgrep:   Greps on all local C/C++ files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir:   Go to the directory containing a file.
- printconfig: 当前build的配置情况.
可以使用 --help查看用法。
如:在修改了某一个模块以后,可以使用 $ mmm <目录>  来重新编译所有在<目录>中的所有模块,使用 $ mm  编译当前目录中的所有模块。
编完之后,即修改了Android系统以后,可以使用 $ make snod 重新生成system.img。

【转】在Ubuntu下编译Android源码并运行Emulator的更多相关文章

  1. ubuntu下编译VLC源码

    http://blog.csdn.net/beitiandijun/article/details/9225591ubuntu下编译VLC源码 分类: 视频处理 2013-07-02 17:33 57 ...

  2. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  3. 在Ubuntu下编译WebKit源码--qt

    转载自:http://www.cnblogs.com/panderen/archive/2011/10/18/2216154.html 在朋友的介绍下有幸認识了WebKit这个让人心动的开源浏览器内核 ...

  4. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    昨晚在编译源码,make一段时间之后报错如下: # A fatal error has been detected by the Java Runtime Environment: # # SIGSE ...

  5. wubi安装ubuntu后,增加swap大小,优化swap的使用参数-----------让ubuntu健步如飞,为编译android源码准备

    wubi安装ubuntu后,终端输入free -m可以查到如下信息: total used free shared buffers cached Mem: 1944 1801 143 0 557 70 ...

  6. Ubuntu编译Android源码过程中的空间不足解决方法

    Android源码一般几十G,就拿Android5.0来说,下载下来大概也有44G左右,和编译产生的文件以及Ubuntu系统占用的空间加起来,源码双倍的空间都不够有.编译源码前能分配足够的空间再好不过 ...

  7. 在Mac mini上编译Android源码

    参考文章 1.Android 6.0 源代码编译实践 2.编译Android源码致命错误解决方案 实践过程 1.Mac下安装Ubuntu双系统 (1)Ubuntu版本:Ubuntu 15.10 注:实 ...

  8. [原]编译Android源码过程中遇到的问题

    编译Android源码的过程参考Android官网介绍: 1.下载Android源码的步骤:https://source.android.com/source/downloading.html 2.编 ...

  9. 一次编译Android源码实验

    注意,本文只供参考,是老文章 1.必要的软件环境 sudo apt-get install build-essential sudo apt-get install make sudo apt-get ...

随机推荐

  1. HIdernate入门

    简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...

  2. 移动设备日期选择插件(基于JQUERY)

    上周花了2个小时写的一个日期选择插件,比较适合移动端的设备.先看个效果图吧.如果刚好是你需要的就往下吧,不需要的也可以继续..... 其实网络上已经有的了类似的成熟插件,比如基于mobiscroll, ...

  3. javascript-图片横向无缝隙滚动(可在服务器运行)

    前两次弄'图片横向滚动'javascript,在本地上运行得很美,可是一上到我们学校后台的服务器,就有很多问题,这个算是行的了. css代码: <style type="text/cs ...

  4. 转载 VC 2010下安装OpenCV2.4.4

    说明: 1.安装平台:32位XP,VS2010: 2.OpenCV 2.4.4不支持VC 6.0: 3.网上有很多用CMake编译OpenCV的安装教程,这里建议先不要自己编译,如果使用预编译好的库有 ...

  5. 从Bash漏洞学Shell脚本(冒号)

    前天,爆发了Bash安全漏洞,非常恐怖.在网络上开始飞速传播,附带了非常友好的检测工具. $ env x='() { :;}; echo vulnerable' bash -c "echo ...

  6. 为SQL Server表中的列添加/修改/删除注释属性(sp_addextendedproperty、sp_updateextendedproperty、sp_dropextendedproperty)

    本篇基本完全参考:sql--sp_addextendedproperty和sp_updateextendedproperty (Transact-SQL) 三个存储过程用法一样,以sp_addexte ...

  7. 正则版----getByClass函数

    function getByClass(oParent,sClass){ var arr = []; var aEle = oParent.getElementsByTagName('*'); //v ...

  8. JavaScript Iframe富文本编辑器中的光标定位

    最近在项目中碰到一个比较棘手的问题: 在iframe富文本编辑器中,有个工具栏,这个工具栏在iframe标签之外,工具栏上有一个按钮,点击该按钮向iframe正在编辑中的光标处插入一个图片,图片会插入 ...

  9. Hierarchy Viewr 配合 adb 命令 查看窗口属性

    Hierarchy Viewr 可以看到当前 的 窗口层次如下

  10. 基于TCP的NAT子网穿透实验

    不得不说,在国内IP紧缺的现状下,NAT发挥了无比巨大的作用:它以把IP和端口重新分配的方式,满足了广大人民群众上网的强烈需求.但是对于个人服务器以及在内网中基于网络的嵌入式设备,却是个比较尴尬的事情 ...