很久以来,我一直想找一种方法来断点调试安卓系统自身的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. 对jquery的ajax进行二次封装

    第一种方法: $(function(){ /** * ajax封装 * url 发送请求的地址 * data 发送到服务器的数据,数组存储,如:{"username": " ...

  2. apache配置rewrite及.htaccess文件(转载)

    今天看到一个哥们的帖子发了个rewrite的帖子,以前也写过一个,配置挺简单的,但当时没注意这个问题,当时没有用到.htaccess文件,在机子上测试了一下,发现确实没法用,于是开始找问题的所在. 自 ...

  3. 判断是否为IE浏览器

    function isIE(){        if (!!window.ActiveXObject || "ActiveXObject" in window){          ...

  4. Entity Framework 基于方法的查询语法

      实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发 ...

  5. Java中的递归运算

    Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...

  6. WebApp中的页面生命周期及路由管理

    最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...

  7. 阿里云服务器Linux CentOS安装配置(九)shell编译、打包、部署

    阿里云服务器Linux CentOS安装配置(九)shell编译.打包.部署 1.查询当前目录以及子目录下所有的java文件,并显示查询结果 find . -name *.java -type f - ...

  8. Android--Activity(活动)

    1. 安卓中的 Activity 大致等于桌面应用中的window 2. Activity 的生命周期由系统控制, 所以在开发时要假设 Activity 会被随时销毁掉的情况, 比如: 应用中有一个 ...

  9. 从一个NOI题目再学习二分查找。

    二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...

  10. bash shell + python简单教程,让你的mac/linux终端灰起来~

    前提条件:已经安装python,命令行支持bash 在bash_profile中添加 function ccolor { python /Users/xirtam/Documents/tools/cc ...