├── META-INF └── com │ └── google │ └── android │ ├── update-binary │ └── updater-script ├── R └── ExternalStorageProvider.apk ├── README.md ├── S2 └── ExternalStorageProvider.apk ├── T └── ExternalStorageProvider.apk ├── customize.sh └── module.prop /META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | ################# 4 | # Initialization 5 | ################# 6 | 7 | umask 022 8 | 9 | # echo before loading util_functions 10 | ui_print() { echo "$1"; } 11 | 12 | require_new_magisk() { 13 | ui_print "*******************************" 14 | ui_print " Please install Magisk v20.0+! " 15 | ui_print "*******************************" 16 | exit 1 17 | } 18 | 19 | ######################### 20 | # Load util_functions.sh 21 | ######################### 22 | 23 | OUTFD=$2 24 | ZIPFILE=$3 25 | 26 | mount /data 2>/dev/null 27 | 28 | [ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk 29 | . /data/adb/magisk/util_functions.sh 30 | [ $MAGISK_VER_CODE -lt 20000 ] && require_new_magisk 31 | 32 | if [ $MAGISK_VER_CODE -ge 20400 ]; then 33 | # New Magisk have complete installation logic within util_functions.sh 34 | install_module 35 | exit 0 36 | fi 37 | 38 | ################# 39 | # Legacy Support 40 | ################# 41 | 42 | TMPDIR=/dev/tmp 43 | PERSISTDIR=/sbin/.magisk/mirror/persist 44 | 45 | is_legacy_script() { 46 | unzip -l "$ZIPFILE" install.sh | grep -q install.sh 47 | return $? 48 | } 49 | 50 | print_modname() { 51 | local authlen len namelen pounds 52 | namelen=`echo -n $MODNAME | wc -c` 53 | authlen=$((`echo -n $MODAUTH | wc -c` + 3)) 54 | [ $namelen -gt $authlen ] && len=$namelen || len=$authlen 55 | len=$((len + 2)) 56 | pounds=$(printf "%${len}s" | tr ' ' '*') 57 | ui_print "$pounds" 58 | ui_print " $MODNAME " 59 | ui_print " by $MODAUTH " 60 | ui_print "$pounds" 61 | ui_print "*******************" 62 | ui_print " Powered by Magisk " 63 | ui_print "*******************" 64 | } 65 | 66 | # Override abort as old scripts have some issues 67 | abort() { 68 | ui_print "$1" 69 | $BOOTMODE || recovery_cleanup 70 | [ -n $MODPATH ] && rm -rf $MODPATH 71 | rm -rf $TMPDIR 72 | exit 1 73 | } 74 | 75 | rm -rf $TMPDIR 2>/dev/null 76 | mkdir -p $TMPDIR 77 | 78 | # Preperation for flashable zips 79 | setup_flashable 80 | 81 | # Mount partitions 82 | mount_partitions 83 | 84 | # Detect version and architecture 85 | api_level_arch_detect 86 | 87 | # Setup busybox and binaries 88 | $BOOTMODE && boot_actions || recovery_actions 89 | 90 | ############## 91 | # Preparation 92 | ############## 93 | 94 | # Extract prop file 95 | unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2 96 | [ ! -f $TMPDIR/module.prop ] && abort "! Unable to extract zip file!" 97 | 98 | $BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules 99 | MODULEROOT=$NVBASE/$MODDIRNAME 100 | MODID=`grep_prop id $TMPDIR/module.prop` 101 | MODNAME=`grep_prop name $TMPDIR/module.prop` 102 | MODAUTH=`grep_prop author $TMPDIR/module.prop` 103 | MODPATH=$MODULEROOT/$MODID 104 | 105 | # Create mod paths 106 | rm -rf $MODPATH 2>/dev/null 107 | mkdir -p $MODPATH 108 | 109 | ########## 110 | # Install 111 | ########## 112 | 113 | if is_legacy_script; then 114 | unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 115 | 116 | # Load install script 117 | . $TMPDIR/install.sh 118 | 119 | # Callbacks 120 | print_modname 121 | on_install 122 | 123 | # Custom uninstaller 124 | [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh 125 | 126 | # Skip mount 127 | $SKIPMOUNT && touch $MODPATH/skip_mount 128 | 129 | # prop file 130 | $PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop 131 | 132 | # Module info 133 | cp -af $TMPDIR/module.prop $MODPATH/module.prop 134 | 135 | # post-fs-data scripts 136 | $POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh 137 | 138 | # service scripts 139 | $LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh 140 | 141 | ui_print "- Setting permissions" 142 | set_permissions 143 | else 144 | print_modname 145 | 146 | unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2 147 | 148 | if ! grep -q '^SKIPUNZIP=1$' $MODPATH/customize.sh 2>/dev/null; then 149 | ui_print "- Extracting module files" 150 | unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2 151 | 152 | # Default permissions 153 | set_perm_recursive $MODPATH 0 0 0755 0644 154 | fi 155 | 156 | # Load customization script 157 | [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh 158 | fi 159 | 160 | # Handle replace folders 161 | for TARGET in $REPLACE; do 162 | ui_print "- Replace target: $TARGET" 163 | mktouch $MODPATH$TARGET/.replace 164 | done 165 | 166 | if $BOOTMODE; then 167 | # Update info for Magisk Manager 168 | mktouch $NVBASE/modules/$MODID/update 169 | cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop 170 | fi 171 | 172 | # Copy over custom sepolicy rules 173 | if [ -f $MODPATH/sepolicy.rule -a -e $PERSISTDIR ]; then 174 | ui_print "- Installing custom sepolicy patch" 175 | # Remove old recovery logs (which may be filling partition) to make room 176 | rm -f $PERSISTDIR/cache/recovery/* 177 | PERSISTMOD=$PERSISTDIR/magisk/$MODID 178 | mkdir -p $PERSISTMOD 179 | cp -af $MODPATH/sepolicy.rule $PERSISTMOD/sepolicy.rule || abort "! Insufficient partition size" 180 | fi 181 | 182 | # Remove stuffs that don't belong to modules 183 | rm -rf \ 184 | $MODPATH/system/placeholder $MODPATH/customize.sh \ 185 | $MODPATH/README.md $MODPATH/.git* 2>/dev/null 186 | 187 | ############# 188 | # Finalizing 189 | ############# 190 | 191 | cd / 192 | $BOOTMODE || recovery_cleanup 193 | rm -rf $TMPDIR 194 | 195 | ui_print "- Done" 196 | exit 0 197 | -------------------------------------------------------------------------------- /META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /R/ExternalStorageProvider.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Magisk-Modules-Alt-Repo/NoStorageRestrict/ba79250f7760921a241aa6cc1fe5ad0e3cea735b/R/ExternalStorageProvider.apk -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NoStorageRestrict 2 | 3 | ![](https://i.imgur.com/Z7VH0Li.jpg) 4 | 5 | Removes the restriction when selecting folders (Downloads/Android) through the file manager on Android 11 and higher 6 | 7 | # Disclaimer 8 | 9 | Due to the nature of the Magisk version (replacing APKs) it may not work and result in crashes for some users, in those cases the Xposed version is more recommended. 10 | 11 | For the Xposed version look here: 12 | [NoStorageRestrict-Xposed](https://github.com/Xposed-Modules-Repo/com.github.dan.nostoragerestrict) 13 | 14 | # Requirements 15 | - Magisk 20.x 16 | - Android 11 or higher 17 | 18 | ### v5.0 19 | - Fix crashes 20 | ### v3.0 21 | - Add Android 13 support 22 | - Add Fox Module Manager support 23 | ### v2.0 24 | - Try to fix crash on A12L (be sure to test and report as soon as possible) 25 | 26 | 27 | -------------------------------------------------------------------------------- /S2/ExternalStorageProvider.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Magisk-Modules-Alt-Repo/NoStorageRestrict/ba79250f7760921a241aa6cc1fe5ad0e3cea735b/S2/ExternalStorageProvider.apk -------------------------------------------------------------------------------- /T/ExternalStorageProvider.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Magisk-Modules-Alt-Repo/NoStorageRestrict/ba79250f7760921a241aa6cc1fe5ad0e3cea735b/T/ExternalStorageProvider.apk -------------------------------------------------------------------------------- /customize.sh: -------------------------------------------------------------------------------- 1 | 2 | 3 | CODENAME=$(getprop ro.build.version.sdk) 4 | if [[ "$CODENAME" == "33" ]]; then 5 | mkdir -p "$MODPATH"/system/priv-app/ExternalStorageProvider 6 | cp -rf "$MODPATH"/T/* "$MODPATH"/system/priv-app/ExternalStorageProvider 7 | elif [[ "$CODENAME" == "32" ]]; then 8 | mkdir -p "$MODPATH"/system/priv-app/ExternalStorageProvider 9 | cp -rf "$MODPATH"/S2/* "$MODPATH"/system/priv-app/ExternalStorageProvider 10 | elif [[ "$CODENAME" == "31" ]]; then 11 | mkdir -p "$MODPATH"/system/priv-app/ExternalStorageProvider 12 | cp -rf "$MODPATH"/S2/* "$MODPATH"/system/priv-app/ExternalStorageProvider 13 | elif [[ "$CODENAME" == "30" ]]; then 14 | mkdir -p "$MODPATH"/system/priv-app/ExternalStorageProvider 15 | cp -rf "$MODPATH"/R/* "$MODPATH"/system/priv-app/ExternalStorageProvider 16 | fi 17 | 18 | rm -rf "$MODPATH"/R 19 | rm -rf "$MODPATH"/S2 20 | rm -rf "$MODPATH"/S2 21 | rm -rf "$MODPATH"/T 22 | 23 | REPLACE=" 24 | /system/priv-app/ExternalStorageProvider 25 | " 26 | -------------------------------------------------------------------------------- /module.prop: -------------------------------------------------------------------------------- 1 | id=NoStorageRestrict 2 | name=NoStorageRestrict 3 | version=v5 4 | versionCode=6 5 | author=DanGLES3 6 | description=Disables the restriction of not being able to select certain folders (like downloads/sdcard) when prompted by apps 7 | --------------------------------------------------------------------------------