2020-03-20 07:44:08 -03:00
|
|
|
#####################################################################
|
2019-09-03 17:06:14 -04:00
|
|
|
# AVD Magisk Setup
|
2020-03-20 07:44:08 -03:00
|
|
|
#####################################################################
|
2019-09-03 17:06:14 -04:00
|
|
|
#
|
2023-08-11 09:46:45 -07:00
|
|
|
# Support API level: 23 - 34
|
2019-09-03 17:06:14 -04:00
|
|
|
#
|
2022-01-19 05:12:11 -08:00
|
|
|
# With an emulator booted and accessible via ADB, usage:
|
|
|
|
# ./build.py emulator
|
|
|
|
#
|
2021-08-26 03:09:56 -07:00
|
|
|
# This script will stop zygote, simulate the Magisk start up process
|
|
|
|
# that would've happened before zygote was started, and finally
|
|
|
|
# restart zygote. This is useful for setting up the emulator for
|
|
|
|
# developing Magisk, testing modules, and developing root apps using
|
|
|
|
# the official Android emulator (AVD) instead of a real device.
|
2019-09-03 17:06:14 -04:00
|
|
|
#
|
2022-01-19 05:12:11 -08:00
|
|
|
# This only covers the "core" features of Magisk. For testing
|
2022-01-19 20:28:01 -08:00
|
|
|
# magiskinit, please checkout avd_patch.sh.
|
2021-08-26 03:09:56 -07:00
|
|
|
#
|
2020-03-20 07:44:08 -03:00
|
|
|
#####################################################################
|
2019-09-03 17:06:14 -04:00
|
|
|
|
2019-09-04 11:12:09 -04:00
|
|
|
mount_sbin() {
|
2023-02-28 14:54:33 +08:00
|
|
|
mount -t tmpfs -o 'mode=0755' magisk /sbin
|
2021-08-18 03:44:32 -07:00
|
|
|
chcon u:object_r:rootfs:s0 /sbin
|
2019-09-04 11:12:09 -04:00
|
|
|
}
|
|
|
|
|
2019-09-03 17:06:14 -04:00
|
|
|
if [ ! -f /system/build.prop ]; then
|
|
|
|
# Running on PC
|
2021-09-07 03:03:02 -07:00
|
|
|
echo 'Please run `./build.py emulator` instead of directly executing the script!'
|
|
|
|
exit 1
|
2019-09-03 17:06:14 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
cd /data/local/tmp
|
2021-08-26 03:09:56 -07:00
|
|
|
chmod 755 busybox
|
2019-09-03 17:06:14 -04:00
|
|
|
|
2020-07-27 03:32:54 -07:00
|
|
|
if [ -z "$FIRST_STAGE" ]; then
|
|
|
|
export FIRST_STAGE=1
|
|
|
|
export ASH_STANDALONE=1
|
2021-09-07 03:03:02 -07:00
|
|
|
if [ $(./busybox id -u) -ne 0 ]; then
|
2020-07-27 03:32:54 -07:00
|
|
|
# Re-exec script with root
|
|
|
|
exec /system/xbin/su 0 ./busybox sh $0
|
|
|
|
else
|
|
|
|
# Re-exec script with busybox
|
|
|
|
exec ./busybox sh $0
|
|
|
|
fi
|
2019-10-21 13:58:57 -04:00
|
|
|
fi
|
2019-09-03 17:06:14 -04:00
|
|
|
|
2023-10-19 05:15:53 -07:00
|
|
|
pm install -r -g $(pwd)/magisk.apk
|
2021-08-26 03:09:56 -07:00
|
|
|
|
|
|
|
# Extract files from APK
|
2022-12-26 15:59:56 -08:00
|
|
|
unzip -oj magisk.apk 'assets/util_functions.sh' 'assets/stub.apk'
|
2021-09-07 03:03:02 -07:00
|
|
|
. ./util_functions.sh
|
|
|
|
|
|
|
|
api_level_arch_detect
|
|
|
|
|
2024-03-31 22:01:22 -07:00
|
|
|
unzip -oj magisk.apk "lib/$ABI/*" -x "lib/$ABI/libbusybox.so"
|
2021-08-26 03:09:56 -07:00
|
|
|
for file in lib*.so; do
|
|
|
|
chmod 755 $file
|
|
|
|
mv "$file" "${file:3:${#file}-6}"
|
|
|
|
done
|
|
|
|
|
2024-07-02 14:53:46 -07:00
|
|
|
if $IS64BIT && [ -e "/system/bin/linker" ]; then
|
2024-03-31 22:01:22 -07:00
|
|
|
unzip -oj magisk.apk "lib/$ABI32/libmagisk.so"
|
|
|
|
mv libmagisk.so magisk32
|
|
|
|
chmod 755 magisk32
|
|
|
|
fi
|
|
|
|
|
2021-08-26 03:09:56 -07:00
|
|
|
# Stop zygote (and previous setup if exists)
|
|
|
|
magisk --stop 2>/dev/null
|
|
|
|
stop
|
2023-10-29 00:47:28 -07:00
|
|
|
if [ -d /debug_ramdisk ]; then
|
|
|
|
umount -l /debug_ramdisk 2>/dev/null
|
2021-08-18 03:44:32 -07:00
|
|
|
fi
|
2019-10-21 13:58:57 -04:00
|
|
|
|
2023-09-28 15:37:11 -07:00
|
|
|
# Make sure boot completed props are not set to 1
|
|
|
|
setprop sys.boot_completed 0
|
|
|
|
|
2023-04-04 02:04:49 -07:00
|
|
|
# Mount /cache if not already mounted
|
|
|
|
if ! grep -q ' /cache ' /proc/mounts; then
|
|
|
|
mount -t tmpfs -o 'mode=0755' tmpfs /cache
|
2021-08-26 03:09:56 -07:00
|
|
|
fi
|
2019-09-03 17:06:14 -04:00
|
|
|
|
2021-08-26 03:09:56 -07:00
|
|
|
MAGISKTMP=/sbin
|
2020-07-27 03:32:54 -07:00
|
|
|
|
|
|
|
# Setup bin overlay
|
2019-09-04 11:12:09 -04:00
|
|
|
if mount | grep -q rootfs; then
|
2020-07-27 03:32:54 -07:00
|
|
|
# Legacy rootfs
|
2019-09-04 11:12:09 -04:00
|
|
|
mount -o rw,remount /
|
|
|
|
rm -rf /root
|
|
|
|
mkdir /root
|
|
|
|
chmod 750 /root
|
|
|
|
ln /sbin/* /root
|
|
|
|
mount -o ro,remount /
|
|
|
|
mount_sbin
|
|
|
|
ln -s /root/* /sbin
|
2020-07-27 03:32:54 -07:00
|
|
|
elif [ -e /sbin ]; then
|
|
|
|
# Legacy SAR
|
2019-09-04 11:12:09 -04:00
|
|
|
mount_sbin
|
2021-08-26 03:09:56 -07:00
|
|
|
mkdir -p /dev/sysroot
|
|
|
|
block=$(mount | grep ' / ' | awk '{ print $1 }')
|
2023-11-01 09:15:17 -07:00
|
|
|
[ $block = "/dev/root" ] && block=/dev/block/vda1
|
2021-08-26 03:09:56 -07:00
|
|
|
mount -o ro $block /dev/sysroot
|
|
|
|
for file in /dev/sysroot/sbin/*; do
|
2019-09-04 11:12:09 -04:00
|
|
|
[ ! -e $file ] && break
|
|
|
|
if [ -L $file ]; then
|
|
|
|
cp -af $file /sbin
|
|
|
|
else
|
2021-04-09 21:29:42 -07:00
|
|
|
sfile=/sbin/$(basename $file)
|
2019-09-04 11:12:09 -04:00
|
|
|
touch $sfile
|
|
|
|
mount -o bind $file $sfile
|
|
|
|
fi
|
|
|
|
done
|
2021-08-26 03:09:56 -07:00
|
|
|
umount -l /dev/sysroot
|
|
|
|
rm -rf /dev/sysroot
|
2020-07-27 03:32:54 -07:00
|
|
|
else
|
2021-08-26 03:09:56 -07:00
|
|
|
# Android Q+ without sbin
|
2023-10-29 00:47:28 -07:00
|
|
|
MAGISKTMP=/debug_ramdisk
|
2023-05-09 17:33:20 -07:00
|
|
|
# If a file name 'magisk' is in current directory, mount will fail
|
2024-03-31 22:01:22 -07:00
|
|
|
mv magisk magisk.tmp
|
2023-10-29 00:47:28 -07:00
|
|
|
mount -t tmpfs -o 'mode=0755' magisk /debug_ramdisk
|
2024-03-31 22:01:22 -07:00
|
|
|
mv magisk.tmp magisk
|
2019-09-04 11:12:09 -04:00
|
|
|
fi
|
|
|
|
|
2021-11-17 22:53:33 -04:00
|
|
|
# Magisk stuff
|
|
|
|
mkdir -p $MAGISKBIN 2>/dev/null
|
2022-08-02 03:37:04 -07:00
|
|
|
unzip -oj magisk.apk 'assets/*.sh' -d $MAGISKBIN
|
2021-11-17 22:53:33 -04:00
|
|
|
mkdir $NVBASE/modules 2>/dev/null
|
2023-07-17 16:07:16 -07:00
|
|
|
mkdir $NVBASE/post-fs-data.d 2>/dev/null
|
|
|
|
mkdir $NVBASE/service.d 2>/dev/null
|
2021-08-26 03:09:56 -07:00
|
|
|
|
2024-03-31 22:01:22 -07:00
|
|
|
for file in magisk magisk32 magiskpolicy stub.apk; do
|
2021-08-26 03:09:56 -07:00
|
|
|
chmod 755 ./$file
|
|
|
|
cp -af ./$file $MAGISKTMP/$file
|
2021-11-17 22:53:33 -04:00
|
|
|
cp -af ./$file $MAGISKBIN/$file
|
2021-08-26 03:09:56 -07:00
|
|
|
done
|
2021-11-17 22:53:33 -04:00
|
|
|
cp -af ./magiskboot $MAGISKBIN/magiskboot
|
2022-03-17 03:15:39 -07:00
|
|
|
cp -af ./magiskinit $MAGISKBIN/magiskinit
|
2021-11-17 22:53:33 -04:00
|
|
|
cp -af ./busybox $MAGISKBIN/busybox
|
2021-08-26 03:09:56 -07:00
|
|
|
|
|
|
|
ln -s ./magisk $MAGISKTMP/su
|
|
|
|
ln -s ./magisk $MAGISKTMP/resetprop
|
2022-03-17 03:15:39 -07:00
|
|
|
ln -s ./magiskpolicy $MAGISKTMP/supolicy
|
2021-08-26 03:09:56 -07:00
|
|
|
|
2024-01-05 01:47:15 +08:00
|
|
|
mkdir -p $MAGISKTMP/.magisk/device
|
2021-08-26 03:09:56 -07:00
|
|
|
touch $MAGISKTMP/.magisk/config
|
|
|
|
|
2023-03-31 17:20:32 -07:00
|
|
|
export MAGISKTMP
|
2023-04-04 02:04:49 -07:00
|
|
|
MAKEDEV=1 $MAGISKTMP/magisk --preinit-device 2>&1
|
|
|
|
|
|
|
|
RULESCMD=""
|
|
|
|
for r in $MAGISKTMP/.magisk/preinit/*/sepolicy.rule; do
|
|
|
|
[ -f "$r" ] || continue
|
|
|
|
RULESCMD="$RULESCMD --apply $r"
|
|
|
|
done
|
|
|
|
|
|
|
|
# SELinux stuffs
|
|
|
|
if [ -d /sys/fs/selinux ]; then
|
|
|
|
if [ -f /vendor/etc/selinux/precompiled_sepolicy ]; then
|
|
|
|
./magiskpolicy --load /vendor/etc/selinux/precompiled_sepolicy --live --magisk $RULESCMD 2>&1
|
|
|
|
elif [ -f /sepolicy ]; then
|
|
|
|
./magiskpolicy --load /sepolicy --live --magisk $RULESCMD 2>&1
|
|
|
|
else
|
|
|
|
./magiskpolicy --live --magisk $RULESCMD 2>&1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Boot up
|
2021-08-26 03:09:56 -07:00
|
|
|
$MAGISKTMP/magisk --post-fs-data
|
|
|
|
start
|
|
|
|
$MAGISKTMP/magisk --service
|