153 lines
4.7 KiB
Bash
Executable File
153 lines
4.7 KiB
Bash
Executable File
##########################################################################################
|
|
#
|
|
# Xposed framework uninstaller zip.
|
|
# Modified for DPT running in adb mode
|
|
#
|
|
# This script removes the Xposed framework files from the system partition.
|
|
# It doesn't touch the Xposed Installer app.
|
|
#
|
|
##########################################################################################
|
|
|
|
alias cat='busybox cat'
|
|
alias cut='busybox cut'
|
|
alias sed='busybox sed'
|
|
alias head='busybox head'
|
|
alias find='busybox find'
|
|
alias gunzip='busybox gunzip'
|
|
|
|
|
|
grep_prop() {
|
|
REGEX="s/^$1=//p"
|
|
shift
|
|
FILES=$@
|
|
if [ -z "$FILES" ]; then
|
|
FILES=$PREFIX/system/build.prop
|
|
fi
|
|
cat $FILES 2>/dev/null | sed -n $REGEX | head -n 1
|
|
}
|
|
|
|
mv_perm() {
|
|
mv -f $1 $2 || exit 1
|
|
set_perm $2 $3 $4 $5 $6
|
|
}
|
|
|
|
set_perm() {
|
|
chown $2:$3 $1 || exit 1
|
|
chmod $4 $1 || exit 1
|
|
if [ "$5" ]; then
|
|
chcon $5 $1 2>/dev/null
|
|
else
|
|
chcon 'u:object_r:system_file:s0' $1 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
restore_link() {
|
|
TARGET="${PREFIX}${1}"
|
|
LINK_TARGET="${1}_xposed"
|
|
XPOSED="${PREFIX}${1}_xposed"
|
|
BACKUP="${PREFIX}${1}_original"
|
|
# Don't touch $TARGET if the link was created by something else (e.g. SuperSU)
|
|
if [ -f $BACKUP -a -L $TARGET -a "$(readlink $TARGET)" = $LINK_TARGET ]; then
|
|
rm -f $TARGET
|
|
mv_perm $BACKUP $TARGET $2 $3 $4 $5
|
|
fi
|
|
rm -f $XPOSED
|
|
}
|
|
|
|
restore_backup() {
|
|
TARGET="${PREFIX}${1}"
|
|
BACKUP="${PREFIX}${1}.orig"
|
|
NO_ORIG="${PREFIX}${1}.no_orig"
|
|
if [ -f $BACKUP ]; then
|
|
mv_perm $BACKUP $TARGET $2 $3 $4 $5
|
|
rm -f $NO_ORIG
|
|
elif [ -f "${BACKUP}.gz" ]; then
|
|
rm -f $TARGET $NO_ORIG
|
|
gunzip "${BACKUP}.gz"
|
|
mv_perm $BACKUP $TARGET $2 $3 $4 $5
|
|
elif [ -f $NO_ORIG ]; then
|
|
rm -f $TARGET $NO_ORIG
|
|
fi
|
|
}
|
|
|
|
##########################################################################################
|
|
|
|
echo "************************************"
|
|
echo " Xposed Framework uninstaller zip"
|
|
echo "************************************"
|
|
|
|
echo "- Mounting /system and /vendor read-write"
|
|
# mount /system >/dev/null 2>&1
|
|
mount -o remount,rw /system
|
|
# mount /vendor >/dev/null 2>&1
|
|
# mount -o remount,rw /vendor >/dev/null 2>&1
|
|
|
|
PREFIX=
|
|
# if [ "$SYSTEM_ROOT_IMAGE" = "true" -a -f /twres/twrp -a -f /system/system/build.prop ]; then
|
|
# # TWRP might mount the full system partion to /system, so files are actually in /system/system.
|
|
# PREFIX=/system
|
|
# fi
|
|
|
|
# Check if build.prop is accessible now.
|
|
if [ ! -f $PREFIX/system/build.prop ]; then
|
|
echo "! Failed: /system could not be mounted!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "- Checking environment"
|
|
API=$(grep_prop ro.build.version.sdk)
|
|
ABI=$(grep_prop ro.product.cpu.abi | cut -c-3)
|
|
ABI2=$(grep_prop ro.product.cpu.abi2 | cut -c-3)
|
|
ABILONG=$(grep_prop ro.product.cpu.abi)
|
|
|
|
ARCH=arm
|
|
IS64BIT=
|
|
if [ "$ABI" = "x86" ]; then ARCH=x86; fi;
|
|
if [ "$ABI2" = "x86" ]; then ARCH=x86; fi;
|
|
if [ "$API" -ge "21" ]; then
|
|
if [ "$ABILONG" = "arm64-v8a" ]; then ARCH=arm64; IS64BIT=1; fi;
|
|
if [ "$ABILONG" = "x86_64" ]; then ARCH=x64; IS64BIT=1; fi;
|
|
else
|
|
echo "! This script doesn't work for SDK < 21 (yet)"
|
|
exit 1
|
|
fi
|
|
|
|
# echo "DBG [$API] [$ABI] [$ABI2] [$ABILONG] [$ARCH]"
|
|
|
|
echo "- Restoring/removing files"
|
|
rm -f $PREFIX/system/xposed.prop
|
|
rm -f $PREFIX/system/framework/XposedBridge.jar
|
|
|
|
restore_link /system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0
|
|
restore_backup /system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0
|
|
restore_backup /system/bin/dexdiag 0 2000 0755
|
|
restore_backup /system/bin/dexlist 0 2000 0755
|
|
restore_backup /system/bin/dexoptanalyzer 0 2000 0755 u:object_r:dexoptanalyzer_exec:s0
|
|
restore_backup /system/bin/oatdump 0 2000 0755
|
|
restore_backup /system/bin/patchoat 0 2000 0755 u:object_r:dex2oat_exec:s0
|
|
restore_backup /system/bin/profman 0 2000 0755 u:object_r:profman_exec:s0
|
|
|
|
restore_backup /system/lib/libart.so 0 0 0644
|
|
restore_backup /system/lib/libart-compiler.so 0 0 0644
|
|
restore_backup /system/lib/libart-dexlayout.so 0 0 0644
|
|
restore_backup /system/lib/libart-disassembler.so 0 0 0644
|
|
restore_backup /system/lib/libsigchain.so 0 0 0644
|
|
restore_backup /system/lib/libopenjdkjvm.so 0 0 0644
|
|
restore_backup /system/lib/libopenjdkjvmti.so 0 0 0644
|
|
rm -f $PREFIX/system/lib/libxposed_art.so
|
|
rm -f $PREFIX/system/lib/libxposed_art.so.no_orig
|
|
|
|
if [ "$API" -ge "22" -a "$API" -le "23" ]; then
|
|
find $PREFIX/system $PREFIX/vendor -type f -name '*.odex.gz.xposed' 2>/dev/null | while read f; do mv "$f" "${f%.xposed}"; done
|
|
fi
|
|
|
|
echo "- Done"
|
|
echo " "
|
|
echo "************************************"
|
|
echo "It's recommended that you wipe the"
|
|
echo "Dalvik cache now."
|
|
echo "************************************"
|
|
echo " "
|
|
|
|
exit 0
|