parent
6cf65259f0
commit
f2f97c1bd8
@ -0,0 +1,66 @@
|
||||
user_conf() {
|
||||
|
||||
for dir in "$(dirname "$0")" "$(dirname "$zipfile")" "$moddir" "/data/adb"; do
|
||||
[ -f "$dir/includelist.txt" -o "$dir/excludelist.txt" ] && {
|
||||
ui_print " ";
|
||||
[ -f "$dir/includelist.txt" ] && {
|
||||
ui_print "Processing include config from $dir...";
|
||||
includelist="$(cat "$dir/includelist.txt" | sed -e 's|\#.*||g' -e 's/[\#%&\`|*+=!@:;\t$^()?\[\]{}<>]/ /g')";
|
||||
} || {
|
||||
ui_print "Processing exclude config from $dir...";
|
||||
excludelist="$(cat "$dir/excludelist.txt" | sed -e 's|\#.*||g' -e 's/[\#%&\`|*+=!@:;\t$^()?\[\]{}<>]/ /g')";
|
||||
}
|
||||
break;
|
||||
}
|
||||
done;
|
||||
|
||||
[ "$includelist" ] && {
|
||||
new_stuff="";
|
||||
new_stuff_arch="";
|
||||
new_stuff_sdk="";
|
||||
new_stuff_arch_sdk="";
|
||||
for include in $includelist; do
|
||||
log "Including keyword $include";
|
||||
new_stuff="$new_stuff $(echo "$stuff" | grep -oi "[ ]*[^ ]*$include[^ ]*[ ]*")";
|
||||
new_stuff_arch="$new_stuff_arch $(echo "$stuff_arch" | grep -oi "[ ]*[^ ]*$include[^ ]*[ ]*")";
|
||||
new_stuff_sdk="$new_stuff_sdk $(echo "$stuff_sdk" | grep -oi "[ ]*[^ ]*$include[^ ]*[ ]*")";
|
||||
new_stuff_arch_sdk="$new_stuff_arch_sdk $(echo "$stuff_arch_sdk" | grep -oi "[ ]*[^ ]*$include[^ ]*[ ]*")";
|
||||
done;
|
||||
stuff="$new_stuff";
|
||||
stuff_arch="$new_stuff_arch";
|
||||
stuff_sdk="$new_stuff_sdk";
|
||||
stuff_arch_sdk="$new_stuff_arch_sdk";
|
||||
}
|
||||
|
||||
[ "$excludelist" ] && {
|
||||
new_stuff="$stuff";
|
||||
new_stuff_arch="$stuff_arch";
|
||||
new_stuff_sdk="$stuff_sdk";
|
||||
new_stuff_arch_sdk="$stuff_arch_sdk";
|
||||
for exclude in $excludelist; do
|
||||
log "Including keyword $include";
|
||||
new_stuff="$(echo "$new_stuff" | sed "s|[ ]*[^ ]*$exclude[^ ]*[ ]*| |ig")";
|
||||
new_stuff_arch="$(echo "$new_stuff_arch" | sed "s|[ ]*[^ ]*$exclude[^ ]*[ ]*| |ig")";
|
||||
new_stuff_sdk="$(echo "$new_stuff_sdk" | sed "s|[ ]*[^ ]*$exclude[^ ]*[ ]*| |ig")";
|
||||
new_stuff_arch_sdk="$(echo "$new_stuff_arch_sdk" | sed "s|[ ]*[^ ]*$exclude[^ ]*[ ]*| |ig")";
|
||||
done;
|
||||
stuff="$new_stuff";
|
||||
stuff_arch="$new_stuff_arch";
|
||||
stuff_sdk="$new_stuff_sdk";
|
||||
stuff_arch_sdk="$new_stuff_arch_sdk";
|
||||
}
|
||||
|
||||
[ "$includelist" -o "$excludelist" ] && {
|
||||
stuff="$(echo "$stuff" | sed 's| |\n|g' | tr -s '\n' | sort -u | sed 's|^| |g')
|
||||
";
|
||||
stuff_arch="$(echo "$stuff_arch" | sed 's| |\n|g' | tr -s '\n' | sort -u | sed 's|^| |g')
|
||||
";
|
||||
stuff_sdk="$(echo "$stuff_sdk" | sed 's| |\n|g' | tr -s '\n' | sort -u | sed 's|^| |g')
|
||||
";
|
||||
stuff_arch_sdk="$(echo "$stuff_arch_sdk" | sed 's| |\n|g' | tr -s '\n' | sort -u | sed 's|^| |g')
|
||||
";
|
||||
}
|
||||
|
||||
[ "$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk" ] || abort "Nothing left to install after config";
|
||||
|
||||
}
|
@ -0,0 +1,145 @@
|
||||
createwhitelist() {
|
||||
|
||||
ui_print " ";
|
||||
ui_print "Creating priv-app whitelist...";
|
||||
|
||||
spoofperm=android.permission.FAKE_PACKAGE_SIGNATURE;
|
||||
spoofpermod=61006e00640072006f00690064002e007000650072006d0069007300730069006f006e002e00460041004b0045005f005000410043004b004100470045005f005300490047004e00410054005500520045;
|
||||
hasspoof=false;
|
||||
syslist="$filedir/privlist/privperm.list";
|
||||
applist="$filedir/privlist/app.lst";
|
||||
permlist="$filedir/privlist/app.xml";
|
||||
|
||||
unzip -oq "$zipfile" "privlist/*" -d "$filedir";
|
||||
|
||||
case "$arch" in
|
||||
arm*)
|
||||
aapt="$filedir/privlist/aapt-arm";
|
||||
;;
|
||||
x86*)
|
||||
aapt="$filedir/privlist/aapt-x86";
|
||||
;;
|
||||
mips*)
|
||||
aapt="$filedir/privlist/aapt-mips";
|
||||
;;
|
||||
esac;
|
||||
[ -f "$aapt" ] || abort "No AAPT available";
|
||||
chmod 777 "$aapt";
|
||||
|
||||
"$aapt" dump xmltree "/$sysroot/system/framework/framework-res.apk" AndroidManifest.xml | \
|
||||
tr -d '\n' | sed -e 's/E:/\n/g' | grep '(type 0x11)0x[137]2' | \
|
||||
awk -F\" '{print $2}' | sort > "$syslist";
|
||||
|
||||
unzip -oq "/$sysroot/system/framework/framework-res.apk" "AndroidManifest.xml" -d "$filedir/privlist/";
|
||||
|
||||
grep -qF "$spoofperm" "$filedir/privlist/AndroidManifest.xml" && hasspoof=true;
|
||||
od -A n -t x1 "$filedir/privlist/AndroidManifest.xml" | tr -d ' \n' | grep -qF "$spoofpermod" && hasspoof=true;
|
||||
|
||||
$hasspoof && echo "android.permission.FAKE_PACKAGE_SIGNATURE" >> "${syslist}" || log "WHITELISTER: No native sigspoof found";
|
||||
|
||||
buildlist() {
|
||||
|
||||
"${aapt}" dump permissions "$privobject" | \
|
||||
awk -F \' '/^uses-permission:/{print $2}' | \
|
||||
sort > "$applist";
|
||||
|
||||
[ "$(cat "$applist")" ] || continue;
|
||||
|
||||
echo '<?xml version="1.0" encoding="utf-8"?>
|
||||
<permissions>
|
||||
<privapp-permissions package="'$package'">' > "$permlist";
|
||||
|
||||
for perm in $(cat "$applist"); do
|
||||
if grep -q "$perm" "$syslist"; then
|
||||
log "WHITELISTER: $package needs privapp-whitelist $perm";
|
||||
echo ' <permission name="'$perm'" />' >> "$permlist";
|
||||
fi;
|
||||
done;
|
||||
|
||||
echo ' </privapp-permissions>
|
||||
</permissions>' >> "$permlist";
|
||||
|
||||
}
|
||||
|
||||
unzip -oq "$zipfile" "system/priv-app/*" -d "$filedir";
|
||||
|
||||
for object in $stuff; do
|
||||
case $object in
|
||||
/system/priv-app/*/*.apk) ;;
|
||||
*) continue;;
|
||||
esac;
|
||||
for realobject in "$filedir/$object"; do
|
||||
privobject="$realobject"; break;
|
||||
done;
|
||||
[ -f "$privobject" ] || { log "ERROR: $privobject vanished"; continue; }
|
||||
package="$("$aapt" dump badging "$privobject" | awk -F \' '/^package: name/{print $2}')";
|
||||
log "WHITELISTER: Building list for $object";
|
||||
buildlist;
|
||||
mkdir -p "$filedir/system/etc/permissions/";
|
||||
mv -f "$permlist" "$filedir/system/etc/permissions/$package.xml";
|
||||
stuff="$stuff
|
||||
/system/etc/permissions/$package.xml
|
||||
";
|
||||
done;
|
||||
|
||||
for object in $stuff_arch; do
|
||||
case $object in
|
||||
/system/priv-app/*/*.apk) ;;
|
||||
*) continue;;
|
||||
esac;
|
||||
for realobject in $filedir/$(dirname "$object")/*-$arch-*/$(basename "$object"); do
|
||||
privobject="$realobject"; break;
|
||||
done;
|
||||
[ -f "$privobject" ] || { log "ERROR: $privobject vanished"; continue; }
|
||||
package="$("$aapt" dump badging "$privobject" | awk -F \' '/^package: name/{print $2}')";
|
||||
log "WHITELISTER: Building list for $object ($cond)";
|
||||
cond="$(basename "$(dirname "$privobject")")";
|
||||
buildlist;
|
||||
mkdir -p "$filedir/system/etc/permissions/$cond/";
|
||||
mv -f "$permlist" "$filedir/system/etc/permissions/$cond/$package.xml";
|
||||
stuff_arch="$stuff_arch
|
||||
/system/etc/permissions/$package.xml
|
||||
";
|
||||
done;
|
||||
|
||||
for object in $stuff_sdk; do
|
||||
case $object in
|
||||
/system/priv-app/*/*.apk) ;;
|
||||
*) continue;;
|
||||
esac;
|
||||
for realobject in $filedir/$(dirname "$object")/*-$sdk-*/$(basename "$object"); do
|
||||
privobject="$realobject"; break;
|
||||
done;
|
||||
[ -f "$privobject" ] || { log "ERROR: $privobject vanished"; continue; }
|
||||
package="$("$aapt" dump badging "$privobject" | awk -F \' '/^package: name/{print $2}')";
|
||||
cond="$(basename "$(dirname "$privobject")")";
|
||||
log "WHITELISTER: Building list for $object ($cond)";
|
||||
buildlist;
|
||||
mkdir -p "$filedir/system/etc/permissions/$cond/";
|
||||
mv -f "$permlist" "$filedir/system/etc/permissions/$cond/$package.xml";
|
||||
stuff_sdk="$stuff_sdk
|
||||
/system/etc/permissions/$package.xml
|
||||
";
|
||||
done;
|
||||
|
||||
for object in $stuff_arch_sdk; do
|
||||
case $object in
|
||||
/system/priv-app/*/*.apk) ;;
|
||||
*) continue;;
|
||||
esac;
|
||||
for realobject in $filedir/$(dirname "$object")/*-$arch-*-$sdk-*/$(basename "$object"); do
|
||||
privobject="$realobject"; break;
|
||||
done;
|
||||
[ -f "$privobject" ] || { log "ERROR: $privobject vanished"; continue; }
|
||||
package="$("$aapt" dump badging "$privobject" | awk -F \' '/^package: name/{print $2}')";
|
||||
cond="$(basename "$(dirname "$privobject")")";
|
||||
log "WHITELISTER: Building list for $object ($cond)";
|
||||
buildlist;
|
||||
mkdir -p "$filedir/system/etc/permissions/$cond/";
|
||||
mv -f "$permlist" "$filedir/system/etc/permissions/$cond/$package.xml";
|
||||
stuff_arch_sdk="$stuff_arch_sdk
|
||||
/system/etc/permissions/$package.xml
|
||||
";
|
||||
done;
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
# A little bit of copied methods to try to prevent MicroG dirty flash problems
|
||||
# For MinMicroG (FriendlyNeighborhoodShane)
|
||||
|
||||
microg_cleanup() {
|
||||
|
||||
if [ "$(echo $stuff | grep MicroG)" ]; then
|
||||
ui_print " ";
|
||||
ui_print "Doing MicroG preparations...";
|
||||
if [ "$bootmode" != "true" ]; then
|
||||
# Kanged from NanoDroid
|
||||
# Thanks Setialpha
|
||||
cleanup_folders="BlankStore GmsCore GmsCore_update GmsCoreSetupPrebuilt GoogleServicesFramework GsfProxy Phonesky PlayStore PrebuiltGmsCorePi PrebuiltGmsCorePix PrebuiltGmsCore Vending";
|
||||
cleanup_packages="com.android.vending com.google.android.feedback com.google.android.gms com.google.android.gsf com.google.android.gsf.login com.mgoogle.android.gms";
|
||||
for app in $cleanup_folders; do
|
||||
for file in /data/dalvik-cache/*/system"@priv-app@${app}"[@\.]*@classes.* /data/dalvik-cache/*/system"@app@${app}"[@\.]*@classes.*; do
|
||||
[ -e "$file" ] && { log "PREPPER: Removing $file"; rm -rf "$file"; }
|
||||
done;
|
||||
done;
|
||||
if [ ! -f "$root/system/etc/.mmg" ]; then
|
||||
log "Doing the clean install treatment";
|
||||
for app in $cleanup_packages; do
|
||||
for file in /data/data/${app} /data/user/*/${app} /data/user_de/*/${app} /data/app/${app}-* /mnt/asec/${app}-* /data/media/0/Android/data/${app}; do
|
||||
[ -e "$file" ] && { log "PREPPER: Removing $file"; rm -rf "$file"; }
|
||||
done;
|
||||
done;
|
||||
for file in /data/system/users/*/runtime-permissions.xml; do
|
||||
[ -e "$file" ] && { log "PREPPER: Removing $file"; rm -rf "$file"; }
|
||||
done;
|
||||
if [ -f /data/system/packages.list ]; then
|
||||
for app in $cleanup_packages; do
|
||||
if [ "$(grep "$app" /data/system/packages.list)" ]; then
|
||||
log "PREPPER: de-registering app: $app";
|
||||
sed -i "s/.*${app}.*//g" /data/system/packages.list;
|
||||
fi;
|
||||
done;
|
||||
else
|
||||
log "PREPPER: This is a clean flash";
|
||||
fi;
|
||||
if [ "$(which sqlite3)" ]; then
|
||||
find /data/system* -type f -name "accounts*db" 2>/dev/null | while read database; do
|
||||
log "PREPPER: deleting Google Accounts from $database";
|
||||
sqlite3 "$database" "DELETE FROM accounts WHERE type='com.google';";
|
||||
done
|
||||
else
|
||||
log "PREPPER: sqlite3 not found";
|
||||
fi;
|
||||
fi;
|
||||
touch "$root/system/etc/.mmg";
|
||||
fi;
|
||||
if [ "$magisk" == "yes" ]; then
|
||||
# Kanged from MagicGapps
|
||||
# Thanks VR25
|
||||
for dir in /data/adb/magisk_simple /cache/magisk_mount; do
|
||||
rm -rf "$dir/system/etc";
|
||||
mkdir -p "$dir/system";
|
||||
cp -rf "$root/system/etc" "$dir/system/";
|
||||
done;
|
||||
for dir in /magisk /sbin/.core/img /magisk_merge; do
|
||||
[ -e "$dir/.core/service.d/MagicGApps.sh" ] && { log "PREPPER: Removing $dir/.core/service.d/MagicGApps.sh"; rm -rf "$dir/.core/service.d/MagicGApps.sh"; }
|
||||
done;
|
||||
serviceb='
|
||||
{
|
||||
# To apparently fix permissions
|
||||
until [ -e "/data" -a -e "/cache" ]; do sleep 5; done;
|
||||
[ -f "/system/system/build.prop" ] && sysroot=/system;
|
||||
for dir in /data/adb/magisk_simple /cache/magisk_mount; do
|
||||
rm -rf "$dir/system/etc";
|
||||
mkdir -p "$dir/system";
|
||||
cp -rf "$sysroot/system/etc" "$dir/system/";
|
||||
done;
|
||||
}
|
||||
';
|
||||
service="$service$serviceb";
|
||||
fi;
|
||||
fi;
|
||||
|
||||
}
|
Loading…
Reference in new issue