通过参考网上的相关资料,我编译Android源码的步骤如下:

  • 1 我的系统是Ubuntu 8.04
  • 2 系统上必须安装以下工具(摘自网上的资料):
     
     sudo apt-get install build-essential
     sudo apt-get install make
     sudo apt-get install gcc
     sudo apt-get install g++
     sudo apt-get install libc6-dev
     
     sudo apt-get install flex
     sudo apt-get install bison
     sudo apt-get install patch
     sudo apt-get install texinfo
     sudo apt-get install libncurses-dev
     
     sudo apt-get install git-core gnupg  //(gnupg系统可能已自带)
     sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
     sudo apt-get install ncurses-dev 
     sudo apt-get install zlib1g-dev
     sudo apt-get install valgrind(可选,有21M大,我觉得一般人是用不到的)
     sudo apt-get install python2.5 (实际上不用装,Ubuntu 8.04 已经自带)
     sudo apt-get install sun-java5-jdk
     
     注意:
     a. 不要用 sun-java6-jdk, 不然在make sdk, 具体来说是make doc这一步中, 遇到这个错误:
       Docs droiddoc: out/target/common/docs/dx
       javadoc: error - In doclet class DroidDoc, method start has thrown an
       exception java.lang.reflect.InvocationTargetException
       com.sun.tools.javac.code.Symbol$CompletionFailure: class file for
       sun.util.resources.OpenListResourceBundle not found
     b. 网上资料说需要设置环境变量, 但我并没有设置:
      export ANDROID_JAVA_HOME=$JAVA_HOME
      
     c. 网上并没有提及要安装ncurses-dev, 但安装之前我编译过程中会出现编译错误.
  • 3 建立android源码的存放目录
     $ mkdir ~/open_src
     $ mkdir ~/open_src/android
     $ cd ~/open_src/android
     $ mkdir bi
  • 4 下载repo脚本,放到~/open_src/android/bin目录下,加上可执行权

$ curl http://android.git.kernel.org/repo > repo
          $ sudo mv repo ~/open_src/android/bin
          $ sudo chmod a+x ~/open_src/android/bin/repo

  • 5 在源码存放目录android中执行
     $ ~/open_src/android/bin/repo init -u git://android.git.kernel.org/platform/manifest.git
     //中间会提示输入电子邮件什么的, 如果你打算要提交patch的话,用google accounts注册过的邮箱
  • 6 在android目录中执行repo sync就可以开始下载源码了.
     我们也可以从其他地方把源码复制到android目录, 而我正是这么做的.
  • 7 编译源码, 并得到~/open_src/android/out 目录
     在命令行执行make命令:
     $make
     这 是一个很漫长的过程, 等吧......
  • 8 测试运行
     8.1 先设置环境变量:
      打开~/.bashrc文件, 并在最后添加下面两行:
      export PATH=$PATH:~/open_src/android/out/host/linux-x86/bin
      export ANDROID_PRODUCT_OUT=~/open_src/android/out/target/product/generic
     
     8.2 运行模拟器:
      emulator --debug-init -skin QVGA-L  //可能会提示unknown option: --debug-init, 去掉--debug-init即可
      或者直接执行emulator, 这样使用的是默认的皮肤
     
     如 果最后能进入到系统并看到一个大时钟, 说明就大功告成了.
  • 9 后续编译:

先在android目录下执行
           $ . build/envsetup.sh
           然 后你就会多出几个可用的命令。在改了Contacts联系人项目后,可以简单的执行一下命令来单独编译这个部分:
           $mmm packages/apps/Contacts/
          为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
           $ make snod
          当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了

  • 以下是编译成功后的最后一些输出:
    Install: out/target/product/generic/system/xbin/scp
    Notice file: system/extras/showmap/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/showmap.txt
    Install: out/target/product/generic/system/xbin/showmap
    Notice file: system/extras/showslab/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/showslab.txt
    Install: out/target/product/generic/system/xbin/showslab
    Notice file: external/sqlite/dist/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/sqlite3.txt
    Install: out/target/product/generic/system/xbin/sqlite3
    Notice file: external/dropbear/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/ssh.txt
    Install: out/target/product/generic/system/xbin/ssh
    Install: out/target/product/generic/system/xbin/strace
    Notice file: system/extras/su/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/su.txt
    Install: out/target/product/generic/system/xbin/su
    Install: out/target/product/generic/system/xbin/timeinfo
    Copy: out/target/product/generic/system/etc/apns-conf.xml
    Copying: out/target/product/generic/obj/NOTICE_FILES/src/kernel.txt
    Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
    Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
    gzip -c out/target/product/generic/obj/NOTICE.html > out/target/product/generic/obj/NOTICE.html.gz
    zip -qj out/target/product/generic/system/etc/security/otacerts.zip build/target/product/security/testkey.x509.pem
    Generated: (out/target/product/generic/android-info.txt)
    Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img
    Target ram disk: out/target/product/generic/ramdisk.img
    Target userdata fs image: out/target/product/generic/userdata.img

