@@ -364,16 +364,16 @@ _get_mount_info()
364364{
365365 if test ! -e " ${1:? } " ; then return 2; fi
366366
367- if test " ${TEST_INSTALL:- false} " = ' false' && test -e ' /proc/mounts' ; then
368- grep -m 1 - e ' [[:blank:]]' " ${1:? } " ' [[:blank:]]' ' /proc/mounts' 2> /dev/null || return 1
367+ if test " ${TEST_INSTALL:- false} " = ' false' && test -f ' /proc/mounts' ; then
368+ grep -e ' [[:blank:]]' " ${1:? } " ' [[:blank:]]' -- ' /proc/mounts' 2> /dev/null || return 1
369369 return 0
370370 fi
371371
372372 local _mount_result
373373 if _mount_result=" $( mount 2> /dev/null) " || {
374374 test -n " ${DEVICE_MOUNT:- } " && _mount_result=" $( " ${DEVICE_MOUNT:? } " ) "
375375 }; then
376- if printf ' %s' " ${_mount_result:? } " | grep -m 1 -e ' [[:blank:]]' " ${1:? } " ' [[:blank:]]' ; then return 0; fi
376+ if printf ' %s\n ' " ${_mount_result:? } " | grep -e ' [[:blank:]]' " ${1:? } " ' [[:blank:]]' ; then return 0; fi
377377 return 1
378378 fi
379379
@@ -397,15 +397,16 @@ is_mounted_read_write()
397397 local _mount_info
398398 _mount_info=" $( _get_mount_info " ${1:? } " ) " || ui_error " is_mounted_read_write has failed for '${1?} '"
399399
400- # IMPORTANT: We have to avoid "printf: write error: Broken pipe" when a string is piped to "grep -q" or "grep -m1"
401- if
402- {
403- (printf 2> /dev/null ' %s\n ' " ${_mount_info :? } " ) || :
404- } | grep -q -e ' [[:blank:],(]rw[),[:blank:]] '
405- then
406- return 0
407- fi
400+ # With an "overlay" there may be multiple entries, example:
401+ # /dev/block/dm-3 on /product type ext4 (ro,seclabel,relatime)
402+ # overlay on /product type overlay (rw,seclabel,noatime,lowerdir=/product,upperdir=/mnt/scratch/overlay/product/upper,workdir=/mnt/scratch/overlay/product/work,redirect_dir=nofollow,userxattr)
403+ #
404+ # or
405+ #
406+ # /dev/block/dm-3 /product ext4 ro,seclabel,relatime 0 0
407+ # overlay /product overlay rw,seclabel,noatime,lowerdir=/product,upperdir=/mnt/scratch/overlay/product/upper,workdir=/mnt/scratch/overlay/product/work,redirect_dir=nofollow,userxattr 0 0
408408
409+ if printf ' %s\n' " ${_mount_info:? } " | grep 1> /dev/null -e ' [[:blank:],(]rw[),[:blank:]]' ; then return 0; fi
409410 return 1
410411}
411412
@@ -419,6 +420,24 @@ _disable_write_locks()
419420 fi
420421}
421422
423+ _execute_system_remount ()
424+ {
425+ local _remount_output
426+ test " ${DRY_RUN:? } " -lt 2 || return 1
427+
428+ # Use the system remount binary if available (this will save us many problems)
429+ if test -f " ${SYS_PATH:? } /bin/remount" ; then
430+ ui_msg ' Executing the remount binary...'
431+ _remount_output=" $( " ${SYS_PATH:? } /bin/remount" 2>&1 ) " || ui_warning ' Failed to execute the remount binary'
432+ ui_debug " ${_remount_output?} "
433+ case " ${_remount_output?} " in
434+ * ' reboot your device' * ) if test " ${IS_EMU:? } " = ' true' ; then exit 252; else exit 251; fi ;;
435+ * ) ;;
436+ esac
437+ ui_debug ' '
438+ fi
439+ }
440+
422441_remount_read_write_helper ()
423442{
424443 test " ${DRY_RUN:? } " -lt 2 || return 2
@@ -690,6 +709,9 @@ mount_partition_if_possible()
690709 elif test -n " ${SYS_MOUNTPOINT-} " && test ! -L " ${SYS_MOUNTPOINT:? } /${_partition_name:? } " && test -d " ${SYS_MOUNTPOINT:? } /${_partition_name:? } " ; then # Example: /system_root/odm
691710 _skip_warnings=' true'
692711 ui_debug " Found ${_partition_name?} folder: ${SYS_MOUNTPOINT?} /${_partition_name?} "
712+ elif test ! -L " /${_partition_name:? } " && test -d " /${_partition_name:? } " ; then # Example: /odm
713+ _skip_warnings=' true'
714+ ui_debug " Found ${_partition_name?} folder: /${_partition_name?} "
693715 fi
694716 fi
695717
@@ -827,23 +849,48 @@ install_survival_script()
827849
828850reset_runtime_permissions_if_needed ()
829851{
852+ local _found
853+ test " ${FIRST_INSTALLATION:? } " = ' true' || return
854+ test -n " ${DATA_PATH?} " || return
855+
830856 # Reset the runtime permissions to prevent issues on dirty flashing
831857 if test " ${API:? } " -ge 23; then
832- if test -e " ${DATA_PATH :? } /system/users/0/runtime-permissions.xml " ; then
833- if test " ${FIRST_INSTALLATION :? } " = ' true ' || ! grep -q -F -e " ${1 :? } " -- " ${DATA_PATH:? } " /system/users/* /runtime-permissions.xml; then
834- ui_msg " Resetting Android runtime permissions..."
835- test " ${DRY_RUN :? } " -ne 0 || delete " ${DATA_PATH :? } " /system/users/ * /runtime-permissions.xml
836- fi
858+ _found= ' false '
859+ if _something_exists " ${DATA_PATH:? } " /system/users/* /runtime-permissions.xml; then
860+ ui_msg " Resetting runtime permissions..."
861+ _found= ' true '
862+ test " ${DRY_RUN :? } " -ne 0 || delete " ${DATA_PATH :? } " /system/users/ * /runtime-permissions.xml
837863 fi
838- if test -e " ${DATA_PATH:? } /misc_de/0/apexdata/com.android.permission/runtime-permissions.xml" ; then
839- if test " ${FIRST_INSTALLATION:? } " = ' true' || ! grep -q -F -e " ${1:? } " -- " ${DATA_PATH:? } " /misc_de/* /apexdata/com.android.permission/runtime-permissions.xml; then
840- ui_msg " Resetting Android runtime permissions..."
841- test " ${DRY_RUN:? } " -ne 0 || delete " ${DATA_PATH:? } " /misc_de/* /apexdata/com.android.permission/runtime-permissions.xml
842- fi
864+ if _something_exists " ${DATA_PATH:? } " /misc_de/* /apexdata/com.android.permission/runtime-permissions.xml* ; then
865+ ui_msg " Resetting runtime permissions..."
866+ _found=' true'
867+ test " ${DRY_RUN:? } " -ne 0 || delete " ${DATA_PATH:? } " /misc_de/* /apexdata/com.android.permission/runtime-permissions.xml*
868+ fi
869+
870+ if test " ${_found:? } " = ' true' && test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_PM?} " && test " ${DRY_RUN:? } " -eq 0; then
871+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " reset-permissions || ui_warning ' Failed to reset runtime permissions'
843872 fi
844873 fi
845874}
846875
876+ reset_appops_if_needed ()
877+ {
878+ test " ${FIRST_INSTALLATION:? } " = ' true' || return
879+ test -n " ${DATA_PATH?} " || return
880+ test " ${API:? } " -ge 23 || return
881+
882+ ui_msg " Resetting App Ops..."
883+ test " ${DRY_RUN:? } " -eq 0 || return
884+
885+ delete " ${DATA_PATH:? } " /system/appops.xml
886+ delete " ${DATA_PATH:? } " /system/appops_accesses.xml
887+ delete " ${DATA_PATH:? } " /system/appops/discrete/*
888+ delete " ${DATA_PATH:? } " /system/appops/history/*
889+ if test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_APPOPS?} " ; then
890+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_APPOPS:? } " 1> /dev/null read-settings || ui_warning ' Failed to refresh App Ops'
891+ fi
892+ }
893+
847894_write_test ()
848895{
849896 test " ${DRY_RUN:? } " -lt 2 || return 0
@@ -1279,6 +1326,7 @@ initialize()
12791326 export SETUP_TYPE
12801327
12811328 _disable_write_locks
1329+ _execute_system_remount
12821330
12831331 remount_read_write " ${SYS_MOUNTPOINT:? } " || {
12841332 deinitialize
@@ -3481,7 +3529,7 @@ soft_kill_app()
34813529 test " ${DRY_RUN:? } " -eq 0 || return
34823530
34833531 if test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_AM?} " ; then
3484- PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_AM:? } " 2> /dev/null kill " ${1:? } " || true
3532+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_AM:? } " kill " ${1:? } " || :
34853533 fi
34863534}
34873535
@@ -3490,7 +3538,7 @@ kill_app()
34903538 test " ${DRY_RUN:? } " -eq 0 || return
34913539
34923540 if test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_AM?} " ; then
3493- PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_AM:? } " 2> /dev/null force-stop " ${1:? } " || PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_AM:? } " 2> /dev/null kill " ${1:? } " || true
3541+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_AM:? } " force-stop " ${1:? } " || PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_AM:? } " kill " ${1:? } " || :
34943542 fi
34953543}
34963544
@@ -3499,7 +3547,7 @@ disable_app()
34993547 test " ${DRY_RUN:? } " -eq 0 || return
35003548
35013549 if test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_PM?} " ; then
3502- PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null disable " ${1:? } " || true
3550+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null disable " ${1:? } " || :
35033551 fi
35043552}
35053553
@@ -3508,7 +3556,7 @@ clear_app()
35083556 test " ${DRY_RUN:? } " -eq 0 || return
35093557
35103558 if test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_PM?} " ; then
3511- PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null clear " ${1:? } " || true
3559+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null 1>&2 clear " ${1:? } " || :
35123560 fi
35133561}
35143562
@@ -3517,8 +3565,8 @@ clear_and_enable_app()
35173565 test " ${DRY_RUN:? } " -eq 0 || return
35183566
35193567 if test " ${BOOTMODE:? } " = ' true' && test -n " ${DEVICE_PM?} " ; then
3520- PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null clear " ${1:? } " || true
3521- PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null enable " ${1:? } " || true
3568+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null 1>&2 clear " ${1:? } " || :
3569+ PATH=" ${PREVIOUS_PATH?} " " ${DEVICE_PM:? } " 2> /dev/null enable " ${1:? } " || :
35223570 fi
35233571}
35243572
0 commit comments