很久以来,我一直想找一种方法来断点调试安卓系统自身的Service,或者bind类型的Service,比如我想看WifiManager里面的getWifiApConfiguration函数是如何实现的。从代码看到:
public WifiConfiguration getWifiApConfiguration() {
try {
return mService.getWifiApConfiguration();
} catch (RemoteException e) {
return null;
}
}
它直接调用的是一个mService的变量。而这个东西是一个实现了IWifiManager的接口的类。在我自己的应用里无法用断点命中它,虽然我能找到它的真实实现是在/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java 中。
 
今天,感谢这篇文章:
 
终于找到了断点调试系统Service的方法:
 
1. 首先获得一份Service的源代码。比如/frameworks/base/services/accessibility.
2. 在Android Studio中,导入工程->Create project from existing sources,然后是选择要添加到项目根目录的目录,选择libraries,选择Modules,选择SDK,一路NEXT即可. 现在,代码被添加进来了,尽管缺少需要的类库,显示全是错误,但是没关系,不影响调试。
3. 在Run菜单中,选择Edit configurations,添加一个Remote类型的调试。端口号默认的是5005,你可以修改成你需要的任意值。比如可以设置成9999
 

4. 用 adb shell ps | grep system_server 找出Accessibility Service所在的进程,这里是 548
system    548   195   1716200 121628 ffffffff b6e855d8 S system_server
5. 同时,用adb jdwp确保548是可以调试的。这一步只是用来看一下,不是必需。
6. adb forward tcp:9999 jdwp:548 这是最关键的一步了,把本机的9999端口转向远端机的jdwp 548端口。这里,9999是你刚才设置的调试配置中的端口。Android Studio会在调试开始时在本地的这个端口上监听。也就相当于在 jdwp 548端口监听了。
7. 在android Studio中运行这个debug。当service相关函数被调用到的时候,会发现断点命中。
 
如果你要调试的应用还没有运行起来,比如,是你自己的应用。你可以在开发者选项里面选择它为 调试应用,或者通过 adb shell am set-debug-app -w <包名> 来设置它在运行起来之后等待调试器。然后它会等待调试器挂载,你在进行上述动作。
 
好了,现在基本所有的系统级别的Java都能断点调试了,看起代码来应该更容易了。

【原创】如何用Android Studio断点安卓自带Service或Bind类型的Service的更多相关文章

  1. Android Studio断点调试

    Android Studio断点调试 Android Studio包含一个debugger程序,可以帮助你在模拟器和真机上调试你的android应用.通过Android Studio的debugger ...

  2. 如何用Android Studio查看build.gradle源码

    上一篇博客里讲过 build.gradle 里的每一行代码基本都是在调用一个方法,既然是这样,我们就可以用 android studio(下面简称as) 去查看它源码的方法注释说明,这样就可以理解每个 ...

  3. Android studio 断点技巧

    写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug:那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Evaluate Expression , 知道条件断 ...

  4. 如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?

    0x00 前言 大家常常会抱怨安卓平台没有一个统一.好用的性能检查工具.不能像iOS的instrument那样方便. 图片来自:Instruments Help 比如,Unity Blog在3年前就已 ...

  5. 【Android Studio】安卓开发初体验1——安装与试用

    安装 (安装预留硬盘(C盘)空余空间16G以上,8G以上内存) Intel用户: 安装Android Studio和AVD(安卓虚拟机 Android Virtual Device) 安装过程需要注意 ...

  6. 如何用Android Studio打多包名APK

    问题:项目中不同的分发渠道可能需要打包多种APK(同样的代码),包名可能是不一样的,如果一个一个修改包名重新编apk是很麻烦,可以参考下列步骤在Android Studio上操纵Gradle来打包不同 ...

  7. 如何用Android Studio同时使用SVN和Git管理项目

    这篇来讲讲如何在 Android Studio 上同时用 SVN 和 Git 来管理项目.我知道,你肯定会说我吃饱了撑着,没事找事做,为啥要同时用 SVN 和 Git 来管理项目.问题是,我也不想啊, ...

  8. Android studio 创建安卓项目hello

    Android studio是一个非常好用的软件,只不过在使用的最开始,由于各种问题,会失败,并且新手本身就不懂的情况下,更加的懵逼. 这里我来记录一下我遇到过的一点坑. 首先,Android stu ...

  9. android studio学习----android studio断点调试

    先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指 ...

随机推荐

  1. 细读cow.osg

    细读cow.osg 转自:http://www.cnblogs.com/mumuliang/archive/2010/06/03/1873543.html 对,就是那只著名的奶牛. //Group节点 ...

  2. zk textbox 更改字体大小及高度

    .z-textbox{ height:100px; font-size:30px; padding:20px; } <textbox/> 效果如下:

  3. 好看的IDE配色方案让代码看起来不再那么凶猛了

    写这篇小文的初衷是,笔者是原教旨主义者,一直坚持用IDE默认的配色方案.另外也觉得网上黑色系的配色方案太过bling bling了.但今天尝试用新的配色方案后,兴奋地发现对代码的好感度大幅提升. 嗯, ...

  4. ComboSelect 下拉筛选

    Jquery Combo Select下拉筛选 http://www.dowebok.com/179.html

  5. VS启用调试

    今天访问127.0.0.1  发现 与localhost 不是访问的同一个内容. 于是乎,就向到了另一个方法来调试程序. 1.在IIS 建立站点 并指向程序源. 2.启动vs 调试→附加到进程→找到w ...

  6. iOS WKWebView的javascript alert 不弹的解决方案

    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiate ...

  7. 网页语言有html,php.jsp,无论什么语言浏览器总是能正常显示,这个解析工作是浏览器完成的吗?

    不是,浏览器最基本的语言是html也就是说浏览器只看得懂html.css.js等其他的服务器端动态脚本,比如你说的php.jsp等,解析工作是在服务器完成的!打个比方,你在电脑显示屏上看到的一切东西, ...

  8. SSH登录远程主机执行脚本找不到环境变量

    这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么 ...

  9. 深度解析正则表达式exec和match两者使用的异同以及要注意的地方

    1.match match方法属于String正则表达方法. 语法: str.match(regexp) str:要进行匹配的字符串. regexp:一个正则表达式(或者由RegExp()构造成的正则 ...

  10. Resharper 8.2 注册码

    用户名:ronle注册码:ZoJzmeVBoAv9Sskw76emgksMMFiLn4NM