Eclipse中跟踪调试Android源代码

注:以下是根据网上资料搜集整理所得,只为个人笔记

以下代码是MTK平台,PC操作系统为ubuntu

一、准备工作

确保机器上已经安装并配置下列软件环境:JDK、Eclipse 、 Android SDK 、 ADT

如果还没配置好,请参看http://blog.csdn.net/jerome_home/article/details/8372613

Android源码要都是已经编译过的,且编译时采用的是Eng模式即工程模式(vs User mode用于release软件版本)

二、基本设置

准备工作完毕之后,现在做一些基本的设置。

1. 把Android源码路径<Android_ROOT>下的development/ide/eclipse中的.classpath文件复制到<Android_ROOT>下

2. 修改Eclipse的设置

修改eclipse.ini文件

1.     -Xms40m

2.     -Xmx384m

改为:

1.     -Xms128m

2.     -Xmx512m

这里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。

 

如果在导入时有报fileindex ...错误,可以继续加大对应的值,例如我的修改

--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Xms1024m
-Xmx2048m

三、Eclipse中创建工程

1. File >New > Java Project

2. 输入项目名

3. 取消Usedefault location,并在Location中输入或选择Android源码路径<Android_ROOT>

4. 选择Next> Finish。会有一个比较长的等待过程



四、调试环境配置

1. 右击刚刚创建的项目

2. 选择:DebugAs > Debug Configurations…;

3. 右击“RemoteJava Application”,选择New。或者直接双击“RemoteJava Application”创建一个新的RemoteApplication。

4. 填入Name;Project选择刚刚创建的项目;端口填写8700。Common中的Debug项需要选中

5. Apply保存,然后退出。




五、调试

可以通过模拟器或者真机调试。无论模拟器还是真机,都要:

·         先启动机器(模拟器启动,或真机打开,并通过USB与PC正常连接),也就是要在DDMSPerspective的Devices视图中看到有机器连接;

·         确保运行中的代码与你要调试的代码是一样的。

  DDMS启动如下:Windows->OpenPerspective->Other...->DDMS,右上角有如下图栏


      如果要调试某个App,先在模拟器或者Target上启动该app,然后按返回键,这时该进程显示在DDMS的进程列表中,高亮该进程项,在源文件中设置断点,然后进入Java工程列表,右击该应用,选择DebugAs > Debug Configurations…,然后选择Debug。再点击右上角的Debug,开始调试。

假如,我们想要跟踪锁屏解锁的调用情况。

我们知道解锁的实现是在LockScreen.java的onGrabbedStateChange()函数,运行在system_process进程中。那么,

1.在onGrabbedStateChange()中要调试的地方设置断点;

2.在DeviceView中,选中system_process,并点击小爬虫图标;

3.按上述红字部分开始调试

4.在模拟器或真机上,执行到解锁操作时,代码就会停在断点处;


这样你就可以,

·         把鼠标放在某个变量上,看它的值。也可以Eclipse中的各种调试手段调试你的代码。

·         通过Step Into /Step Over / Resume / Suspend / Terminate等在DebugView中控制程序的执行。


通过连接真机,但是在DeviceView中无设备,用终端执行adb remount,提示找不到设备,这时需要设置下USB权限,因为ubuntu这样的系统都是默认以非root身份在运行的,要使用usb调试,需要sudo支持。如下操作

$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 413c:2106 Dell Computer Corp.
Bus 002 Device 002: ID 0461:4d81 Primax Electronics, Ltd
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 010: ID 0bb4:0c87 High TechComputer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

列表中,Bus 001 Device 010: ID 0bb4:0c87 High Tech Computer Corp. 这一行为手机的usb使用端口,记录一下。

$sudo gedit /etc/udev/rules.d/70-android.rules

加入以下内容(注意非黑色部分值的对应):

SUBSYSTEM=="usb",ATTRS{idVendor}=="0bb4",ATTRS{idProduct}=="0c87",MODE="0666"
其中的idvendor idProduct指的是USB的ID。

运行命令,重启udev:

$sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$sudo service udev restart

三、重新启动adb server
拔掉usb重新连上再执行:

sudo ./adb kill-server
./adb devices

如果有设备,说明设置已经成功了

四、使用usb进行调试

在eclipse的DDMS选择相应的devices,可以看到log,调试就和上面的方法一致。


在调试非内置apk时,更新到手机上方法如下:

先卸载对应的应用

1. adb remount  //重新mount分区的命令,让system分区从只读变成可读可写

2.      adb shell

3.      adb rm /system/app/appName.apk

4.      exit

安装应用 adb install appPath/appName.apk

我的个人习惯是用编译生成的apk直接覆盖原来的,方法如下:

adb remount

adb push appPath/appName.apk /system/app

这样就可以了。


对于MTK部分的应用调试时出现Source notfound.提示

修改根目录下的.classpath文件,加入应用的目录,例如

<classpathentrykind="src" path="mediatek/source/packages/LauncherPlus/src"/>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值