Files
anykernel3-rhode/META-INF/com/google/android/update-binary
T
osm0sis 34d8a65fbe Backend: workaround bad ROM versioning practices in supported check
- some ROMs have taken it upon themselves to go against AOSP, i.e. where starting with Pie AOSP now versions it as only 9, some ROMs are still making it 9.0
- introduce integer 2 float function that will add a decimal place to all for comparisons
- this should support the majority of ROMs, but anything crazy like 9.0.0, or crazier like 09.0.0 should be frowned upon by the community and the ROM devs should be made to get it together and follow AOSP
2018-12-20 13:46:52 -04:00

218 lines
5.8 KiB
Bash
Executable File

#!/sbin/sh
# AnyKernel2 Backend (DO NOT CHANGE)
# osm0sis @ xda-developers
OUTFD=/proc/self/fd/$2;
ZIPFILE="$3";
DIR=`dirname "$ZIPFILE"`;
ui_print() {
until [ ! "$1" ]; do
echo -e "ui_print $1\nui_print" > $OUTFD;
shift;
done;
}
show_progress() { echo "progress $1 $2" > $OUTFD; }
file_getprop() { $bb grep "^$2=" "$1" | $bb cut -d= -f2-; }
cleanup() {
cd /tmp;
rm -rf /tmp/anykernel;
}
debugging() {
case $(basename "$ZIPFILE" .zip) in
*-debugging)
ui_print " ";
ui_print "Creating debugging archive in zip directory...";
$bb tar -czvf "$DIR/anykernel2-$(date +%Y-%m-%d_%H%M%S)-debug.tgz" /tmp/*;
;;
esac;
}
is_mounted() { $bb mount | $bb grep " $1 "; }
unmount_all() {
(umount /system;
if [ -d /system_root -a ! -f /system/build.prop ]; then
umount /system_root;
fi;
umount /system;
umount /vendor;
umount /data) 2>/dev/null;
}
abort() {
ui_print "$*";
debugging;
if [ ! -f anykernel.sh -o "$(file_getprop anykernel.sh do.cleanuponabort 2>/dev/null)" == 1 ]; then
cleanup;
fi;
unmount_all;
exit 1;
}
show_progress 1.34 4;
ui_print " ";
cleanup;
mkdir -p /tmp/anykernel/bin;
cd /tmp/anykernel;
unzip -o "$ZIPFILE";
if [ $? != 0 -o -z "$(ls tools)" ]; then
abort "Unzip failed. Aborting...";
fi;
bb=/tmp/anykernel/tools/busybox;
chmod 755 $bb;
$bb chmod -R 755 tools bin;
if [ -f banner ]; then
while IFS='' read -r line || $bb [[ -n "$line" ]]; do
ui_print "$line";
done < banner;
ui_print " ";
ui_print " ";
fi;
ui_print "$(file_getprop anykernel.sh kernel.string)";
if [ -f version ]; then
ui_print " ";
while IFS='' read -r line || $bb [[ -n "$line" ]]; do
ui_print "$line";
done < version;
ui_print " ";
fi;
ui_print " ";
ui_print "AnyKernel2 by osm0sis @ xda-developers";
ui_print " ";
ui_print " ";
unmount_all;
if [ ! "$(is_mounted /system)" ]; then
$bb mount -o ro -t auto /system;
fi;
($bb mount -o ro -t auto /vendor;
$bb mount /data) 2>/dev/null;
if [ -f /system/system/build.prop ]; then
umount /system;
(umount /system;
mkdir /system_root) 2>/dev/null;
$bb mount -o ro -t auto /dev/block/bootdevice/by-name/system /system_root;
$bb mount -o bind /system_root/system /system;
fi;
savedpath="$LD_LIBRARY_PATH";
savedpre="$LD_PRELOAD";
unset LD_LIBRARY_PATH;
unset LD_PRELOAD;
if [ ! "$(getprop 2>/dev/null)" ]; then
getprop() {
local propval="$(file_getprop /default.prop $1 2>/dev/null)";
test "$propval" || local propval="$(file_getprop /system/build.prop $1 2>/dev/null)";
test "$propval" && echo "$propval" || echo "";
}
elif [ ! "$(getprop ro.product.device 2>/dev/null)" -a ! "$(getprop ro.build.product 2>/dev/null)" ]; then
getprop() {
($(which getprop) | $bb grep "$1" | $bb cut -d[ -f3 | $bb cut -d] -f1) 2>/dev/null;
}
fi;
if [ "$(file_getprop anykernel.sh do.devicecheck)" == 1 ]; then
ui_print "Checking device...";
device="$(getprop ro.product.device)";
product="$(getprop ro.build.product)";
for testname in $(file_getprop anykernel.sh 'device.name.*'); do
if [ "$device" == "$testname" -o "$product" == "$testname" ]; then
ui_print "$testname";
match=1;
break;
fi;
done;
ui_print " ";
if [ ! "$match" ]; then
abort "Unsupported device. Aborting...";
fi;
fi;
int2float() { test "$1" -eq "$1" 2>/dev/null && $bb printf '%0.1f\n' "$1" || echo "$1"; }
supported_ver="$(file_getprop anykernel.sh supported.versions | $bb tr -d '[:space:]')";
if [ "$supported_ver" ]; then
ui_print "Checking Android version...";
android_ver="$(file_getprop /system/build.prop ro.build.version.release)";
if [ "$(echo $supported_ver | $bb grep -)" ]; then
lo_ver=$(echo $supported_ver | $bb cut -d- -f1);
hi_ver=$(echo $supported_ver | $bb cut -d- -f2);
if [ "$(echo -e "$(int2float $hi_ver)\n$(int2float $lo_ver)\n$(int2float $android_ver)" | $bb sort -g | $bb grep -n "$(int2float $android_ver)" | $bb grep '^2:')" ]; then
supported=1;
fi;
else
for ver in $(echo $supported_ver | $bb sed 's;,; ;g'); do
if [ "$(int2float $ver)" == "$(int2float $android_ver)" ]; then
supported=1;
break;
fi;
done;
fi;
if [ "$supported" ]; then
ui_print "$android_ver";
ui_print " ";
else
ui_print " ";
abort "Unsupported Android version. Aborting...";
fi;
fi;
ui_print "Installing...";
for i in $($bb --list); do
$bb ln -s $bb bin/$i;
done;
if [ $? != 0 -o -z "$(ls bin)" ]; then
abort "Recovery busybox setup failed. Aborting...";
fi;
PATH="/tmp/anykernel/bin:$PATH" $bb ash anykernel.sh $2;
if [ $? != 0 ]; then
abort;
fi;
if [ "$(file_getprop anykernel.sh do.modules)" == 1 ]; then
ui_print " ";
ui_print "Pushing modules...";
$bb mount -o rw,remount -t auto /system;
$bb mount -o rw,remount -t auto /vendor 2>/dev/null;
cd /tmp/anykernel/modules;
for module in $(find . -name '*.ko'); do
modtarget=$(echo $module | $bb cut -c2-);
if [ ! -e $modtarget ]; then
case $module in
*/vendor/*) modcon=vendor;;
*) modcon=system;;
esac;
fi;
if [ "$(is_mounted $modtarget)" ]; then
$bb mount -o rw,remount -t auto $modtarget;
fi;
mkdir -p $(dirname $modtarget);
$bb cp -rLf $module $modtarget;
$bb chown 0:0 $modtarget;
$bb chmod 644 $modtarget;
if [ "$modcon" ]; then
chcon "u:object_r:${modcon}_file:s0" $modtarget;
fi;
if [ "$(is_mounted $modtarget)" ]; then
$bb mount -o ro,remount -t auto $modtarget;
fi;
done;
cd /tmp/anykernel;
$bb mount -o ro,remount -t auto /system;
$bb mount -o ro,remount -t auto /vendor 2>/dev/null;
fi;
debugging;
if [ "$(file_getprop anykernel.sh do.cleanup)" == 1 ]; then
cleanup;
fi;
test "$savedpath" && export LD_LIBRARY_PATH="$savedpath";
test "$savedpre" && export LD_PRELOAD="$savedpre";
unmount_all;
ui_print " ";
ui_print " ";
ui_print "Done!";