life02

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  197 随笔 :: 3 文章 :: 37 评论 :: 0 Trackbacks
http://blog.csdn.net/xixinyan/article/details/6965837


Android 源码编译

关于Android源码的获取、编译等,网上有很多的帖子解答,但其实都是基于官方网站说明来写的,算是汉化过程吧,因此如果帖子看的不明,可以上源码官网寻找答案。

http://source.android.com/

下面是自己在Ubuntu 8.04系统下编译过程:

1.源码获取

可参照前面写的博客:http://www.cnblogs.com/playing/

1).获得官方Android源码 repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread

2).获得CyanogenMod Android源码  repo init -u git://github.com/CyanogenMod/android.git -b gingerbread

(源码位置github里面的CyanogenMod项目 https://github.com/CyanogenMod

3).获得三星Galaxy Android源码 repo init -u git://github.com/drakaz/android.git -b gaosp-gingerbread

      (源码位于github里面drakaz项目 https://github.com/drakaz

(因为自己要搞的手机是三星i7500 所以特别加了Galaxy Android,其实也是CyanogenMod 里面的一个分支吧)


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-java6-jdk (或者 
sudo apt-get install sun-java5-jdk)

(很多其实系统已经安装了,除了红色标注要安装外,其他编译时没有在安装吧....)

特别注意:

JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older (官方说明)

即在编译2.3之前的版本需要用JDK 5 ,2.3及2.3之后的版本用JDK6

3.编译源码

在命令行里面执行make命令:

$make

然后是漫长的等待......

编译成功后会在代码目录下多了一个out目录

可以看到命令行里面输出如下信息:

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<span class="Apple-style-span" style="font-family: verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px; white-space: normal; background-color: #ffffff;"> </span>

===================================================================================

后续编译:

往往我们会已经编译过了源码,但是会再次修改里面的某个文件,某个项目,这时候我们就可以单独编译了...

先在android目录下执行
 $ . build/envsetup.sh
 然后你就会多出几个可用的命令。

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

=====================================================================================

4.测试运行

1)先设置环境变量:

 打开~/.bashrc文件, 并在最后添加下面两行:
PATH=”$PATH:$HOME/android/out/host/linux-x86/bin”
ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
export ANDROID_PRODUCT_OUT

(就是配置你生成的out目录)

2)运行模拟器:

cd $HOME/android/out/target/product/generic

emulator -image system.img -data userdata.img -ramdisk ramdisk.img

如果最后能进入到系统并看到一个大时钟, 说明就大功告成了!!!!


5.编译过程出现的问题

如果你以为按照上面一步步做就能成功编译,那就想得太简单了,很多时候编译过程中会出现一些意想不到的错误,导致编译中断!不过还好,遇到的问题一般网上都是有解决方案的,只要搜索一下就ok了,下面是自己编译过程中遇到错误:

1.缺少工具,如g++

可通过 sudo apt-get install ... 来安装

2.Android编译时找不到stub-64.h的问题

把几个Android.mk中的 -m64 的地方给注释掉了,它们在这里: external/clearsilver/cgi external/clearsilver/java-jni external/clearsilver/util external/clearsilver/cs
这是用java6会出现这问题,如果用java5 应该就不会出现!

参考文章:http://www.webgou.info/content/programming/262/ 


posted on 2011-12-25 23:23 life02 阅读(674) 评论(0)  编辑 收藏 引用 所属分类: Android开发

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理