-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile.shauvik
192 lines (165 loc) · 6.95 KB
/
Makefile.shauvik
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
#!/bin/bash
### 1) make firstBoot
### 2) make instalerAPK
### 3) make createSnapshot
### 4) make ripper EXPLORE=systematic
#System Path
JAVA_CMD=/usr/bin/java
JARSIGNER_CMD=/usr/bin/jarsigner
ANDROID_HOME=/home/vagrant/android-sdk-linux
EMULATORPATH=$(ANDROID_HOME)/tools
PLATFORMPATH=$(ANDROID_HOME)/platform-tools
BUILDTOOLS=$(ANDROID_HOME)/build-tools/20.0.0
#AVD Path
EMULATORTASK=$(EMULATORPATH)/emulator-arm
AVDNAME=gui-ripper
ANDROIDCONF=/home/vagrant/.android
SNAPSHOTPATH=$(ANDROIDCONF)/avd/$(AVDNAME).avd/snapshots.img
#App Information
APKPATH=apks/tomdroid-0.7.5.apk
APPPACKAGE=org.tomdroid
CLASSPACKAGE=org.tomdroid.ui.Tomdroid
DEVICEPATH=/data/data/$(APPPACKAGE)/files
#Output Experiment Path
EXPPATH=output-exp
COVERAGEPATH=$(EXPPATH)/coverage
FILESPATH=$(EXPPATH)/files
RESTOREPATH=$(EXPPATH)/restore
SCREENSHOTSPATH=$(EXPPATH)/screenshots
#Tool Information
ROOT_DIR=/vagrant/guiripper/GuiRipperV1.1
BATCHPATH=$(ROOT_DIR)/batch
DATAPATH=$(ROOT_DIR)/data
TOOLSPATH=$(ROOT_DIR)/tools
SMALIPATH=$(TOOLSPATH)/smali
TESTPACKAGE=it.unina.androidripper
RIPPERPATH=/data/data/$(TESTPACKAGE)/files
WAITFORAVD=40
# random | systematic
EXPLORE=random
ifeq ($(EXPLORE),random)
TESTCLASS=guitree.NomadEngine
else
TESTCLASS=guitree.GuiTreeEngine
endif
## I would set the number of events to a high number, and then invoke this script with a timeout of 1 hour.
NUM_EVENTS=5
log:
$(PLATFORMPATH)/adb logcat >> $(EXPPATH)/log.txt
logf:
$(PLATFORMPATH)/adb logcat androidripper:i AndroidRuntime:e *:s >> $(EXPPATH)/log.txt
close:
$(PLATFORMPATH)/adb kill-server
firstBoot:
$(EMULATORTASK) -avd $(AVDNAME) -partition-size 512 -snapshot $(SNAPSHOTPATH) -no-snapshot-load -wipe-data &
installerAPK:
mkdir -p $(COVERAGEPATH)
mkdir -p $(RESTOREPATH)
mkdir -p $(FILESPATH)
mkdir -p $(SCREENSHOTSPATH)
rm -rf $(EXPPATH)/*
rm -rf $(TOOLSPATH)/diet
rm -rf $(DATAPATH)/*.apk
rm -rf $(DATAPATH)/preferences.xml
rm -rf $(SMALIPATH)/build/*
echo "Installing the packages on the virtual device..."
$(PLATFORMPATH)/adb kill-server
sleep 5
$(PLATFORMPATH)/adb devices
sleep 5
$(JAVA_CMD) -jar $(TOOLSPATH)/Retarget.jar $(SMALIPATH)/AndroidManifest.xml $(APPPACKAGE)
$(JAVA_CMD) -jar $(TOOLSPATH)/apktool.jar b $(TOOLSPATH)/smali $(DATAPATH)/crawler.apk
$(JARSIGNER_CMD) -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $(ANDROIDCONF)/debug.keystore -storepass android -keypass android $(DATAPATH)/crawler.apk androiddebugkey
$(BUILDTOOLS)/zipalign 4 $(DATAPATH)/crawler.apk $(DATAPATH)/ripper.apk
mkdir $(DATAPATH)/temp
cp $(APKPATH) $(DATAPATH)/APP.apk
unzip $(DATAPATH)/APP.apk -d $(DATAPATH)/temp
rm -rf $(DATAPATH)/temp/META-INF
rm $(DATAPATH)/APP.apk
cd $(DATAPATH)/temp; zip -r $(DATAPATH)/APP.apk *
rm -rf $(DATAPATH)/temp
$(JARSIGNER_CMD) -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $(ANDROIDCONF)/debug.keystore -storepass android -keypass android $(DATAPATH)/APP.apk androiddebugkey
$(BUILDTOOLS)/zipalign 4 $(DATAPATH)/APP.apk $(DATAPATH)/AUT.apk
$(PLATFORMPATH)/adb install -r $(DATAPATH)/AUT.apk
$(PLATFORMPATH)/adb install -r $(DATAPATH)/ripper.apk > $(EXPPATH)/building.txt
$(PLATFORMPATH)/adb shell mkdir $(DEVICEPATH)
$(PLATFORMPATH)/adb shell chmod 777 $(DEVICEPATH)
$(PLATFORMPATH)/adb shell mkdir $(RIPPERPATH)
$(PLATFORMPATH)/adb shell chmod 777 $(RIPPERPATH)
cp $(DATAPATH)/preferences_$(EXPLORE).xml $(DATAPATH)/preferences.xml
$(JAVA_CMD) -jar $(TOOLSPATH)/PreferenceEditor.jar $(DATAPATH)/preferences.xml retarget $(APPPACKAGE) $(CLASSPACKAGE)
$(PLATFORMPATH)/adb push $(DATAPATH)/preferences.xml $(RIPPERPATH)/preferences.xml
sleep 5
$(JAVA_CMD) -jar $(TOOLSPATH)/BuildControl.jar $(EXPPATH)/building.txt
rm -rf $(DATAPATH)/*.apk
echo "Deploy Completed"
createSnapshot:
$(EMULATORTASK) -avd $(AVDNAME) -partition-size 512 -snapshot $(SNAPSHOTPATH) &
#sleep $(WAITFORAVD)
$(ROOT_DIR)/waitForEmu.sh
$(PLATFORMPATH)/adb shell chmod 777 $(RIPPERPATH)
$(PLATFORMPATH)/adb shell rm $(RIPPERPATH)/*
ripper: ripper-$(EXPLORE)
ripper-%:
extCounter=1
echo $$extCounter
echo "** Start Random Ripping"
$(PLATFORMPATH)/adb start-server
$(EMULATORTASK) -avd $(AVDNAME) -partition-size 512 -snapshot $(SNAPSHOTPATH) -no-snapshot-save &
#sleep $(WAITFORAVD)
$(ROOT_DIR)/waitForEmu.sh
mkdir -p $(EXPPATH)
$(PLATFORMPATH)/adb logcat >> $(EXPPATH)/log-all.txt &
$(PLATFORMPATH)/adb logcat androidripper:i AndroidRuntime:e *:s >> $(EXPPATH)/log-filtered.txt &
sleep 5
mkdir -p $(FILESPATH)/$$extCounter
mkdir -p $(RESTOREPATH)/$$extCounter
mkdir -p $(SCREENSHOTSPATH)/$$extCounter
mkdir -p $(COVERAGEPATH)/$$extCounter
# if ls $(COVERAGEPATH)/coverage.em &> /dev/null; then \
cp $(COVERAGEPATH)/coverage.em $(COVERAGEPATH)/$$extCounter/coverage.em; \
fi
echo "Playing Session $$extCounter"
echo "Playing Session $$extCounter" >> $(EXPPATH)/test.txt
echo ""
$(JAVA_CMD) -jar $(TOOLSPATH)/PreferenceEditor.jar $(DATAPATH)/preferences.xml randomize $(NUM_EVENTS) >> $(EXPPATH)/test.txt
echo "changing prefs"
$(PLATFORMPATH)/adb shell rm $(RIPPERPATH)/*
$(PLATFORMPATH)/adb push $(DATAPATH)/preferences.xml $(RIPPERPATH)/preferences.xml
echo "running instr"
# TODO instrument apk (if you have emma in the classpath it is enough to change coverage false to true)
$(PLATFORMPATH)/adb shell am instrument -w -e coverage false -e class $(TESTPACKAGE).$(TESTCLASS) \
$(TESTPACKAGE)/android.test.InstrumentationTestRunner >> $(EXPPATH)/test.txt
if [ -f $(FILESPATH)/$$extCounter/*.xml ]; then \
mv $(FILESPATH)/$$extCounter/*.xml $(RESTOREPATH)/$$extCounter/; \
mv $(FILESPATH)/$$extCounter/*.bak $(RESTOREPATH)/$$extCounter/; \
mv $(FILESPATH)/$$extCounter/*.obj $(RESTOREPATH)/$$extCounter/; \
mv $(FILESPATH)/$$extCounter/*.txt $(RESTOREPATH)/$$extCounter/; \
fi
$(PLATFORMPATH)/adb pull $(DEVICEPATH) $(FILESPATH)/$$extCounter
# if ls $(FILESPATH)/$$extCounter/coverage.ec &> /dev/null; then \
# mv $(FILESPATH)/$$extCounter/coverage.ec $(COVERAGEPATH)/$$extCounter/coverage_$$extCounter.ec; \
# mv $(FILESPATH)/$$extCounter/*.jpg $(SCREENSHOTSPATH)/$$extCounter/; \
# fi;
$(PLATFORMPATH)/adb emu kill
sleep 5
# TODO: these do not work, but I guess we don't need them
# $(JAVA_CMD) -jar $(TOOLSPATH)/GuiTSplitter.jar $(FILESPATH)/$$extCounter $$extCounter
# $(JAVA_CMD) -jar $(TOOLSPATH)/ActTSplitter.jar $(FILESPATH)/$$extCounter $$extCounter
# cd $(COVERAGEPATH)/$$extCounter;\
# $(JAVA_CMD) -jar $(TOOLSPATH)/IncrementalCoverage.jar $$extCounter
rm -rf $(EXPPATH)/temp.txt
# $(JAVA_CMD) -jar $(TOOLSPATH)/CoverageTextParsing.jar coverage.txt
# $(JAVA_CMD) -jar $(TOOLSPATH)/CounterEvents.jar $(EXPPATH)/logf.txt >> $(EXPPATH)/test.txt
echo "End of Session $$extCounter"
echo "End of Session $$extCounter" >> $(EXPPATH)/test.txt
extCounter=$$((extCounter+1))
if [ -f $(FILESPATH)/$$extCounter/closed.txt ] ; then \
echo "** Crawling finished"; \
$(PLATFORMPATH)/adb kill-server; \
fi
tasklist:
adb push $(RESTOREPATH) $(DEVICEPATH)
if ls $(TOOLSPATH)/diet/tasklistdiet_bkp.xml $> /dev/null; then \
cp $(TOOLSPATH)/diet/tasklistdiet_bkp.xml $(TOOLSPATH)/diet/tasklist_diet.xml; \
fi