转载于:https://www.cnblogs.com/AlexCheng/archive/2010/09/09/2120212.html

编译Android源码相关推荐

  1. 《深入解析Android 虚拟机》——第1章,第1.3节编译Android源码

    本节书摘来自异步社区<深入解析Android 虚拟机>一书中的第1章,第1.3节编译Android源码,作者 钟世礼,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  2. (转)编译Android源码的全过程

    在网上看到一篇编译android源码的文章,照着做挺行的, 通过参考网上的相关资料,我编译Android源码的步骤如下: * 1 我的系统是Ubuntu 8.04      * 2 系统上必须安装以下 ...

  3. ubuntu 11.10下载和编译Android源码

    ubuntu 11.10下载和编译Android源码 由衷感谢网上的各个博主的文章,给了小弟我莫大的帮助.这里呢,小弟也把自己的经历记录下来,以供大家参考^^.这篇应该算是零基础.从无到有的流程介绍了 ...

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

    Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决 参考文章: (1)Ubuntu12.04编译Android ...

  5. 编译Android源码致命错误解决方案

    编译Android源码致命错误解决方案 参考文章: (1)编译Android源码致命错误解决方案 (2)https://www.cnblogs.com/cliuwei/p/5605789.html 备 ...

  6. android:自己动手编译Android源码(超详细)

    自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...

  7. win10最新下载编译Android源码的简易方法分享(已亲测)

    win10最新下载编译Android源码的简易方法分享(已亲测) 准备至少150G的硬盘空间 win+R 输入control 打开程序与功能-启用或关闭Windows功能 勾选"适用于Lin ...

  8. ubuntu 20.04编译Android源码

    一直以来想编译android源码,趁闲编译了下,ubuntu版本:20.04,android源码版本:android-9.0.0_r30.总体还比较顺畅,中间遇到了一些报错,在文中也有记录,详情见下文 ...

  9. 在Virtual Box的shared folder中编译android源码。

    一些诡异的选择会带来诡异的问题,比如android源码sync到一个shared folder里面,然后在这个Folder里面编译android源码. 问题:在SharedFolder下使用make ...

最新文章

  1. 华为OJ 名字美丽度
  2. Caffe实战二(手写体识别例程:CPU、GPU、cuDNN速度对比)
  3. BINDER SECCTX PATCH ANALYSIS
  4. ​【Python基础】告别枯燥,60 秒学会一个 Python 小例子(文末下载)
  5. mysql为什么要编译安装_Mysql编译安装
  6. [python学习] 简单爬取图片网站图库中图片
  7. 46. Permutations
  8. ubuntu 转mysql_(转)Ubuntu 16.04下安装MySQL
  9. 为什么技术团队领导者多是后台开发人员
  10. 一代私募传奇落幕:黑石创始人彼得森留下4000亿美元离世
  11. 高等代数第3版下 [丘维声 著] 2015年版_义务教育数学课程标准(2011年版)(部分内容)...
  12. 光立方程序详解_C ++程序使用宏查找数字的立方
  13. BackgroundWorker类的使用例程
  14. 如何培养一个人:从育儿谈起
  15. linux内核支持浮点吗,浅谈linux kernel对于浮点运算的支持
  16. 海通股票交易接口查询当日成交c++源码分享
  17. 操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权
  18. glut linux 安装包,“包GLUT不存在”,即使安装在Arch Linux的CL-的OpenGL
  19. 超定和欠定方程的概念
  20. vue中的插槽--slot和v-slot

热门文章

  1. mysql 查询后怎么定位列_MySQL如何定位并优化慢查询sql
  2. 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...
  3. mathematica 可编辑pdf_Mathematica学习笔记[1]
  4. qq分享提示设备未授权_QQ帐号已经可以注销了,过去几天,第一批尝试的人已经放弃了!...
  5. db2 replace函数的用法_SQL基础知识:常用字符处理函数
  6. java伪协议_JavaScript中伪协议 javascript:使用探讨
  7. 蚁群算法,PSO算法以及两种算法可以融合的几种方法
  8. 互动整合营销_今天,我们谈谈展会的整合营销!
  9. unity可以用python编写吗_基于python的Cා代码生成器(用于服务并应用于unity),一个,c,为了,并且,Unity...
  10. C#程序中设置全局代理(Global Proxy)