2022年Android源码的编译-教程[参 .pdf
-
资源ID:34264698
资源大小:65.92KB
全文页数:5页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年Android源码的编译-教程[参 .pdf
/*版本: 1.0日期: 2009 03 18作者: HKjinzhao备注:初始版本*/*版本: 1.1日期: 2009 03 27作者: HKjinzhao备注:增加make sdk,修改一些内容*/本次编译过程主要参考官方文档(http:/ (如http:/ Ubuntu8.101、安装一些环境sudo apt get install build essentialsudo apt get install makesudo apt get install gccsudo apt get install g+sudo apt get install libc6 devsudo apt get install patchsudo apt get install texinfosudo apt get install libncurses devsudo apt get install git core gnupgsudo apt get install flex bison gperf libsdl dev libesd0 dev libwxgtk2.6 dev build essential zip curlsudo apt get install ncurses devsudo apt get install zlib1g devsudo apt get install valgrindsudo apt get install python2.5安装 java 环境sudo apt get install sun java6 jre sun java6 plugin sun java6 fonts sun java6 jdk注:官方文档说如果用sun java6 jdk 可出问题,得要用sun java5 jdk。经测试发现,如果仅仅 make(make 不包括 make sdk) ,用 sun java6 jdk 是没有问题的。而make sdk,就会有问题,严格来说是在make doc 出问题,它需要的javadoc 版本为 1.5。因此,我们安装完sun java6 jdk 后最好再安装sun java5 jdk,或者只安装sun java5 jdk。这里 sun java6 jdk 和 sun java5 jdk 都安装,并只修改javadoc.1.gz 和 javadoc。因为只有这两个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 是 make sdk 用到的。这样的话,除了javadoc 工具是用1.5 版本,其它均用1.6 版本:sudo apt get install sun java5 jdk修改 javadoc 的 linkcd /etc/alternativessudo rm javadoc.1.gzsudo ln s /usr/lib/jvm/java 1.5.0 sun/man/man1/javadoc.1.gzjavadoc.1.gzsudo rm javadocsudo ln s /usr/lib/jvm/java 1.5.0 sun/bin/javadoc javadoc2、设置环境变量vim /.bashrc在.bashrc 中新增或整合PATH变量,如下#java 程序开发 /运行的一些环境变量JAVA_HOME=/usr/lib/jvm/java 6 sunJRE_HOME=$JAVA_HOME/jreexport ANDROID_JAVA_HOME=$JAVA_HOMEexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport JAVA_PATH=$JAVA_HOME/bin:$JRE_HOME/binexport JAVA_HOME;export JRE_HOME;export CLASSPATH;HOME_BIN=/bin/export PATH=$PATH:$JAVA_PATH:$JRE_PATH:$HOME_BIN;#echo $PATH;最后,同步这些变化:source /.bashrc3、安装 repo(用来更新android 源码)创建 /bin 目录,用来存放repo 程序,如下:$ cd $ mkdir bin并加到环境变量PATH中,在第 2 步中已经加入下载 repo 脚本并使其可执行:$ curl http:/android.git.kernel.org/repo/bin/repo$ chmod a+x/bin/repo4、下载android 源码并更新之建 议 不 要 用repo来 下 载 ( android源 码 超 过1G, 非 常 慢 ), 直 接 在 网 上 下 载http:/ 而且解压出来的cupcake 下也有 .repo 文件夹,可以通过repo sync 来更新 cupcake 代码:tar xvfcupcake.tar.gz名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - repo sync(更新很慢,用了3 个小时)5、编译 android 源码 ,并得到 /project/android/cupcake/out目录进入 android 源码目录:make这一过程很久(2 个多小时)6、在模拟器上运行编译好androidandroid 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.imgsystem.imguserdata.img编译好android之后, emulator在 /project/android/cupcake/out/host/linux x86/bin下,ramdisk.imgsystem.imguserdata.img则在/project/android/cupcake/out/target/product/generic下cd /project/android/cupcake/out/host/linux x86/bin增加环境变量vim /.bashrc在.bashrc 中新增环境变量,如下#java 程序开发 /运行的一些环境变量export ANDROID_PRODUCT_OUT=/project/android/cupcake2/out/target/product/genericANDROID_PRODUCT_OUT_BIN=/project/android/cupcake2/out/host/linux x86/binexport PATH=$PATH:$ANDROID_PRODUCT_OUT_BIN;最后,同步这些变化:source /.bashrcemulator 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 进行开发7、编译 linux kernel直接 make android 源码时,并没有make linux kernel。因此是在运行模拟器,所以不用编译linux kernel。如果要移值android,或增删驱动,则需要编译linux kernellinux kernel 的编译将在以后的文章中介绍。8、编译模块android 中的一个应用程序可以单独编译,编译后要重新生成system.img在源码目录下执行. build/envsetup.sh(.后面有空格)就多出一些命令:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - croot:Changesdirectory 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 Javafiles. resgrep: Greps on all local res/*.xml files. godir:Goto the directory containing a file.可以加 help 查看用法我们可以使用mmm 来编译指定目录的模块,如编译联系人:mmm packages/apps/Contacts/编完之后生成两个文件:out/target/product/generic/data/app/ContactsTests.apkout/target/product/generic/system/app/Contacts.apk可以使用 make snod 重新生成 system.img再运行模拟器9、编译 SDK直接执行 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 的 buffer2)编译 ADT。注意,我们是先执行2) ,再执行 3) 。因为在执行 ./build_server.sh 时,会把生成的SDK清除了。用上了新的源码,adt 这个调试工具也得自己来生成,步骤如下:进入 cupcake 源码的 development/tools/eclipse/scripts目录,执行:export ECLIPSE_HOME=你的 eclipse 路径./build_server.sh你想放 ADT 的路径3)执行 make sdk。注意,这里需要的javadoc 版本为 1.5,所以你需要在步骤1 中同时安装sun java5 jdkmake 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 移出来4)关于环境变量、android 工具的选择名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 目前的 android 工具有:A、我们从网上下载的SDK ( tools 下有许多android 工具, lib/images 下有 img 映像)B、我们用make sdk 编译出来的SDK ( tools 下也有许多android 工具, lib/images 下有 img映像)C、我们用 make 编译出来的out 目录(tools 下也有许多android 工具, lib/images 下有 img映像)那么我们应该用那些工具和img 呢?首先,我们不会用A 选项的工具和img, 因为一般来说它比较旧,也源码不同步。 测试发现,如果使用B 选项的工具和img,android 模拟器窗口变小(可能是skin 加载不了),而用 C 选项的工具和img 则不会有此问题。有些 android 工具依赖android.jar (比如 android) ,因此,我们在eclipse 中使用 B选项的工具( SDK) ,使用C 选项的img。其实,从emulator help build images 也可以看出,ANDROID_PRODUCT_OUT 是指向 C选项的 img 目录的不过,除了用A 选项的工具和img,用 B或 C 的模拟器都不能加载sdcard,原因还不清楚。5)安装、配置ADT安装、配置ADT请参考官方文档6)创建 Android Virtual Device编译出来的SDK是没有 AVD(Android Virtual Device)的,我们可以通过android 工具查看:android list输出为:Available Android targets:1 Android 1.5APIlevel: 3Skins:HVGA P , QVGA L,HVGA L,HVGA(default), QVGA PAvailable Android Virtual Devices:表明没有 AVD。 如果没有 AVD, eclipse 编译工程时会出错 (Failed to find a AVDcompatible withtarget Android 1.5. Launch aborted.)创建 AVD:android create avd t 1 c /sdcard.img n myavd可以 android help来查看上面命令选项的用法。创建中有一些选项,默认就行了再执行 android list,可以看到AVD 存放的位置以后每次运行emulator 都要加 avd myavd 或myavd 选项,这里eclipse 才会在你打开的emulator 中调试程序注意:这样, SDK和 ADT 就生成了,就按照官方文档把他们整合到Eclipse,这里不再细说了。建个 android 的新工程,试试你自己编译的sdk。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -