我想编写一个Android应用程序(不是PC程序),它具有Android设备监视器(ADM)的子集功能,即。选择一个进程并跟踪其方法调用,包括详细信息(ADM可以获得的所有信息,如堆栈跟踪和时间),而手机未连接到任何计算机,也没有任何网络访问权。
我已经搜索到android.os.Debug.startMethodTracing*
,但似乎只能跟踪当前进程,结果只能写入文件(我需要内存中的信息)。
挖掘它的实现,我找到了dalvik.system.VMDebug.startMethodTracing*
,但它似乎无法被应用程序使用,我也没有找到指定pid
的方法。看起来它正在调用JNI函数,但我没有找到实现。
也许我可以通过使用Linux perf事件(perf_event_open(2)
)以较低级别的方式获取信息。但在此之前,我想知道这种功能是否可以纯粹用Java实现(可能是通过与某些"系统管理器"进程或"调试服务器"进程交谈,或者通过调用一些CLI工具,然后得到它的stdout)?
答案 0 :(得分:0)
这些功能只能由shell用户(adb运行的用户)或root用户访问。通过设计,普通的Android应用程序无法访问这些功能,因为这将彻底打破作为Android中应用程序安全模型基础的应用程序沙箱。