From 0ec87a86b79bc5e44ddfc069f77b888302f5bcb8 Mon Sep 17 00:00:00 2001 From: osm0sis Date: Tue, 30 Mar 2021 00:57:06 -0300 Subject: [PATCH] Backend: update apex mounting support for Android 11 --- META-INF/com/google/android/update-binary | 45 ++++++++++++++--------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/META-INF/com/google/android/update-binary b/META-INF/com/google/android/update-binary index ee0a5b7..a52bcbc 100755 --- a/META-INF/com/google/android/update-binary +++ b/META-INF/com/google/android/update-binary @@ -43,21 +43,23 @@ find_slot() { setup_mountpoint() { [ -L $1 ] && $BB mv -f $1 ${1}_link; if [ ! -d $1 ]; then - rm -f $1; - mkdir -p $1; + $BB rm -f $1; + $BB mkdir -p $1; fi; } is_mounted() { $BB mount | $BB grep -q " $1 "; } mount_apex() { [ -d /system_root/system/apex ] || return 1; - local apex dest loop minorx num; + local apex dest loop minorx num var; setup_mountpoint /apex; minorx=1; [ -e /dev/block/loop1 ] && minorx=$($BB ls -l /dev/block/loop1 | $BB awk '{ print $6 }'); num=0; for apex in /system_root/system/apex/*; do dest=/apex/$($BB basename $apex .apex); - [ "$dest" == /apex/com.android.runtime.release ] && dest=/apex/com.android.runtime; + case $dest in + *.current|*.release) dest=$(echo $dest | $BB rev | $BB cut -d. -f2- | $BB rev);; + esac; $BB mkdir -p $dest; case $apex in *.apex) @@ -81,13 +83,22 @@ mount_apex() { *) $BB mount -o bind $apex $dest;; esac; done; - export ANDROID_RUNTIME_ROOT=/apex/com.android.runtime; - export ANDROID_TZDATA_ROOT=/apex/com.android.tzdata; - export BOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/telephony-ext.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar; + for var in $($BB grep -o 'export .* /.*' /system_root/init.environ.rc | $BB awk '{ print $2 }'); do + eval OLD_${var}=\$$var; + done; + $($BB grep -o 'export .* /.*' /system_root/init.environ.rc | $BB sed 's; /;=/;'); unset export; } umount_apex() { - [ -d /apex ] || return 1; - local dest loop; + [ -d /apex/com.android.runtime ] || return 1; + local dest loop var; + for var in $($BB grep -o 'export .* /.*' /system_root/init.environ.rc | $BB awk '{ print $2 }'); do + if [ "$(eval echo \$OLD_$var)" ]; then + eval $var=\$OLD_${var}; + else + eval unset $var; + fi; + unset OLD_${var}; + done; for dest in $($BB find /apex -type d -mindepth 1 -maxdepth 1); do if [ -f $dest.img ]; then loop=$($BB mount | $BB grep $dest | $BB cut -d\ -f1); @@ -96,7 +107,6 @@ umount_apex() { $BB losetup -d $loop) 2>/dev/null; done; $BB rm -rf /apex 2>/dev/null; - unset ANDROID_RUNTIME_ROOT ANDROID_TZDATA_ROOT BOOTCLASSPATH; } mount_all() { if ! is_mounted /cache; then @@ -154,13 +164,13 @@ umount_all() { (if [ ! -d /postinstall/tmp ]; then $BB umount /system; $BB umount -l /system; - if [ -e /system_root ]; then - $BB umount /system_root; - $BB umount -l /system_root; - fi; - fi; + fi) 2>/dev/null; umount_apex; - umount /vendor; # busybox umount /vendor breaks recovery on some devices + (if [ ! -d /postinstall/tmp ]; then + $BB umount /system_root; + $BB umount -l /system_root; + fi; + umount /vendor; # busybox umount /vendor breaks recovery on some hacky devices umount -l /vendor; for mount in /mnt/system /mnt/vendor /product /mnt/product /persist; do $BB umount $mount; @@ -220,6 +230,7 @@ restore_env() { [ "$OLD_LD_PATH" ] && export LD_LIBRARY_PATH=$OLD_LD_PATH; [ "$OLD_LD_PRE" ] && export LD_PRELOAD=$OLD_LD_PRE; [ "$OLD_LD_CFG" ] && export LD_CONFIG_FILE=$OLD_LD_CFG; + unset OLD_LD_PATH OLD_LD_PRE OLD_LD_CFG; umount_all; [ -L /etc_link ] && $BB rm -rf /etc/*; (for dir in /apex /system /system_root /etc; do @@ -360,7 +371,7 @@ do_modules() { umask=$(umask); umask 022; moddir=/data/adb/modules/ak3-helper; - rm -rf $moddir; + $BB rm -rf $moddir; mkdir -p system $moddir; ($BB mv -f product system; $BB mv -f vendor system) 2>/dev/null;