Backend: update apex mounting support for Android 11
This commit is contained in:
1 file changed
+28
-17
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user