我的Android应用程序如何在已启用开发人员选项的手机上获取另一个进程/应用程序的方法跟踪?

时间:2016-11-12 08:52:26

标签: android dalvik ddms

我想编写一个Android应用程序(不是PC程序),它具有Android设备监视器(ADM)的子集功能,即。选择一个进程并跟踪其方法调用,包括详细信息(ADM可以获得的所有信息,如堆栈跟踪和时间),而手机未连接到任何计算机,也没有任何网络访问权。

我已经搜索到android.os.Debug.startMethodTracing*,但似乎只能跟踪当前进程,结果只能写入文件(我需要内存中的信息)。

挖掘它的实现,我找到了dalvik.system.VMDebug.startMethodTracing*,但它似乎无法被应用程序使用,我也没有找到指定pid的方法。看起来它正在调用JNI函数,但我没有找到实现。

也许我可以通过使用Linux perf事件(perf_event_open(2))以较低级别的方式获取信息。但在此之前,我想知道这种功能是否可以纯粹用Java实现(可能是通过与某些"系统管理器"进程或"调试服务器"进程交谈,或者通过调用一些CLI工具,然后得到它的stdout)?

1 个答案:

答案 0 :(得分:0)

这些功能只能由shell用户(adb运行的用户)或root用户访问。通过设计,普通的Android应用程序无法访问这些功能,因为这将彻底打破作为Android中应用程序安全模型基础的应用程序沙箱。