Android的:如何使用ADB外壳日上午开始与strace的应用(Android: How to

2019-06-27 11:58发布

我需要在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测试程序位于这里 。

Answer 1:

在“我开始”命令不直接运行应用程序; 它只是告诉安卓采取一切必要的,在你的榜样,启动特定的活动。

strace命令通常用作strace commandname command args ,并启动commandname -简单,但在这个Android的使用情况下,不会有帮助。 但是,strace的具有-p选项,这对你有帮助: strace -p <process id>将让你开始追查过程中与指定的ID。

如果您键入ps你的Android系统上,你可以找到与该名字的过程com.akproduction.notepad (可能是,默认情况下过程被命名为自己的Android包,但它是可以改变的是,在清单)。 然后,你就可以开始stracing它,无论它恰好是。

如果你需要在这个过程中早期发现的东西,你要么需要修改代码以使其推迟,直到你准备跟踪它,或者你至少需要在开始之前的获取进程运行活动。 第二个选项往往存在作为原料的活性,然后使用后退按钮,然后让你的跟踪准备,然后再开始活动一样简单 - 但是这始终是代码特定于应用程序。



Answer 2:

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


Answer 3:

这是一个丑陋的单行劈我今天用来解决这个问题。 假设该方案有一些已知的名字,只是尝试,只要它出现连接到该进程。 在这个例子中,我感兴趣的所有调用打开。

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


Answer 4:

这里有一个一行是抓住进程ID和管道它与strace右后am启动应用程序。 你不会得到执行的第一个几个指令,但它踢够早了我的需求。

am start -n com.packagename.here\.ActivityName && set `ps | grep com.packagename.here` && strace -p $2



Answer 5:

我会建议开始您的应用程序开始对受精卵的过程strace的,并按照叉之前。 受精卵工艺的主要流程是从每一个新的进程岔路Android,包括您的应用程序。 这时,你可能要筛选基础上的PID您感兴趣的日志。例如:

PS合子

获得受精卵PID,然后

strace的-f -p <zygote_PID>



Answer 6:

我发现一个棘手的方式做到这一点,并保证所有的系统调用都将是赶上。 这是可以做到,即使应用程序没有调试的:

  • 设置活动管理器( 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这样做。 从执行这一点,将会开始,你将能够跟踪它,因为代码的第一行。



文章来源: Android: How to strace an app using ADB shell am start