Support PATCHVBMETAFLAG env variable

This commit is contained in:
vvb2060 2021-12-15 03:37:52 +08:00 committed by John Wu
parent b2cd24ed1b
commit fd7bf2bc3a
9 changed files with 39 additions and 7 deletions

View File

@ -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)

View File

@ -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 =

View File

@ -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")

View File

@ -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
}

View File

@ -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

View File

@ -9,6 +9,8 @@
<import type="com.topjohnwu.magisk.core.Config" />
<import type="android.os.Build" />
<variable
name="viewModel"
type="com.topjohnwu.magisk.ui.install.InstallViewModel" />
@ -34,7 +36,7 @@
<com.google.android.material.card.MaterialCardView
style="@style/WidgetFoundation.Card"
gone="@{viewModel.skipOptions}"
gone="@{viewModel.skipOptions || Info.isEmulator}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/l1"
@ -108,6 +110,15 @@
android:text="@string/keep_force_encryption"
app:tint="?colorPrimary" />
<CheckBox
style="@style/WidgetFoundation.Checkbox"
goneUnless="@{!Info.vbmeta &amp;&amp; Build.VERSION.SDK_INT >= 30}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="@={Config.patchVbmeta}"
android:text="@string/patch_vbmeta"
app:tint="?colorPrimary" />
<CheckBox
style="@style/WidgetFoundation.Checkbox"
gone="@{Info.ramdisk}"

View File

@ -179,6 +179,12 @@ check_encryption() {
fi
}
check_vbmeta_partition() {
if [ -e /dev/block/by-name/vbmeta_a ] || [ -e /dev/block/by-name/vbmeta ]; then
VBMETAEXIST=true
fi
}
##########################
# Non-root util_functions
##########################
@ -211,6 +217,7 @@ app_init() {
SHA1=$(grep_prop SHA1 $MAGISKTMP/config)
check_boot_ramdisk && RAMDISKEXIST=true || RAMDISKEXIST=false
check_encryption
check_vbmeta_partition
# Make sure RECOVERYMODE has value
[ -z $RECOVERYMODE ] && RECOVERYMODE=false
}

View File

@ -36,6 +36,7 @@
<!--Install-->
<string name="keep_force_encryption">Preserve force encryption</string>
<string name="keep_dm_verity">Preserve AVB 2.0/dm-verity</string>
<string name="patch_vbmeta">Patch vbmeta in boot image</string>
<string name="recovery_mode">Recovery Mode</string>
<string name="install_options_title">Options</string>
<string name="install_method_title">Method</string>

View File

@ -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
}