From fd7bf2bc3a891fa22fbd2e43216e9695e4c7984c Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Wed, 15 Dec 2021 03:37:52 +0800 Subject: [PATCH] Support PATCHVBMETAFLAG env variable --- .../main/java/com/topjohnwu/magisk/core/Config.kt | 7 ++++--- app/src/main/java/com/topjohnwu/magisk/core/Info.kt | 1 + .../topjohnwu/magisk/core/tasks/MagiskInstaller.kt | 1 + .../com/topjohnwu/magisk/core/utils/ShellInit.kt | 2 ++ .../topjohnwu/magisk/ui/install/InstallViewModel.kt | 5 +++-- app/src/main/res/layout/fragment_install_md2.xml | 13 ++++++++++++- app/src/main/res/raw/manager.sh | 7 +++++++ app/src/main/res/values/strings.xml | 1 + scripts/util_functions.sh | 9 ++++++++- 9 files changed, 39 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Config.kt b/app/src/main/java/com/topjohnwu/magisk/core/Config.kt index 015562660..089c02688 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Config.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Config.kt @@ -109,9 +109,10 @@ object Config : PreferenceModel, DBConfig { else Value.DEFAULT_CHANNEL - @JvmStatic var keepVerity = false - @JvmStatic var keepEnc = false - @JvmStatic var recovery = false + @JvmField var keepVerity = false + @JvmField var keepEnc = false + @JvmField var patchVbmeta = false + @JvmField var recovery = false var bootId by preference(Key.BOOT_ID, "") var askedHome by preference(Key.ASKED_HOME, false) diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Info.kt b/app/src/main/java/com/topjohnwu/magisk/core/Info.kt index 2fca909ab..376cf387e 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Info.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Info.kt @@ -34,6 +34,7 @@ object Info { @JvmField val isZygiskEnabled = System.getenv("ZYGISK_ENABLED") == "1" @JvmStatic val isFDE get() = crypto == "block" @JvmField var ramdisk = false + @JvmField var vbmeta = false @JvmField var hasGMS = true @JvmField val isPixel = Build.BRAND == "google" @JvmField val isEmulator = diff --git a/app/src/main/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt b/app/src/main/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt index 5f683fbf3..5478d0f17 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt @@ -357,6 +357,7 @@ abstract class MagiskInstallImpl protected constructor( "cd $installDir", "KEEPFORCEENCRYPT=${Config.keepEnc} " + "KEEPVERITY=${Config.keepVerity} " + + "PATCHVBMETAFLAG=${Config.patchVbmeta} " + "RECOVERYMODE=${Config.recovery} " + "sh boot_patch.sh $srcBoot") diff --git a/app/src/main/java/com/topjohnwu/magisk/core/utils/ShellInit.kt b/app/src/main/java/com/topjohnwu/magisk/core/utils/ShellInit.kt index 5ef0f9d11..c138d8ded 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/utils/ShellInit.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/utils/ShellInit.kt @@ -75,6 +75,7 @@ class ShellInit : Shell.Initializer() { Const.MAGISKTMP = getVar("MAGISKTMP") Info.isSAR = getBool("SYSTEM_ROOT") Info.ramdisk = getBool("RAMDISKEXIST") + Info.vbmeta = getBool("VBMETAEXIST") Info.isAB = getBool("ISAB") Info.crypto = getVar("CRYPTOTYPE") @@ -82,6 +83,7 @@ class ShellInit : Shell.Initializer() { Config.recovery = getBool("RECOVERYMODE") Config.keepVerity = getBool("KEEPVERITY") Config.keepEnc = getBool("KEEPFORCEENCRYPT") + Config.patchVbmeta = getBool("PATCHVBMETAFLAG") return true } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt index 59eab5e70..3db8ca7f0 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt @@ -1,6 +1,7 @@ package com.topjohnwu.magisk.ui.install import android.net.Uri +import android.os.Build import androidx.databinding.Bindable import androidx.lifecycle.viewModelScope import com.topjohnwu.magisk.BR @@ -26,11 +27,11 @@ class InstallViewModel( ) : BaseViewModel() { val isRooted = Shell.rootAccess() - val skipOptions = Info.isEmulator || (Info.ramdisk && !Info.isFDE && Info.isSAR) + val skipOptions = Info.ramdisk && !Info.isFDE && Info.isSAR && !(!Info.vbmeta && Build.VERSION.SDK_INT >= 30) val noSecondSlot = !isRooted || Info.isPixel || Info.isVirtualAB || !Info.isAB || Info.isEmulator @get:Bindable - var step = if (skipOptions) 1 else 0 + var step = if (Info.isEmulator || skipOptions) 1 else 0 set(value) = set(value, field, { field = it }, BR.step) var _method = -1 diff --git a/app/src/main/res/layout/fragment_install_md2.xml b/app/src/main/res/layout/fragment_install_md2.xml index f1eb7848f..fefd90d83 100644 --- a/app/src/main/res/layout/fragment_install_md2.xml +++ b/app/src/main/res/layout/fragment_install_md2.xml @@ -9,6 +9,8 @@ + + @@ -34,7 +36,7 @@ + + Preserve force encryption Preserve AVB 2.0/dm-verity + Patch vbmeta in boot image Recovery Mode Options Method diff --git a/scripts/util_functions.sh b/scripts/util_functions.sh index baa18c336..c72d42a4b 100644 --- a/scripts/util_functions.sh +++ b/scripts/util_functions.sh @@ -403,7 +403,14 @@ get_flags() { KEEPFORCEENCRYPT=false fi fi - [ -z $PATCHVBMETAFLAG ] && PATCHVBMETAFLAG=false + if [ -z $PATCHVBMETAFLAG ]; then + if [ -e /dev/block/by-name/vbmeta_a ] || [ -e /dev/block/by-name/vbmeta ]; then + PATCHVBMETAFLAG=false + else + PATCHVBMETAFLAG=true + ui_print "- Not found vbmeta partition, patch vbmetaflag" + fi + fi [ -z $RECOVERYMODE ] && RECOVERYMODE=false }