forked from facebook/redex
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompare_transform.sh
executable file
·62 lines (59 loc) · 1.76 KB
/
compare_transform.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
#!/bin/bash
set -o pipefail
INPUT=$1
REDEXOUT=$2
TEMPDIR=`mktemp -d 2>/dev/null || mktemp -d -t 'extractdexdump'`
OUTA=$TEMPDIR/alpha.filt.dexdump
OUTB=$TEMPDIR/beta.filt.dexdump
OUTDIFF=$TEMPDIR/diff
if [ ! -f $INPUT ]; then
echo "No such file $INPUT, bailing"
exit 1;
fi
DEXDUMP=
if [[ "$INPUT" =~ dex$ ]]; then
DEXDUMP="dexdump -d"
elif [[ "$INPUT" =~ apk$ ]]; then
ROOT=$((git rev-parse --show-toplevel || hg root) 2>/dev/null)
DEXDUMP="$ROOT/fbandroid/scripts/ordering/extractdexdump"
if [ ! -f $DEXDUMP ]; then
DEXDUMP="$ROOT/scripts/ordering/extractdexdump"
fi
else
echo "You must specify a dex or apk file as input\"$INPUT\"."
exit 2;
fi
export LC_ALL=C
$DEXDUMP $INPUT | \
sed 's/^Processing .*dex//' | \
sed 's/^Opened .*dex//' | \
sed 's/^ source_file_idx : [0-9]* / source_file_idx : /' | \
sed 's/^.*|/|/' | \
sed 's/|\[[0-9a-f]*\]/|\[\]/' | \
sed 's/type@[0-9a-f]*/type@/' | \
sed 's/string@[0-9a-f]*/string@/' | \
sed 's/method@[0-9a-f]*/method@/' | \
sed 's/field@[0-9a-f]*/field@/' | \
sed 's/^|[0-9a-f]*:/|:/' \
> $OUTA
$DEXDUMP $REDEXOUT | \
sed 's/^Processing .*dex//' | \
sed 's/^Opened .*dex//' | \
sed 's/^ source_file_idx : [0-9]* / source_file_idx : /' | \
sed 's/^.*|/|/' | \
sed 's/|\[[0-9a-f]*\]/|\[\]/' | \
sed 's/type@[0-9a-f]*/type@/' | \
sed 's/string@[0-9a-f]*/string@/' | \
sed 's/method@[0-9a-f]*/method@/' | \
sed 's/field@[0-9a-f]*/field@/' | \
sed 's/^|[0-9a-f]*:/|:/' \
> $OUTB
diff --speed-large-files -u $OUTA $OUTB | tee $OUTDIFF
if [ $? == 0 ]; then
echo "The dexes are equivalent"
exit 0;
else
echo "FAILURE, the dexes have a significant difference"
echo "The differences are recorded in $OUTDIFF"
exit 1;
fi