From 7fc9b908d447691253b55f09d358412b2025ca50 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Mon, 27 Jul 2020 03:32:54 -0700 Subject: [PATCH] Update Android 11 emulator support --- native/jni/core/restorecon.cpp | 7 +++++ scripts/emulator.sh | 53 ++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/native/jni/core/restorecon.cpp b/native/jni/core/restorecon.cpp index 88a95e8da..e2886528c 100644 --- a/native/jni/core/restorecon.cpp +++ b/native/jni/core/restorecon.cpp @@ -79,6 +79,13 @@ void restorecon() { } void restore_tmpcon() { + if (MAGISKTMP == "/system/bin") { + // Running with emulator.sh + if (SDK_INT >= 26) + lsetfilecon("/system/bin/magisk", EXEC_CON); + return; + } + if (MAGISKTMP == "/sbin") setfilecon(MAGISKTMP.data(), ROOT_CON); else diff --git a/scripts/emulator.sh b/scripts/emulator.sh index e91476da2..9f1230d54 100755 --- a/scripts/emulator.sh +++ b/scripts/emulator.sh @@ -43,15 +43,24 @@ fi cd /data/local/tmp chmod 777 busybox chmod 777 magiskinit +./magiskinit -x magisk magisk -if [ `./busybox id -u` -ne 0 ]; then - # Re-exec script with root - exec /system/xbin/su 0 ./busybox sh -o standalone $0 +if [ -z "$FIRST_STAGE" ]; then + export FIRST_STAGE=1 + export ASH_STANDALONE=1 + if [ `./busybox id -u` -ne 0 ]; then + # Re-exec script with root + exec /system/xbin/su 0 ./busybox sh $0 + else + # Re-exec script with busybox + exec ./busybox sh $0 + fi fi # Remove previous setup if exist pgrep magiskd >/dev/null && pkill -9 magiskd [ -f /sbin/magisk ] && umount -l /sbin +[ -f /system/bin/magisk ] && umount -l /system/bin # SELinux stuffs [ -e /sys/fs/selinux ] && SELINUX=true || SELINUX=false @@ -60,8 +69,11 @@ if $SELINUX; then ./magiskpolicy --live --magisk fi -# Setup sbin overlay +BINDIR=/sbin + +# Setup bin overlay if mount | grep -q rootfs; then + # Legacy rootfs mount -o rw,remount / rm -rf /root mkdir /root @@ -70,12 +82,15 @@ if mount | grep -q rootfs; then mount -o ro,remount / mount_sbin ln -s /root/* /sbin -else +elif [ -e /sbin ]; then + # Legacy SAR mount_sbin - mkdir -p /sbin/.magisk/mirror/system_root - block=`mount | grep ' / ' | awk '{ print $1 }'` - [ $block = "/dev/root" ] && block=/dev/block/dm-0 - mount -o ro $block /sbin/.magisk/mirror/system_root + if ! grep -q '/sbin/.magisk/mirror/system_root' /proc/mounts; then + mkdir -p /sbin/.magisk/mirror/system_root + block=`mount | grep ' / ' | awk '{ print $1 }'` + [ $block = "/dev/root" ] && block=/dev/block/dm-0 + mount -o ro $block /sbin/.magisk/mirror/system_root + fi for file in /sbin/.magisk/mirror/system_root/sbin/*; do [ ! -e $file ] && break if [ -L $file ]; then @@ -86,15 +101,23 @@ else mount -o bind $file $sfile fi done +else + # Android Q+ without sbin, use overlayfs + BINDIR=/system/bin + rm -rf /dev/magisk + mkdir -p /dev/magisk/upper + mkdir /dev/magisk/work + ./magisk --clone-attr /system/bin /dev/magisk/upper + mount -t overlay overlay -olowerdir=/system/bin,upperdir=/dev/magisk/upper,workdir=/dev/magisk/work /system/bin fi # Magisk stuffs -./magiskinit -x magisk /sbin/magisk -chmod 755 /sbin/magisk -ln -s ./magisk /sbin/su -ln -s ./magisk /sbin/resetprop -ln -s ./magisk /sbin/magiskhide +./magiskinit -x magisk $BINDIR/magisk +chmod 755 $BINDIR/magisk +ln -s ./magisk $BINDIR/su +ln -s ./magisk $BINDIR/resetprop +ln -s ./magisk $BINDIR/magiskhide mkdir -p /data/adb/modules 2>/dev/null mkdir /data/adb/post-fs-data.d 2>/dev/null mkdir /data/adb/services.d 2>/dev/null -/sbin/magisk --daemon +$BINDIR/magisk --daemon