-
Notifications
You must be signed in to change notification settings - Fork 0
/
Recorder.sh
225 lines (218 loc) · 4.79 KB
/
Recorder.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# Init
Init() {
local platform=$1
Exist $platform
case $platform in
"android")
# 判斷 Android 版本是否 < 7
AndroidVersionOver7
# 設定本次 Process 資料夾路徑
CreateFolder "AndroidRecorder"
;;
"ios")
target_device=$(idb list-targets | grep ooted | cut -d '|' -f 2)
CreateFolder "iOSRecorder"
;;
esac
}
# Init sub-function
Exist() {
local platform=$1
case $platform in
"android")
target_device=$(adb devices | tr "\n" ':' | cut -d ':' -f 2)
;;
"ios")
target_device=$(idb list-targets | grep ooted | cut -d '|' -f 1,2,5)
;;
esac
if [[ $target_device ]]; then
echo "\033[1;34m目前所連接的裝置為:\033[0m"
echo "\033[1;35m$target_device\033[0m"
else
echo "\033[0;31mx ERROR: NO CONNECT/BOOT ANY $target_device DEVICE\033[0m"
TearDown
fi
}
# Init sub-function
AndroidVersionOver7() {
androidOsVersion=$(adb shell getprop ro.build.version.release | cut -f1 -d .)
androidVersionOver7=1
minVersion=7
if [[ $androidOsVersion -lt $minVersion ]]; then
androidVersionOver7=0
fi
}
# Init sub-function
CreateFolder() {
local platform=$1
basePath="/Users/$(whoami)/Desktop/$platform"
folderName=$(date +"%Y%m%d_%H%M%S")
if [[ -d $basePath ]]; then
mkdir $basePath/$folderName
else
mkdir $basePath
mkdir $basePath/$folderName
fi
}
# Start
MainProcess() {
echo "\033[1;34mStart Record Screen & Log or ScreenShot:\033[0m"
read -p "Videorecord: v, Screenshot: s, change platform: r > " process
case $process in
"v")
case $platform in
"android")
read -p "please enter package name for filter log , or not to enter > " package
Recorder $package
;;
"ios")
Recorder
;;
esac
;;
"s")
Screenshot
;;
"r")
read -p "Android: 1, iOS: 2 > " platform
Init $platform
;;
"q")
TearDown
;;
*)
echo "\033[0;31m𝘹 Error: Invalid Option\033[0m"
;;
esac
}
# End
TearDown() {
clear
case $platform in
"android")
;;
"ios")
idb kill
sleep 1
kill $(pgrep -f idb | tr '\n' '\t')
;;
esac
exit 1
}
###############
# Screen recored function
Recorder() {
local package=$1
case $platform in
"android")
if [[ -n $package ]]; then
CheckApp $package
if [[ $? == 0 ]]; then
echo "\033[0;33m𝘹 Warming: 因未開啟所指定的 App ($package),故將會記錄所有 Device Log\033[0m"
local package=""
fi
fi
Screenrecord
Logcat $package
;;
"ios")
Screenrecord
Logcat
;;
esac
}
# Screen recored sub-function
CheckApp() {
local package=$1
if [[ $androidVersionOver7 == 1 ]]; then
local isExist=$(adb shell pidof $package)
if [[ -z $isExist ]]; then
return 0
fi
fi
return 1
}
# Screen recored sub-function
Logcat() {
local filename=Log-$startTime
local package=$1
echo "\033[1:34mGet Log File ...\033[0m"
case $platform in
"android")
if [[ -z $package ]]; then
adb logcat -t "$logStartTime" >$basePath/$folderName/$filename.log
else
if [[ $androidVersionOver7 == 1 ]]; then
adb logcat -t "$logStartTime" --pid=$(adb shell pidof $package) >$basePath/$folderName/$filename.log
elif [[ $androidVersionOver7 == 0 ]]; then
adb logcat -t "$logStartTime" | grep $package >$basePath/$folderName/$filename.log
fi
fi
;;
"ios")
nohup idb log --udid $target_device > $basePath/$folderName/$filename.log &
;;
esac
}
# Screen recored sub-function
Screenrecord() {
logStartTime=$(date +"%m-%d %T.000")
startTime=$(date +"%Y%m%d_%H%M%S")
local filename=Screenrecord-$startTime
echo "\033[1:34mStart recording ...\033[0m"
case $platform in
"android")
nohup adb shell screenrecord --size 480x800 /sdcard/$filename.mp4 &
screenRecorderPID=$(pgrep -f screenrecord)
read -n 1 -s -r -p "Press any key to stop recording ..."
kill $screenRecorderPID
sleep 1
adb pull /sdcard/$filename.mp4 $basePath/$folderName
adb shell rm -f /sdcard/$screenrecordFile.mp4
;;
"ios")
nohup idb record video --udid $target_device $basePath/$folderName/$filename.mp4 &
sleep 3
nohup idb log --udid $target_device > $basePath/$folderName/$filename.log &
sleep 3
read -n 1 -s -r -p "Press any key to stop recording ..."
idb kill
esac
}
# Screen recored sub-function
Screenshot() {
startTime=$(date +"%Y%m%d_%H%M%S")
local filename=Screenshot-$startTime
echo "\033[1:34mGet Screenshot ...\033[0m"
case $platform in
"android")
adb shell screencap -p /sdcard/$filename.png
adb pull /sdcard/$filename.png $basePath/$folderName
adb shell rm -f /sdcard/$filename.png
;;
"ios")
idb screenshot --udid $target_device $basePath/$folderName/$filename.png
;;
esac
}
# ----------------------------------------------
echo "Enter your test platform :"
read -p "Android: 1, iOS: 2 > " platform
case $platform in
"1")
platform="android"
;;
"2")
platform="ios"
;;
*)
echo "\033[0;31m𝘹 Error: Invalid Option\033[0m"
exit 1
;;
esac
Init $platform
while [ 1 ]; do
echo ""
MainProcess $platform
done