#!/bin/sh if [ $# -ne 2 ]; then echo "Usage: $0 /path/to/Orbot-v15.0.1.apk /another/Orbot-v15.0.1.apk" exit 1 fi set -e set -x test -e "$1" test -e "$2" tmpdir=`mktemp -d /tmp/.compare-apks.XXXXXXXXXX` apk1=$(basename $1) apk2=$(basename $2) sourcedir1=$(cd `dirname $1` && pwd) sourcedir2=$(cd `dirname $2` && pwd) apkname1=`echo $apk1 | sed 's,\.apk$,,'` apkname2=`echo $apk2 | sed 's,\.apk$,,'` dir1=$tmpdir/`echo $(dirname $1) | sed 's,[/ ],_,g'`-$apkname1 dir2=$tmpdir/`echo $(dirname $2) | sed 's,[/ ],_,g'`-$apkname2 mkdir -p $dir1/zip cd $dir1/zip unzip "$sourcedir1/$apk1" cd .. apktool d --no-res --no-src "$sourcedir1/$apk1" mv "$apkname1" apktool # strip the full path to the zip for the comparison unzip -l "$sourcedir1/$apk1" | sed 's,^\(Archive:\s\s*\)/.*/,\1,' > $dir1/unzip-l.txt unzip -lv "$sourcedir1/$apk1" | sed 's,^\(Archive:\s\s*\)/.*/,\1,' > $dir1/unzip-lv.txt zipinfo -lv "$sourcedir1/$apk1" | sed 's,^\(Archive:\s\s*\)/.*/,\1,' > $dir1/zipinfo-lv.txt xxd "$sourcedir1/$apk1" > $dir1/xxd for f in $dir1/zip/assets/*/*; do xxd $f > $dir1/xxd-$(basename $f) done mkdir -p $dir2/zip cd $dir2/zip unzip "$sourcedir2/$apk2" cd .. apktool d --no-res --no-src "$sourcedir2/$apk2" mv "$apkname2" apktool # strip the full path to the zip for the comparison unzip -l "$sourcedir2/$apk2" | sed 's,^\(Archive:\s\s*\)/.*/,\1,' > $dir2/unzip-l.txt unzip -lv "$sourcedir2/$apk2" | sed 's,^\(Archive:\s\s*\)/.*/,\1,' > $dir2/unzip-lv.txt zipinfo -lv "$sourcedir2/$apk2" | sed 's,^\(Archive:\s\s*\)/.*/,\1,' > $dir2/zipinfo-lv.txt xxd "$sourcedir2/$apk2" > $dir2/xxd for f in $dir2/zip/assets/*/*; do xxd $f > $dir2/xxd-$(basename $f) done if which meld > /dev/null; then meld $dir1 $dir2 elif which opendiff > /dev/null; then opendiff $dir1 $dir2 else echo "ERROR: meld or opendiff required for the comparison!" fi rm -rf $dir1 $dir2