关闭

android源码编译

392人阅读 评论(0) 收藏 举报


1.下载 android源码并更新之
建议不要用repo来下载(android源码超过1G,非常慢)建议下载cupcake项目,命令如下:
$repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake (如果不出错的话,5分钟内应提示成功,跟网络自己速度有关)
然后执行如下命令:
$repo sync(更新很慢,用了3个小时)

 

2、编译android源码(使用make命令)
更新源码完成后并得到~/project/android/cupcake/out 目录
进入android源码目录执行如下命令:
$make

3.在模拟器上运行编译好android

android SDK的emulator程序在android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要加载一些后缀为.image 的文件,默认加载android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(内核) ramdisk.img system.img userdata.img  这三个

编译好android之后,
emulator    程序在~/project/android/cupcake/out/host/linux-x86 /bin下,
ramdisk.img system.img userdata.img    文件则在~/project/android/cupcake/out/target/product/generic下

我们增加模拟器的环境变量
$vim ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量
export ANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};

最后,同步这些变化:
$source ~/.bashrc

启动模拟器:
$emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。
out/host/linux-x86/bin下生成许多有用工具(包括android SDK/tools的所有工具),因此,可以把eclipse中android SDK的路径指定到out/host/linux-x86/bin进行开发了

4.编译linux kernel(可选,主要是系统移植需要)
直接make android源码时,并没有make linux kernel。因此是在运行模拟器,所以不用编译 linux kernel。如果要移值android,或增删驱动,则需要编译 linux kernel

 

5.编译单个模块(如果需要修改系统某些应用,那么就需要单个应用编译)
android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
$. 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.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人,具体操作如下:
$. build/envsetup.sh
$mmm packages/apps/Contacts/    
编完之后生成两个apk文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重新生成system.img
再运行模拟器

 

6.编译SDKandroid源码的编译【直接执行make命令是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发 android了】步骤如下:

1)修改/frameworks/base/include/utils/Asset.h
‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’
原因是Eclipse编译工程需要大于1.3M的buffer

2)编译ADT(记住我们先编译adt后编译sdk)
    若下载的是cupcake源码需进入:development/tools/eclipse/scripts目录,如果下载的是主线代码,需要进入:sdk/eclipse/scripts目录(才会有build_server.sh脚本命令),执行如下命令

$export ECLIPSE_HOME=你的eclipse路径
$./build_server.sh 你想放ADT的路径

注意:在执行./build_server.sh命令时,会将out/host/linux-x86/目录下生成的sdk及我们之前make后生成的文件(ramdisk.img,userdata.img,system.img)给清除掉,这也就是我们为什么要先编译adt后编译sdk的原因。

3)执行make sdk。
$make sdk

编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/目录下,此目录下有android-sdk_eng.xxx_linux- x86.zip文件和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是SDK目录
注意:当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来

 

原文地址:http://cqfly.iteye.com/blog/764888

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:142089次
    • 积分:1918
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:112篇
    • 译文:0篇
    • 评论:21条
    文章分类
    最新评论