我需要在SDK模拟器stracing Android应用帮助。
这里是我的设置:
我有运行连接到仿真器的Android API 4.03 ADB壳一个Android SDK模拟器。
我可以用ADB安装filename.apk安装一个APK
我能够运行使用ADB外壳应用程序am start -a android.intent.action.Main -n com.akproduction.notepad/com.akproduction.notepad.NoteList
我尝试使用(ADB壳)与strace strace am start -a android.intent.action.Main -n com.akproduction.notepad/com.akproduction.notepad.NoteList
但我什么也没得到!
你如何追踪Android应用程序及其安装的运行时行为?
(PS测试程序位于这里 。
在“我开始”命令不直接运行应用程序; 它只是告诉安卓采取一切必要的,在你的榜样,启动特定的活动。
该strace
命令通常用作strace commandname command args
,并启动commandname
-简单,但在这个Android的使用情况下,不会有帮助。 但是,strace的具有-p
选项,这对你有帮助: strace -p <process id>
将让你开始追查过程中与指定的ID。
如果您键入ps
你的Android系统上,你可以找到与该名字的过程com.akproduction.notepad
(可能是,默认情况下过程被命名为自己的Android包,但它是可以改变的是,在清单)。 然后,你就可以开始stracing它,无论它恰好是。
如果你需要在这个过程中早期发现的东西,你要么需要修改代码以使其推迟,直到你准备跟踪它,或者你至少需要在开始之前的获取进程运行活动。 第二个选项往往存在作为原料的活性,然后使用后退按钮,然后让你的跟踪准备,然后再开始活动一样简单 - 但是这始终是代码特定于应用程序。
Android应用程序实际上是由分叉合子进程启动,这样你就可以通过跟踪受精卵的过程和下列子进程(“-f”)跟踪应用程序初始化:
setenforce 0 # In Android 4.3 and later, if SELinux is enabled, strace will fail with "strace: wait: Permission denied"
set `ps | grep zygote` ; strace -p $2 -f -tt -T -s 500 -o /sdcard/strace.txt
这是一个丑陋的单行劈我今天用来解决这个问题。 假设该方案有一些已知的名字,只是尝试,只要它出现连接到该进程。 在这个例子中,我感兴趣的所有调用打开。
while true; do
while ! ps | grep -q -i MyProgram; do :; done;
ps | grep -i MyProgram | while read a b c; do
strace -e open -f -p $b;
done;
done
这里有一个一行是抓住进程ID和管道它与strace右后am
启动应用程序。 你不会得到执行的第一个几个指令,但它踢够早了我的需求。
am start -n com.packagename.here\.ActivityName && set `ps | grep com.packagename.here` && strace -p $2
我会建议开始您的应用程序开始对受精卵的过程strace的,并按照叉之前。 受精卵工艺的主要流程是从每一个新的进程岔路Android,包括您的应用程序。 这时,你可能要筛选基础上的PID您感兴趣的日志。例如:
PS合子
获得受精卵PID,然后
strace的-f -p <zygote_PID>
我发现一个棘手的方式做到这一点,并保证所有的系统调用都将是赶上。 这是可以做到,即使应用程序没有调试的:
- 设置活动管理器(
am
)把在调试模式下的应用程序具有-w
直到它被连接到一个调试器,将停止其执行选项 - 手动启动应用程序(你可以点击屏幕上的图标或把它
am start
- 与该应用程序暂停时,获得其PID
- 凭借其PID获得,呼叫strace的跟踪这一过程
- 最后,调试器附加这样的执行开始。
具体操作步骤如下:
adb shell # shell into the device
am set-debug-app -w com.package.name # put app to debug mode
am start com.package.name/com.path.to.MainActivity # start the app
ps -A | grep com.package.name # this will show you the PID
strace -p <PID> > appoutput.txt 2> appstrace.txt
# strace the program and record its output and strace in txt files
现在只是附加调试和享受,比如,你可以在Android的工作室或者Eclipse这样做。 从执行这一点,将会开始,你将能够跟踪它,因为代码的第一行。