mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-11-30 13:35:27 +00:00
95 lines
3.0 KiB
Bash
95 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
#####################################################################
|
|
# AVD MagiskInit Setup
|
|
#####################################################################
|
|
#
|
|
# Support API level: 23 - 33
|
|
#
|
|
# With an emulator booted and accessible via ADB, usage:
|
|
# ./build.py avd_patch path/to/booted/avd-image/ramdisk.img
|
|
#
|
|
# The purpose of this script is to patch AVD ramdisk.img and do a
|
|
# full integration test of magiskinit under several circumstances.
|
|
# After patching ramdisk.img, close the emulator, then select
|
|
# "Cold Boot Now" in AVD Manager to force a full reboot.
|
|
#
|
|
# P.S. If running against the API 28 image, modify init.hpp and set
|
|
# ENABLE_AVD_HACK to 1 to enable special hacks designed specifically
|
|
# for this use case.
|
|
#
|
|
#####################################################################
|
|
# AVD Init Configurations:
|
|
#
|
|
# rootfs w/o early mount: API 23 - 25
|
|
# rootfs with early mount: API 26 - 27
|
|
# Legacy system-as-root: API 28
|
|
# 2 stage init: API 29 - 33
|
|
#####################################################################
|
|
|
|
if [ ! -f /system/build.prop ]; then
|
|
# Running on PC
|
|
echo 'Please run `./build.py avd_patch` instead of directly executing the script!'
|
|
exit 1
|
|
fi
|
|
|
|
cd /data/local/tmp
|
|
chmod 755 busybox
|
|
|
|
if [ -z "$FIRST_STAGE" ]; then
|
|
export FIRST_STAGE=1
|
|
export ASH_STANDALONE=1
|
|
# Re-exec script with busybox
|
|
exec ./busybox sh $0
|
|
fi
|
|
|
|
# Extract files from APK
|
|
unzip -oj magisk.apk 'assets/util_functions.sh' 'assets/stub.apk'
|
|
. ./util_functions.sh
|
|
|
|
api_level_arch_detect
|
|
|
|
unzip -oj magisk.apk "lib/$ABI/*" "lib/$ABI32/libmagisk32.so" -x "lib/$ABI/libbusybox.so"
|
|
for file in lib*.so; do
|
|
chmod 755 $file
|
|
mv "$file" "${file:3:${#file}-6}"
|
|
done
|
|
|
|
./magiskboot decompress ramdisk.cpio.tmp ramdisk.cpio
|
|
cp ramdisk.cpio ramdisk.cpio.orig
|
|
|
|
export KEEPVERITY=false
|
|
export KEEPFORCEENCRYPT=true
|
|
|
|
echo "KEEPVERITY=$KEEPVERITY" > config
|
|
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
|
if [ -e "/system/bin/linker64" ]; then
|
|
echo "PREINITDEVICE=$(./magisk64 --preinit-device)" >> config
|
|
else
|
|
echo "PREINITDEVICE=$(./magisk32 --preinit-device)" >> config
|
|
fi
|
|
# For API 28, we also patch advancedFeatures.ini to disable SAR
|
|
# Manually override skip_initramfs by setting RECOVERYMODE=true
|
|
[ $API = "28" ] && echo 'RECOVERYMODE=true' >> config
|
|
RANDOMSEED=$(tr -dc 'a-f0-9' < /dev/urandom | head -c 16)
|
|
echo "RANDOMSEED=0x$RANDOMSEED" >> config
|
|
|
|
./magiskboot compress=xz magisk32 magisk32.xz
|
|
./magiskboot compress=xz magisk64 magisk64.xz
|
|
./magiskboot compress=xz stub.apk stub.xz
|
|
|
|
./magiskboot cpio ramdisk.cpio \
|
|
"add 0750 init magiskinit" \
|
|
"mkdir 0750 overlay.d" \
|
|
"mkdir 0750 overlay.d/sbin" \
|
|
"add 0644 overlay.d/sbin/magisk32.xz magisk32.xz" \
|
|
"add 0644 overlay.d/sbin/magisk64.xz magisk64.xz" \
|
|
"add 0644 overlay.d/sbin/stub.xz stub.xz" \
|
|
"patch" \
|
|
"backup ramdisk.cpio.orig" \
|
|
"mkdir 000 .backup" \
|
|
"add 000 .backup/.magisk config"
|
|
|
|
rm -f ramdisk.cpio.orig config magisk*.xz stub.xz
|
|
./magiskboot compress=gzip ramdisk.cpio ramdisk.cpio.gz
|
|
pm install magisk.apk || true
|