问题描述
我想从 adb
安装一个诊断应用程序,并从 bash 脚本中取回数据.我知道如何从 adb
开始一个活动,但我找不到任何方法来取回数据,除非我打印到 logcat
并解析输出,但是听起来像一个黑客.有没有办法从使用 adb
开始的活动接收数据?
I want to install a diagnostic app from adb
and get back data from it from within a bash script. I know how to start an activity from adb
, but I can't find any way to get data back unless maybe if I print to logcat
and parse the output, but that sounds like a hack. Is there a way to receive data back from an activity started using adb
?
推荐答案
如果您要发送回自动化脚本的数据可以序列化为长度小于 4k 的字符串 - 使用 logcat
是很自然的选择.只需让您的活动使用 Log.i("UNIQUE_TAG", the_data_string_you_want_to_send_back_to_your_script);
将数据打印到日志中,然后在自动化脚本中使用以下命令来捕获输出:
If the data that you want to send back to your automation script could be serialized into a string less than 4k long - using logcat
is a natural choice.Just make your activity to print the data to the log with Log.i("UNIQUE_TAG", the_data_string_you_want_to_send_back_to_your_script);
and then use the following commands in your automation script to capture the output:
# clear the logcat buffer
adb logcat -c
# start your activity
adb shell am start <INTENT>
# this line will block until a string with "UNIQUE_TAG" tag and "Info" priority
# is printed to the main log
adb shell 'logcat -b main -v raw -s UNIQUE_TAG:I | (read -n 1 && kill -2 $((BASHPID-1)))'
# now you can capture the data and process it
DATA=$(adb logcat -d -b main -v raw -s UNIQUE_TAG:I)
在 logcat
正确支持 -m
、-t
的最新 Android 版本 (7.0+) 中和 -T
参数,您可以使用这个更简单的版本,而无需先使用 logcat -c
清除日志:
In more recent Android versions (7.0+) where logcat
properly supports -m <count>
, -t <time>
and -T <time>
parameters you can use this much simpler version without having to clear the log with logcat -c
first:
# instead of clearing the log just get the current timestamp
TS=$(adb shell 'echo $EPOCHREALTIME; log ""')
# start your activity
adb shell am start <INTENT>
# this command will return immediately if the data has been printed already or block if not
DATA=$(adb shell "logcat -b main -T $TS -m 1 -v raw -s UNIQUE_TAG:I")
这篇关于通过 adb shell am start 将数据发送回启动活动的脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!