android源码编译与调试.doc_第1页
android源码编译与调试.doc_第2页
android源码编译与调试.doc_第3页
android源码编译与调试.doc_第4页
android源码编译与调试.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android源码编译与调试整理:Joey Yin如有任何问题,请联系系统环境ubuntu-11.10-desktop-i386onVMware Workstation 8.0.0 build-471780onWindowsXP源码编译软件环境基本按照/source/initializing.html,未设置ccache。下载源码/source/downloading.html,版本:android-4.0.3_r1下载3、4天的时间才最终完成。编译make j4出现错误,发现ubuntu-11.10默认安装的是gcc4.6,但编译android需要gcc4.4。重新安装gcc4.4后执行 make j4,顺利完成编译。执行emulator出现错误,发现是由于之前安装了android sdk的缘故。在 /.bashrc中将android sdk的路径从PATH中移除,同时增加:export ANDROID_PRODUCT_OUT=/home/joeyyin/android_4.0.3_r1/out/target/product/genericexport ANDROID_PRODUCT_OUT_BIN=/home/joeyyin/android_4.0.3_r1/out/host/linux-x86/binexport PATH=$ANDROID_PRODUCT_OUT:$ANDROID_PRODUCT_OUT_BIN:$PATH编译生成的emulator等其他bin工具在/home/joeyyin/android_4.0.3_r1/out/host/linux-x86/bin目录。System.img, userdata.img, ramdis.img在/home/joeyyin/android_4.0.3_r1/out/target/product/generic其中Ramdisk.img是emulator的文件系统。System.img包括主要的包、库等文件。Userdata.img包括了一些用户数据,emulator负责加载3个映像文件后,会把system.img,userdata.img分别加载到ramdisk文件系统的system和userdata目录下。再执行emulator,模拟器顺利启动。cd /android_4.0.3_r1/out/target/product/genericemulator -system system.img -data userdata.img -ramdisk ramdisk.img编译模块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来编译指定目录的模块,如编译联系人:$ mmm packages/apps/Browsers/编完之后生成两个文件:out/target/product/generic/data/app/Browser.apkout/target/product/generic/system/app/Browser.apk可以使用$ make snod重新生成system.img,再运行模拟器编译SDK$make sdk悲剧的出现以下错误:解决:查找alarmprovider模块,没有发现搜索build目录下含alarmprovider的项目去掉这两个文件中的PRODUCT_PACKAGES中alarmprovider。网上也有关于这个问题的解答:“Indeed there is no a module with name AlarmProvider in the source tree now.To fix it, remove AlarmProvider from the product definition in thefollowing files:./build/target/product/large_emu_hw.mk:25: AlarmProvider./build/target/product/generic_no_telephony.mk:24: AlarmProvider“$ make sdk又先后出现和以上类似的针对Sync, Updater, SyncProvider, 看了网上的信息,也可以使用 make PRODUCT-sdk-sdk进行编译将generic_no_telephony.mk, large_emu_hw.mk恢复$ make PRODUCT-sdk-sdk半小时候顺利完成编译。make SDK和make PRODUCT -sdk-sdk有何异同?编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.joeyyin_linux- x86.zip和android-sdk_eng.joeyyin_linux-x86目录。android-sdk_eng.joeyyin_linux-x86就是 SDK目录实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.joeyyin_linux-x86移出来此后的应用开发,就在该SDK上进行,所以把在/.bashrc中增加sdk tools/platform_tools到PATH中:export ANDROID_SDK_HOME=/home/joeyyin/android_4.0.3_r1/out/host/linux-x86/sdk/android-sdk_eng.joeyyin_linux-x86export PATH=$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/platform_tools: $PATH创建Android Virtual Device编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:$ android list创建AVD:$ android create avd -t 1 -n myavd可以android help来查看上面命令选项的用法。创建中有一些选项,默认就行了再执行android list,可以看到AVD存放的位置以后每次运行emulator都要加-avd myavd或myavd选项:$ emulator -avd myavd源码编译分析首先需要理解makefile的编写规则推荐一篇介绍文章/dskit/archive/2010/02/09/1666771.html。Makefile - build/core/main.mkEclipse+adtEclipse 安装下载eclipse from /downloads/?osType=linux这个版本在后面编译安装adt时会有错误,建议下载下面的版本:$ tar zxvf eclipse-jee-indigo-SR2-linux-gtk.tar.gz$ tar zxvf eclipse-SDK-3.7.2-linux-gtk.tar.gz$ sudo mv eclipse /opt$ cd /opt$ sudo chown -R root:root eclipse$ sudo chmod -R +r eclipse$ sudo touch /usr/bin/eclipse$ sudo chmod 755 /usr/bin/eclipse$ sudo vim /usr/bin/eclipse文件内容如下:#!/bin/sh#export MOZILLA_FIVE_HOME=/usr/lib/mozilla/export ECLIPSE_HOME=/opt/eclipse$ECLIPSE_HOME/eclipse $*$ sudo vim /usr/share/applications/eclipse.desktop文件内容如下:Desktop EntryEncoding=UTF-8Name=EclipseComment=Eclipse IDEExec=eclipseIcon=/opt/eclipse/icon.xpmTerminal=falseType=ApplicationCategories=GNOME;Application;Development;StartupNotify=trueStart eclipse firsttime:$ /opt/eclipse/eclipse -clean &编译安装adt$ cd /android_4.0.3_r1/out/host/linux-x86$ mkdir adt$ cd /android_4.0.3_r1/sdk/eclipse/scripts$ export ECLIPSE_HOME=/opt/eclipse$ ./build_server.sh /android_4.0.3_r1/out/host/linux-x86/adt处理失败,出现很多类似以下依赖错误,据说要下载安装JavaEE版eclipse。Missing required plug-in com.android.ide.eclipse.adt_0.0.0.直接启动eclipse - help -install new software -add - /android/eclipse/天煞的,这个地址居然无法连接【难道又被天朝封了?】下载javaee版本eclipse安装后,重新编译adt成功。运行eclipse$ eclipsehelp -install new software -add - 选择archive,刚刚编译生成adt zip包安装完成后重启eclipse, 配置sdk信息悲剧的是这个编译会删除之前编译的sdk,所以这一步最好在make sdk之前做。创建应用Helloandroid:/resources/tutorials/hello-world.html导入android源码到eclipse1、将 源码目录developmentideeclipse 中的.classpath复制到源码根目录下。$ cd /android_4.0.3_r1$ cp /home/joeyyin/android_4.0.3_r1/development/ide/eclipse/.classpath .$ chmod u+w .classpath2、更改eclipse缓存设置 在eclipse安装根目录下修改eclipse.ini -Xms128m -Xmx512m -XX:MaxPermSize=256m3、将 源码目录developmentideeclipse 中的android-formatting.xml和android.importorder导入eclipse android-formatting.xml用来配置eclipse编辑器的代码风格;android.importorder用来配置eclipse的import的顺序和结构。window-preferences-java-Code style-Formatter中导入android-formatting.xml window-preferences-java-Code style-Organize Imports中导入android.importorder。4、导入源码新建Java Project 非android project,指定一个nameandroid_4.0.3_r1,接着将use default location勾掉,指定到你源码的目录下/home/joeyyin/android_4.0.3_r1,finish。出现两个miss required library的错误。反正不在eclipse中编译,不管这个错误了。Workspace中的其他project可设置android.jar attach到之前导入的android源码工程(android_4.0.3_r1)Properties - java build path -libraries - 设置android.jar的source attachment 到workspace - android_4.0.3._r1在windows下类似操作在eclipse中调试android系统应用/服务:按以下说明,使用browser测试过,可以断点跟踪调试。/view/cbc4773410661ed9ad51f3e8.html使用GDB调试native code调试webkit1. 进入android系统源码根目录,然后执行 source build/envsetup.sh 2. 启动模拟器,并打开浏览器 Emulator avd myavd 3. 在终端中执行 adb forward tcp:5039 tcp:5039 4. 打开另一个终端,执行 adb shell ps 找到com.android.browser 进程号 5. 执行 adb shell gdbserver :5039 -attach pid pid为com.android.browser 进行号 正常反馈: Attached; pid = * Listening on port 5039 6. 回到第一个终端,导出环境变量,adb,arm-eabi-gdb等的路径,在执行gdbclient报错时,可将相应的命令 的路径导出 export PATH=/home/joeyyin/android_4.0.3_r1/out/host/linux-x86/sdk/android-sdk_eng.joeyyin_linux-x86/platform-tools:$PATH export PATH=/home/joeyyin/an

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论