mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 16:07:39 +00:00
Install one single ABI in ramdisk
This commit is contained in:
parent
30bf5c8448
commit
fb5ee86615
@ -1,6 +1,7 @@
|
|||||||
package com.topjohnwu.magisk.core.tasks
|
package com.topjohnwu.magisk.core.tasks
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Process
|
||||||
import android.system.ErrnoException
|
import android.system.ErrnoException
|
||||||
import android.system.Os
|
import android.system.Os
|
||||||
import android.system.OsConstants
|
import android.system.OsConstants
|
||||||
@ -105,15 +106,9 @@ abstract class MagiskInstallImpl protected constructor(
|
|||||||
try {
|
try {
|
||||||
// Extract binaries
|
// Extract binaries
|
||||||
if (isRunningAsStub) {
|
if (isRunningAsStub) {
|
||||||
val zf = ZipFile(StubApk.current(context))
|
ZipFile(StubApk.current(context)).use { zf ->
|
||||||
|
|
||||||
// Also extract magisk32 on non 64-bit only 64-bit devices
|
|
||||||
val is32lib = Const.CPU_ABI_32?.let {
|
|
||||||
{ entry: ZipEntry -> entry.name == "lib/$it/libmagisk32.so" }
|
|
||||||
} ?: { false }
|
|
||||||
|
|
||||||
zf.entries().asSequence().filter {
|
zf.entries().asSequence().filter {
|
||||||
!it.isDirectory && (it.name.startsWith("lib/${Const.CPU_ABI}/") || is32lib(it))
|
!it.isDirectory && it.name.startsWith("/lib/${Const.CPU_ABI}/")
|
||||||
}.forEach {
|
}.forEach {
|
||||||
val n = it.name.substring(it.name.lastIndexOf('/') + 1)
|
val n = it.name.substring(it.name.lastIndexOf('/') + 1)
|
||||||
val name = n.substring(3, n.length - 3)
|
val name = n.substring(3, n.length - 3)
|
||||||
@ -121,24 +116,31 @@ abstract class MagiskInstallImpl protected constructor(
|
|||||||
zf.getInputStream(it).writeTo(dest)
|
zf.getInputStream(it).writeTo(dest)
|
||||||
dest.setExecutable(true)
|
dest.setExecutable(true)
|
||||||
}
|
}
|
||||||
zf.close()
|
|
||||||
|
val abi32 = Const.CPU_ABI_32
|
||||||
|
if (Process.is64Bit() && abi32 != null) {
|
||||||
|
val magisk32 = File(installDir, "magisk32")
|
||||||
|
zf.getInputStream(ZipEntry("lib/$abi32/libmagisk.so")).writeTo(magisk32)
|
||||||
|
magisk32.setExecutable(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
val info = context.applicationInfo
|
val info = context.applicationInfo
|
||||||
var libs = File(info.nativeLibraryDir).listFiles { _, name ->
|
var libs = File(info.nativeLibraryDir).listFiles { _, name ->
|
||||||
name.startsWith("lib") && name.endsWith(".so")
|
name.startsWith("lib") && name.endsWith(".so")
|
||||||
} ?: emptyArray()
|
} ?: emptyArray()
|
||||||
|
|
||||||
// Also symlink magisk32 on non 64-bit only 64-bit devices
|
|
||||||
val lib32 = info.javaClass.getDeclaredField("secondaryNativeLibraryDir")
|
|
||||||
.get(info) as String?
|
|
||||||
if (lib32 != null) {
|
|
||||||
libs += File(lib32, "libmagisk32.so")
|
|
||||||
}
|
|
||||||
|
|
||||||
for (lib in libs) {
|
for (lib in libs) {
|
||||||
val name = lib.name.substring(3, lib.name.length - 3)
|
val name = lib.name.substring(3, lib.name.length - 3)
|
||||||
Os.symlink(lib.path, "$installDir/$name")
|
Os.symlink(lib.path, "$installDir/$name")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Also symlink magisk32 on 64-bit devices that supports 32-bit
|
||||||
|
val lib32 = info.javaClass.getDeclaredField("secondaryNativeLibraryDir")
|
||||||
|
.get(info) as String?
|
||||||
|
if (lib32 != null) {
|
||||||
|
Os.symlink("$lib32/libmagisk.so", "$installDir/magisk32");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract scripts
|
// Extract scripts
|
||||||
|
@ -231,25 +231,25 @@ fun Project.setupApp() {
|
|||||||
into("armeabi-v7a") {
|
into("armeabi-v7a") {
|
||||||
from(rootProject.file("native/out/armeabi-v7a")) {
|
from(rootProject.file("native/out/armeabi-v7a")) {
|
||||||
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
||||||
rename { if (it == "magisk") "libmagisk32.so" else "lib$it.so" }
|
rename { "lib$it.so" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
into("x86") {
|
into("x86") {
|
||||||
from(rootProject.file("native/out/x86")) {
|
from(rootProject.file("native/out/x86")) {
|
||||||
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
||||||
rename { if (it == "magisk") "libmagisk32.so" else "lib$it.so" }
|
rename { "lib$it.so" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
into("arm64-v8a") {
|
into("arm64-v8a") {
|
||||||
from(rootProject.file("native/out/arm64-v8a")) {
|
from(rootProject.file("native/out/arm64-v8a")) {
|
||||||
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
||||||
rename { if (it == "magisk") "libmagisk64.so" else "lib$it.so" }
|
rename { "lib$it.so" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
into("x86_64") {
|
into("x86_64") {
|
||||||
from(rootProject.file("native/out/x86_64")) {
|
from(rootProject.file("native/out/x86_64")) {
|
||||||
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
||||||
rename { if (it == "magisk") "libmagisk64.so" else "lib$it.so" }
|
rename { "lib$it.so" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onlyIf {
|
onlyIf {
|
||||||
|
@ -41,6 +41,12 @@ static bool magisk_env() {
|
|||||||
cp_afc(DATABIN "/busybox", buf);
|
cp_afc(DATABIN "/busybox", buf);
|
||||||
exec_command_async(buf, "--install", "-s", dirname(buf));
|
exec_command_async(buf, "--install", "-s", dirname(buf));
|
||||||
|
|
||||||
|
// magisk32 and magiskpolicy are not installed into ramdisk and has to be copied
|
||||||
|
// from data to magisk tmp
|
||||||
|
if (access(DATABIN "/magisk32", X_OK) == 0) {
|
||||||
|
ssprintf(buf, sizeof(buf), "%s/magisk32", get_magisk_tmp());
|
||||||
|
cp_afc(DATABIN "/magisk32", buf);
|
||||||
|
}
|
||||||
if (access(DATABIN "/magiskpolicy", X_OK) == 0) {
|
if (access(DATABIN "/magiskpolicy", X_OK) == 0) {
|
||||||
ssprintf(buf, sizeof(buf), "%s/magiskpolicy", get_magisk_tmp());
|
ssprintf(buf, sizeof(buf), "%s/magiskpolicy", get_magisk_tmp());
|
||||||
cp_afc(DATABIN "/magiskpolicy", buf);
|
cp_afc(DATABIN "/magiskpolicy", buf);
|
||||||
|
@ -203,11 +203,16 @@ public:
|
|||||||
|
|
||||||
class zygisk_node : public node_entry {
|
class zygisk_node : public node_entry {
|
||||||
public:
|
public:
|
||||||
explicit zygisk_node(const char *name, bool is64bit) : node_entry(name, DT_REG, this),
|
explicit zygisk_node(const char *name, bool is64bit)
|
||||||
is64bit(is64bit) {}
|
: node_entry(name, DT_REG, this), is64bit(is64bit) {}
|
||||||
|
|
||||||
void mount() override {
|
void mount() override {
|
||||||
const string src = get_magisk_tmp() + "/magisk"s + (is64bit ? "64" : "32");
|
#if defined(__LP64__)
|
||||||
|
const string src = get_magisk_tmp() + "/magisk"s + (is64bit ? "" : "32");
|
||||||
|
#else
|
||||||
|
const string src = get_magisk_tmp() + "/magisk"s;
|
||||||
|
(void) is64bit;
|
||||||
|
#endif
|
||||||
create_and_mount("zygisk", src, true);
|
create_and_mount("zygisk", src, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,11 @@ static void connect_companion(int client, bool is_64_bit) {
|
|||||||
zygiskd_socket = fds[0];
|
zygiskd_socket = fds[0];
|
||||||
if (fork_dont_care() == 0) {
|
if (fork_dont_care() == 0) {
|
||||||
char exe[64];
|
char exe[64];
|
||||||
ssprintf(exe, sizeof(exe), "%s/magisk%s", get_magisk_tmp(), (is_64_bit ? "64" : "32"));
|
#if defined(__LP64__)
|
||||||
|
ssprintf(exe, sizeof(exe), "%s/magisk%s", get_magisk_tmp(), (is_64_bit ? "" : "32"));
|
||||||
|
#else
|
||||||
|
ssprintf(exe, sizeof(exe), "%s/magisk", get_magisk_tmp());
|
||||||
|
#endif
|
||||||
// This fd has to survive exec
|
// This fd has to survive exec
|
||||||
fcntl(fds[1], F_SETFD, 0);
|
fcntl(fds[1], F_SETFD, 0);
|
||||||
char buf[16];
|
char buf[16];
|
||||||
|
@ -187,29 +187,17 @@ static void magic_mount(const string &sdir, const string &ddir = "") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void extract_files(bool sbin) {
|
static void extract_files(bool sbin) {
|
||||||
const char *m32 = sbin ? "/sbin/magisk32.xz" : "magisk32.xz";
|
const char *magisk_xz = sbin ? "/sbin/magisk.xz" : "magisk.xz";
|
||||||
const char *m64 = sbin ? "/sbin/magisk64.xz" : "magisk64.xz";
|
|
||||||
const char *stub_xz = sbin ? "/sbin/stub.xz" : "stub.xz";
|
const char *stub_xz = sbin ? "/sbin/stub.xz" : "stub.xz";
|
||||||
|
|
||||||
if (access(m32, F_OK) == 0) {
|
if (access(magisk_xz, F_OK) == 0) {
|
||||||
mmap_data magisk(m32);
|
mmap_data magisk(magisk_xz);
|
||||||
unlink(m32);
|
unlink(magisk_xz);
|
||||||
int fd = xopen("magisk32", O_WRONLY | O_CREAT, 0755);
|
int fd = xopen("magisk", O_WRONLY | O_CREAT, 0755);
|
||||||
fd_stream ch(fd);
|
fd_stream ch(fd);
|
||||||
unxz(ch, magisk);
|
unxz(ch, magisk);
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
if (access(m64, F_OK) == 0) {
|
|
||||||
mmap_data magisk(m64);
|
|
||||||
unlink(m64);
|
|
||||||
int fd = xopen("magisk64", O_WRONLY | O_CREAT, 0755);
|
|
||||||
fd_stream ch(fd);
|
|
||||||
unxz(ch, magisk);
|
|
||||||
close(fd);
|
|
||||||
xsymlink("./magisk64", "magisk");
|
|
||||||
} else {
|
|
||||||
xsymlink("./magisk32", "magisk");
|
|
||||||
}
|
|
||||||
if (access(stub_xz, F_OK) == 0) {
|
if (access(stub_xz, F_OK) == 0) {
|
||||||
mmap_data stub(stub_xz);
|
mmap_data stub(stub_xz);
|
||||||
unlink(stub_xz);
|
unlink(stub_xz);
|
||||||
|
@ -52,12 +52,18 @@ unzip -oj magisk.apk 'assets/util_functions.sh' 'assets/stub.apk'
|
|||||||
|
|
||||||
api_level_arch_detect
|
api_level_arch_detect
|
||||||
|
|
||||||
unzip -oj magisk.apk "lib/$ABI/*" "lib/$ABI32/libmagisk32.so" -x "lib/$ABI/libbusybox.so"
|
unzip -oj magisk.apk "lib/$ABI/*" -x "lib/$ABI/libbusybox.so"
|
||||||
for file in lib*.so; do
|
for file in lib*.so; do
|
||||||
chmod 755 $file
|
chmod 755 $file
|
||||||
mv "$file" "${file:3:${#file}-6}"
|
mv "$file" "${file:3:${#file}-6}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if $IS64BIT; then
|
||||||
|
unzip -oj magisk.apk "lib/$ABI32/libmagisk.so"
|
||||||
|
mv libmagisk.so magisk32
|
||||||
|
chmod 755 magisk32
|
||||||
|
fi
|
||||||
|
|
||||||
# Stop zygote (and previous setup if exists)
|
# Stop zygote (and previous setup if exists)
|
||||||
magisk --stop 2>/dev/null
|
magisk --stop 2>/dev/null
|
||||||
stop
|
stop
|
||||||
@ -109,8 +115,9 @@ else
|
|||||||
# Android Q+ without sbin
|
# Android Q+ without sbin
|
||||||
MAGISKTMP=/debug_ramdisk
|
MAGISKTMP=/debug_ramdisk
|
||||||
# If a file name 'magisk' is in current directory, mount will fail
|
# If a file name 'magisk' is in current directory, mount will fail
|
||||||
rm -f magisk
|
mv magisk magisk.tmp
|
||||||
mount -t tmpfs -o 'mode=0755' magisk /debug_ramdisk
|
mount -t tmpfs -o 'mode=0755' magisk /debug_ramdisk
|
||||||
|
mv magisk.tmp magisk
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Magisk stuff
|
# Magisk stuff
|
||||||
@ -120,7 +127,7 @@ mkdir $NVBASE/modules 2>/dev/null
|
|||||||
mkdir $NVBASE/post-fs-data.d 2>/dev/null
|
mkdir $NVBASE/post-fs-data.d 2>/dev/null
|
||||||
mkdir $NVBASE/service.d 2>/dev/null
|
mkdir $NVBASE/service.d 2>/dev/null
|
||||||
|
|
||||||
for file in magisk32 magisk64 magiskpolicy stub.apk; do
|
for file in magisk magisk32 magiskpolicy stub.apk; do
|
||||||
chmod 755 ./$file
|
chmod 755 ./$file
|
||||||
cp -af ./$file $MAGISKTMP/$file
|
cp -af ./$file $MAGISKTMP/$file
|
||||||
cp -af ./$file $MAGISKBIN/$file
|
cp -af ./$file $MAGISKBIN/$file
|
||||||
@ -129,11 +136,6 @@ cp -af ./magiskboot $MAGISKBIN/magiskboot
|
|||||||
cp -af ./magiskinit $MAGISKBIN/magiskinit
|
cp -af ./magiskinit $MAGISKBIN/magiskinit
|
||||||
cp -af ./busybox $MAGISKBIN/busybox
|
cp -af ./busybox $MAGISKBIN/busybox
|
||||||
|
|
||||||
if $IS64BIT; then
|
|
||||||
ln -s ./magisk64 $MAGISKTMP/magisk
|
|
||||||
else
|
|
||||||
ln -s ./magisk32 $MAGISKTMP/magisk
|
|
||||||
fi
|
|
||||||
ln -s ./magisk $MAGISKTMP/su
|
ln -s ./magisk $MAGISKTMP/su
|
||||||
ln -s ./magisk $MAGISKTMP/resetprop
|
ln -s ./magisk $MAGISKTMP/resetprop
|
||||||
ln -s ./magiskpolicy $MAGISKTMP/supolicy
|
ln -s ./magiskpolicy $MAGISKTMP/supolicy
|
||||||
|
@ -43,7 +43,7 @@ unzip -oj magisk.apk 'assets/util_functions.sh' 'assets/stub.apk'
|
|||||||
|
|
||||||
api_level_arch_detect
|
api_level_arch_detect
|
||||||
|
|
||||||
unzip -oj magisk.apk "lib/$ABI/*" "lib/$ABI32/libmagisk32.so" -x "lib/$ABI/libbusybox.so"
|
unzip -oj magisk.apk "lib/$ABI/*" -x "lib/$ABI/libbusybox.so"
|
||||||
for file in lib*.so; do
|
for file in lib*.so; do
|
||||||
chmod 755 $file
|
chmod 755 $file
|
||||||
mv "$file" "${file:3:${#file}-6}"
|
mv "$file" "${file:3:${#file}-6}"
|
||||||
@ -57,34 +57,20 @@ export KEEPFORCEENCRYPT=true
|
|||||||
|
|
||||||
echo "KEEPVERITY=$KEEPVERITY" > config
|
echo "KEEPVERITY=$KEEPVERITY" > config
|
||||||
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
||||||
if [ -f magisk64 ]; then
|
echo "PREINITDEVICE=$(./magisk --preinit-device)" >> config
|
||||||
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
|
# For API 28, we also patch advancedFeatures.ini to disable SAR
|
||||||
# Manually override skip_initramfs by setting RECOVERYMODE=true
|
# Manually override skip_initramfs by setting RECOVERYMODE=true
|
||||||
[ $API = "28" ] && echo 'RECOVERYMODE=true' >> config
|
[ $API = "28" ] && echo 'RECOVERYMODE=true' >> config
|
||||||
cat config
|
cat config
|
||||||
|
|
||||||
SKIP32="#"
|
./magiskboot compress=xz magisk magisk.xz
|
||||||
SKIP64="#"
|
|
||||||
if [ -f magisk64 ]; then
|
|
||||||
./magiskboot compress=xz magisk64 magisk64.xz
|
|
||||||
unset SKIP64
|
|
||||||
fi
|
|
||||||
if [ -e "/system/bin/linker" ]; then
|
|
||||||
./magiskboot compress=xz magisk32 magisk32.xz
|
|
||||||
unset SKIP32
|
|
||||||
fi
|
|
||||||
./magiskboot compress=xz stub.apk stub.xz
|
./magiskboot compress=xz stub.apk stub.xz
|
||||||
|
|
||||||
./magiskboot cpio ramdisk.cpio \
|
./magiskboot cpio ramdisk.cpio \
|
||||||
"add 0750 init magiskinit" \
|
"add 0750 init magiskinit" \
|
||||||
"mkdir 0750 overlay.d" \
|
"mkdir 0750 overlay.d" \
|
||||||
"mkdir 0750 overlay.d/sbin" \
|
"mkdir 0750 overlay.d/sbin" \
|
||||||
"$SKIP32 add 0644 overlay.d/sbin/magisk32.xz magisk32.xz" \
|
"add 0644 overlay.d/sbin/magisk.xz magisk.xz" \
|
||||||
"$SKIP64 add 0644 overlay.d/sbin/magisk64.xz magisk64.xz" \
|
|
||||||
"add 0644 overlay.d/sbin/stub.xz stub.xz" \
|
"add 0644 overlay.d/sbin/stub.xz stub.xz" \
|
||||||
"patch" \
|
"patch" \
|
||||||
"backup ramdisk.cpio.orig" \
|
"backup ramdisk.cpio.orig" \
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
# util_functions.sh script A script which hosts all functions required
|
# util_functions.sh script A script which hosts all functions required
|
||||||
# for this script to work properly.
|
# for this script to work properly.
|
||||||
# magiskinit binary The binary to replace /init.
|
# magiskinit binary The binary to replace /init.
|
||||||
# magisk(32/64) binary The magisk binaries.
|
# magisk binary The magisk binary.
|
||||||
# magiskboot binary A tool to manipulate boot images.
|
# magiskboot binary A tool to manipulate boot images.
|
||||||
# stub.apk binary The stub Magisk app to embed into ramdisk.
|
# stub.apk binary The stub Magisk app to embed into ramdisk.
|
||||||
# chromeos folder This folder includes the utility and keys to sign
|
# chromeos folder This folder includes the utility and keys to sign
|
||||||
@ -156,19 +156,10 @@ fi
|
|||||||
|
|
||||||
ui_print "- Patching ramdisk"
|
ui_print "- Patching ramdisk"
|
||||||
|
|
||||||
|
$BOOTMODE && [ -z "$PREINITDEVICE" ] && PREINITDEVICE=$(./magisk --preinit-device)
|
||||||
|
|
||||||
# Compress to save precious ramdisk space
|
# Compress to save precious ramdisk space
|
||||||
SKIP32="#"
|
./magiskboot compress=xz magisk magisk.xz
|
||||||
SKIP64="#"
|
|
||||||
if [ -f magisk64 ]; then
|
|
||||||
$BOOTMODE && [ -z "$PREINITDEVICE" ] && PREINITDEVICE=$(./magisk64 --preinit-device)
|
|
||||||
./magiskboot compress=xz magisk64 magisk64.xz
|
|
||||||
unset SKIP64
|
|
||||||
fi
|
|
||||||
if [ -f magisk32 ]; then
|
|
||||||
$BOOTMODE && [ -z "$PREINITDEVICE" ] && PREINITDEVICE=$(./magisk32 --preinit-device)
|
|
||||||
./magiskboot compress=xz magisk32 magisk32.xz
|
|
||||||
unset SKIP32
|
|
||||||
fi
|
|
||||||
./magiskboot compress=xz stub.apk stub.xz
|
./magiskboot compress=xz stub.apk stub.xz
|
||||||
|
|
||||||
echo "KEEPVERITY=$KEEPVERITY" > config
|
echo "KEEPVERITY=$KEEPVERITY" > config
|
||||||
@ -184,8 +175,7 @@ fi
|
|||||||
"add 0750 init magiskinit" \
|
"add 0750 init magiskinit" \
|
||||||
"mkdir 0750 overlay.d" \
|
"mkdir 0750 overlay.d" \
|
||||||
"mkdir 0750 overlay.d/sbin" \
|
"mkdir 0750 overlay.d/sbin" \
|
||||||
"$SKIP32 add 0644 overlay.d/sbin/magisk32.xz magisk32.xz" \
|
"add 0644 overlay.d/sbin/magisk.xz magisk.xz" \
|
||||||
"$SKIP64 add 0644 overlay.d/sbin/magisk64.xz magisk64.xz" \
|
|
||||||
"add 0644 overlay.d/sbin/stub.xz stub.xz" \
|
"add 0644 overlay.d/sbin/stub.xz stub.xz" \
|
||||||
"patch" \
|
"patch" \
|
||||||
"$SKIP_BACKUP backup ramdisk.cpio.orig" \
|
"$SKIP_BACKUP backup ramdisk.cpio.orig" \
|
||||||
|
@ -55,7 +55,7 @@ BINDIR=$INSTALLER/lib/$ABI
|
|||||||
cd $BINDIR
|
cd $BINDIR
|
||||||
for file in lib*.so; do mv "$file" "${file:3:${#file}-6}"; done
|
for file in lib*.so; do mv "$file" "${file:3:${#file}-6}"; done
|
||||||
cd /
|
cd /
|
||||||
cp -af $INSTALLER/lib/$ABI32/libmagisk32.so $BINDIR/magisk32 2>/dev/null
|
cp -af $INSTALLER/lib/$ABI32/libmagisk.so $BINDIR/magisk32 2>/dev/null
|
||||||
|
|
||||||
# Check if system root is installed and remove
|
# Check if system root is installed and remove
|
||||||
$BOOTMODE || remove_system_su
|
$BOOTMODE || remove_system_su
|
||||||
|
Loading…
x
Reference in New Issue
Block a user