转载 自http://hi.baidu.com/sunflow/blog/item/5db067be20e4b11a18d81f3b.html

Android Eclipse 源码工程 调试 2010-11-09 11:24


1, ubuntu 下源码编译
最好切换到root用户下进行操作
$ sudo -s
1.1,下载jdk1.5 并安装(下载自解压版本并设置环境变量)
编辑/root/.bashrc 添加
#set java environment
export JAVA_HOME=/work/jdk1.5.0_22
export JRE_HOME=JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export SDK_HOME=/work/froyo/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$SDK_HOME:/work/froyo/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/work/froyo/out/target/product/generic
1.2,安装(apt-get install xxx) git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
1.3,下载源码(网上有详细说明)
1.4,编译源码
$ export ANDROID_JAVA_HOME=$JAVA_HOME
$ make
查看编译过程中是否有错误,一般情况不会有错误,如果有错误可能是某个依赖包没有安装,安装提示的依赖包后重新make

1.5,生成sdk
$ make PRODUCT-sdk-sdk ###使用make sdk 会出现R文件不能自动生成的问题
编译完成后会在/work/froyo/out/host/linux-x86/sdk/目录生成sdk
1.6,编译完成之后查看是否编译成功
$ . build/envsetup.sh
$ emulator& //启动模拟器,如果能成功启动代表编译成功。

2.Android 在eclipse中进行调试
2.1,拷贝development/ide/eclipse/.classpath到源代码根目录并修改.classpath
删除下面两行
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar"/>
添加 <classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>


2.2,在eclipse中修改

2.2.1. 通过create file from existing source 导入froyo源代码
2.2.2. 展开packages/providers/CalendarProvider/src
2.2.3. 展开包: com.android.providers.calendar
2.2.4. 右键点击包com.android.providers.calendar
2.2.5. 选择 "new file"
2.2.6. 在对话框中选择点击 "Advanced >>" 按钮, 可以看到"Link to file in the file system" checkbox,
2.2.7. 勾选上 checkbox. 这时 "Browse..." 可用.
2.2.8. 点击 "Browse..." 按钮,选择EventLogTags.java (e.g.,out/target/common/obj/APPS/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java)
2.2.9. 点击OK
2.2.10. 点击 Finish (in "New File")


2.3 同样的方式修改com.android.providers.contacts的问题

OR

ADD the following to .classpath [Another solution for EventLogTags.java]

<classpathentry kind="src" path="out/target/common/obj/APPS/CalendarProvider_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/ContactsProvider_intermediates/src/src"/>


3,调试

在IDE(eclipse)中修改源代码后在shell中编译运行
源码自带编译工具
先在android源码根目录执行 . build/envsetup.sh 再通过m/mm/mmm进行编译
- 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.

$cd /path/to/android/root
$. build/envsetup.sh
$lunch 1 # 初始化模拟器等
$make/m/mm/mmm #
$emulator& # you should see a GUI picture of a phone
$ddms& #调试工具


3.1 修改APK应用:在packages中的应用如果修改后都可以单独编译。先执行
$. build/envsetup.sh #初始化
$mmm packages/providers/ContactsProvider/
##用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把system文件夹打包为system.img
##可以使用make snod将模块打包到system.img中,也可以使用 adb install *.apk安装
注:通过mmm packages/providers/ContactsProvider/ 编译后的apk在 out/target/product/generic/system/app
这时候通过 adb install out/target/product/generic/system/app/xxx.apk 安装你刚修改过的apk就可以在模拟器上看到你修改的效果了。

3.2 修改framework:如果在Contacts.java中修改了,必须重新编译下framework。先执行
$ . build/envsetup.sh #初始化
#网上有的说要执行 make update-api,实际上直接make PRODUCT-sdk-sdk就可以将修改后的framework编译到sdk中。 #编译framework后,那些修改了的应用可以不用再单独编译了。4~6分钟
$ make PRODUCT-sdk-sdk #重新生成SDK 10~20分钟

More Info

http://www.blogjava.net/lihao336/archive/2011/05/05/348715.html

更多相关文章

  1. 编译Android源码时出现的java版本的问题
  2. mac下搭建cocos2d-x2.2.1版本android编译环境教程
  3. Android(安卓)- 收藏集
  4. Android(安卓)Studio如何导入android源码
  5. NDK使用log的问题
  6. Android(安卓)repo/git server 建立过程
  7. 使用Android(安卓)studio阅读Android源码
  8. android 修改AlertDialog的黑色背景的两种方式及圆角边框的设置
  9. android 系统定制之编译方法总结

随机推荐

  1. Android(安卓)CTS windows环境下测试
  2. Android中实现布局背景模糊化处理的方法
  3. android的Fragment解析(一行代码引发的思
  4. Android(安卓)CoordinatorLayout高级用法
  5. android之Notification实现
  6. Android单例关闭应用程序
  7. Android(安卓)内存信息查看
  8. Android(安卓)Menu
  9. 安卓开发之详解getChildFragmentManager
  10. Android:LaunchMode使用场景