Init commit... Well that's not entirely true

gf-arm64
ShaneTheAwesome 5 years ago
parent ace46c95d2
commit 6cacd209a4

@ -1,2 +1,64 @@
# MinMicroG
Sources and scripts for MinMicroG installers
# Minimal MicroG Installer
### By MOVZX and FatherJony and FriendlyNeighborhoodShane
*A simple, flexible MicroG Installer*
### Links
* [GitHub](https://github.com/FriendlyNeighborhoodShane/MicroG_Packs)
* [Support](https://t.me/joinchat/FyFlS0X2D7f6YNvdxhEsfw)
### Description
This is a simple MicroG installer. It can install MicroG into your system partition or as a Magisk module. It supports virtually all mobile architectures (arm/64, x86/64, mips/64) and fully supports KitKat and above. It can also (mostly) support much older versions, but sync adapters and some location providers won't work. It can even uninstall itself from your device, just rename it and flash it again.
It contains an unofficial fork of MicroG (GMSCore, GSFProxy, Droidguard) (Compiled by MOVZX) with bumped version numbers so that apps don't complain about updating playstore.
The things included in the Standard Edition zip are:
- MicroG (GMSCore, GSFProxy, Droidguard, Maps APIv1)
- Google Play store (modded for IAPs by Setialpha)
- UNLP backends (Dejá vu, LocalGSM, LocalWiFi, Mozilla, Nominatim)
- AuroraDroid
- AuroraServices
- Swype libs for AOSP keyboard
- Some Google DRM jars
- Google Sync adapters for KK to O
- Permission files for all of this
- An addon.d file to backup/restore everything on a rom flash
The things included in the NoGoolag Edition zip are:
- MicroG (GMSCore, GSFProxy, Droidguard, Maps APIv1)
- FakeStore
- AuroraStore
- AuroraDroid
- AuroraServices
- UNLP backends (Dejá vu, LocalGSM, LocalWiFi, Mozilla, Nominatim)
- Permission files for all of this
- An addon.d file to backup/restore everything on a rom flash
The things included in the UNLP Edition zip are:
- UNLP
- UNLP backends (Dejá vu, LocalGSM, LocalWiFi, Mozilla, Nominatim)
- Permission files for all of this
- An addon.d file to backup/restore everything on a rom flash
The zip debloats 3 Google apps from your phone (GmsCore, GoogleServicesFramework, Phonesky and their MicroG counterparts) and 4 NLP providers. In Magisk mode, they won't be removed from system, and if you uninstall the pack, they'll come back. If you install in system, the debloated stuff will be stored in internal-storage/MinMicroG/Backup.
WARNING: This zip does not and never will debloat anything else because that is the minimum coming in MicroG's way. I have had my own share of PTSD with debloating. I believe (through guesswork) that it should work even on flashes over gapped ROMs, but don't take my word for it. Debloat before you flash.
For support:
If you flashed through recovery, provide its logs.
If you used Magisk Manager, provide its logs.
How to control the zip by changing its name:
NOTE: Control by name is not possible in magisk manager, since it copies the zip to a cache directory and renames it install.zip. This is unavoidable behaviour.
- Add 'system' to its filename to force it to install/uninstall from system. Otherwise, it looks for magisk, and if not found, installs to system. Obviously, if you flash it through Magisk manager, you want to install it to Magisk. If not, you have to flash it through recovery.
- Add 'uninstall' to its filename to uninstall it from your device, whether in magisk mode or system mode. If you use Magisk Manager, your preffered method of uninstallation is from there.
Just rename it and flash it again for the intended effect.
NOTE:
- MicroG showing wrong signature for Phonesky? Lemme guess... System mode? Dirty flashed? Go to shell and type (ofcourse with su):
pm grant com.android.vending android.permission.FAKE_PACKAGE_SIGNATURE
- Dirty flashing not recommended. you'll mess up all your permissions and may even cause conflicts in app data, leading to crashes.
The maker does not support or endorse dirty flashing. It will harm you and your loved ones. Don't come complaining to me.
Thanks to @osm0sis for the base magisk/recovery code and inspiration and guidance on the majority of the stuff in here. You're awesome.
Thanks to @Setialpha, the creator of NanoDroid, and ale5000 for the lib installation code and permissions code.

@ -0,0 +1,10 @@
# Script to build a package with $1 variant
# Check if $1 conf exists
# Copy neccesary files
# Zip
# Sign

@ -0,0 +1 @@
All the config files

@ -0,0 +1,390 @@
# Config
variant="NoGoolag";
ver="2.4-MAYBE";
verc="240"
date="27th September, 2019";
minsdk=21;
modprop="id=MinMicroG
name=Minimal MicroG Pack $variant Edition
version=$ver
versionCode=$verc
author=MOVZX and FatherJony and FriendlyNeighborhoodShane
description=A Minimal MicroG installer with just the essentials
support=https://t.me/joinchat/FyFlS0X2D7f6YNvdxhEsfw
donate=
minMagisk=1900
";
stuff="
/system/app/AppleNLPBackend/AppleNLPBackend.apk
/system/app/AuroraDroid/AuroraDroid.apk
/system/app/AuroraStore/AuroraStore.apk
/system/app/DejaVuNLPBackend/DejaVuNLPBackend.apk
/system/app/LocalGSMNLPBackend/LocalGSMNLPBackend.apk
/system/app/LocalWiFiNLPBackend/LocalWiFiNLPBackend.apk
/system/app/MicroGGSFProxy/MicroGGSFProxy.apk
/system/app/MozillaUnifiedNLPBackend/MozillaUnifiedNLPBackend.apk
/system/app/NominatimNLPBackend/NominatimNLPBackend.apk
/system/etc/default-permissions/microg-permissions.xml
/system/etc/permissions/com.android.vending.xml
/system/etc/permissions/com.aurora.services.xml
/system/etc/permissions/com.google.android.gms.xml
/system/etc/permissions/com.google.android.maps.xml
/system/etc/sysconfig/nogoolag.xml
/system/framework/com.google.android.maps.jar
/system/priv-app/AuroraServices/AuroraServices.apk
/system/priv-app/FakeStore/FakeStore.apk
/system/priv-app/MicroGDroidGuard/MicroGDroidGuard.apk
/system/priv-app/MicroGGMSCore/MicroGGMSCore.apk
";
stuff_arch="
";
stuff_sdk="
";
stuff_arch_sdk="
";
stuff_other="
/system/etc/permissions/com.google.android.media.effects.xml
/system/etc/permissions/com.google.widevine.software.drm.xml
/system/framework/com.google.android.media.effects.jar
/system/framework/com.google.widevine.software.drm.jar
/system/priv-app/PatchPhonesky/PatchPhonesky.apk
/system/lib/libjni_latinimegoogle.so
/system/lib64/libjni_latinimegoogle.so
/system/app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk
/system/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
/system/etc/permissions/gsync.xml
/system/priv-app/GoogleBackupTransport/GoogleBackupTransport.apk
/system/priv-app/MicroGUNLP/MicroGUNLP.apk
";
stuff_old="
/system/addon.d/01-nogoolag.sh
/system/app/FDroid/FDroid.apk
/system/etc/permissions/org.fdroid.fdroid.privileged.xml
/system/priv-app/AuroraStore/AuroraStore.apk
/system/priv-app/DejaVuLocationService/DejaVuLocationService.apk
/system/priv-app/DejaVuNLPBackend/DejaVuNLPBackend.apk
/system/priv-app/FDroidPrivileged/FDroidPrivileged.apk
/system/priv-app/LocalGSMNLPBackend/LocalGSMNLPBackend.apk
/system/priv-app/LocalWiFiNLPBackend/LocalWiFiNLPBackend.apk
/system/priv-app/MicroGGSFProxy/MicroGGSFProxy.apk
/system/priv-app/MozillaUnifiedNLPBackend/MozillaUnifiedNLPBackend.apk
/system/priv-app/NominatimNLPBackend/NominatimNLPBackend.apk
";
stuff_uninstall="$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $stuff_other $stuff_old $initdfile $addondfile";
stuff_debloat="
/system/app/GmsCore/GmsCore.apk
/system/app/GooglePlay/GooglePlay.apk
/system/app/GoogleServicesFramework/GoogleServicesFramework.apk
/system/app/Phonesky/Phonesky.apk
/system/app/PlayStore/PlayStore.apk
/system/app/PrebuiltGmsCore/PrebuiltGmsCore.apk
/system/app/Vending/Vending.apk
/system/priv-app/GmsCore/GmsCore.apk
/system/priv-app/GooglePlay/GooglePlay.apk
/system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
/system/priv-app/Phonesky/Phonesky.apk
/system/priv-app/PlayStore/PlayStore.apk
/system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
/system/priv-app/Vending/Vending.apk
/system/app/AMAPNetworkLocation/AMAPNetworkLocation.apk
/system/app/BaiduNetworkLocation/BaiduNetworkLocation.apk
/system/app/LegacyNetworkLocation/LegacyNetworkLocation.apk
/system/app/NetworkLocation/NetworkLocation.apk
/system/priv-app/AMAPNetworkLocation/AMAPNetworkLocation.apk
/system/priv-app/BaiduNetworkLocation/BaiduNetworkLocation.apk
/system/priv-app/LegacyNetworkLocation/LegacyNetworkLocation.apk
/system/priv-app/NetworkLocation/NetworkLocation.apk
/system/app/BlankStore/BlankStore.apk
/system/app/DroidGuard/DroidGuard.apk
/system/app/GmsCore/GmsCore.apk
/system/app/GmsDroidGuard/GmsDroidguard.apk
/system/app/GsfProxy/GsfProxy.apk
/system/app/UnifiedNlp/UnifiedNlp.apk
/system/priv-app/BlankStore/BlankStore.apk
/system/priv-app/DroidGuard/DroidGuard.apk
/system/priv-app/GmsCore/GmsCore.apk
/system/priv-app/GmsDroidGuard/GmsDroidguard.apk
/system/priv-app/GsfProxy/GsfProxy.apk
/system/priv-app/UnifiedNlp/UnifiedNlp.apk
";
stuff_perm="
/system/addon.d
/system/app
/system/etc
/system/framework
/system/lib
/system/lib64
/system/priv-app
";
service='#!/system/bin/sh
# MinMicroG bootup script
{
sleep 30;
dg="$(find /system -name MicroGDroidGuard.apk -type f | head -n1)";
for i in 1 2 3; do
# Fixes wrong signature for Phonesky in self-check
/system/bin/pm grant com.android.vending android.permission.FAKE_PACKAGE_SIGNATURE;
sleep 5;
# Fixes GroidGuard crash on safetynet check
/system/bin/pm install -r "$dg";
sleep 5;
# Fixes the motherfuckery caused by MagicGApps
rm -rf "/magisk/.core/service.d/MagicGApps.sh" "/sbin/.core/img/.core/service.d/MagicGApps.sh";
pm enable "com.google.android.gms";
sleep 5;
done;
}
';
addona="#!/sbin/sh
#
# MinMicroG addon.d
save_files() {
cat <<EOF
$(echo $stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $initdfile $addondfile /system/etc/.mmg | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
delete_files() {
cat <<EOF
$(echo $stuff_debloat | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
";
addonb='
log() { echo "$1"; }
log " ";
log "=== MinMicroG addon.d script ===";
[ -e "/system_root" ] && {
mount -o ro /system_root;
sysroot="system_root";
} || {
mount -o ro /system;
[ -e "/system/system/build.prop" ] && sysroot="system";
}
sdk="$(grep ro.build.version.sdk "/$sysroot/system/build.prop" | head -n1 | cut -d= -f2)";
backupdir="/data/media/0/MinMicroG/backups";
[ "$C" ] && tmpdir="$C" || tmpdir="/tmp/backupdir";
move() {
sourceobject="$1";
destobject="$2";
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$sourceobject")").apk" == "$(basename "$sourceobject")" ] && { sourceobject="$(dirname "$(dirname "$sourceobject")")/$(basename "$sourceobject")"; destobject="$(dirname "$(dirname "$destobject")")/$(basename "$destobject")"; }
fi;
[ "$(basename "$(dirname "$sourceobject")").apk" == "$(basename "$sourceobject")" ] && { sourceobject="$(dirname "$sourceobject")"; destobject="$(dirname "$destobject")"; }
[ -e "$sourceobject" ] || return 0;
mkdir -p "$(dirname "$destobject")";
cp -rf "$sourceobject" "$(dirname "$destobject")/";
[ -e "$destobject" ] && log "MOVER: Object moved ($sourceobject)" || log "ERROR: Could not move ($sourceobject)";
rm -rf "$sourceobject" || { log "ERROR: Could not remove ($sourceobject)"; return 1; }
[ -e "$sourceobject" ] && { log "ERROR: Could not remove ($sourceobject)"; return 1; } || log "MOVER: Object removed ($sourceobject)";
}
perm_r() {
uid="$1";
gid="$2";
dmod="$3";
fmod="$4";
dir="$5";
[ -d "$dir" ] || return 0;
chown -R $uid:$gid "$dir" || chown -R $uid.$gid "$dir";
find "$dir" -type d -exec chmod $dmod {} +;
find "$dir" -type f -exec chmod $fmod {} +;
}
case "$1" in
backup)
log " ";
log "Backing up...";
save_files | while read object dummy; do
move "/$sysroot/$object" "$tmpdir/$object";
done;
;;
restore)
log " ";
log "Restoring...";
save_files | while read object dummy; do
move "$tmpdir/$object" "/$sysroot/$object";
done;
;;
post-restore)
log " ";
log "Debloating...";
mount /data;
delete_files | while read object dummy; do
move "/$sysroot/$object" "$backupdir/$object";
done;
[ -d "$backupdir" ] && { perm_r 1023 1023 775 664 "$backupdir"; chcon -hR "u:object_r:media_rw_data_file:s0" "$backupdir"; }
;;
esac;
';
addond="$addona $addonb";
pre_install_actions() {
user_conf;
microg_cleanup;
return 0;
}
post_install_actions() {
return 0;
}
pre_uninstall_actions() {
return 0;
}
post_uninstall_actions() {
rm -rf "$root/system/etc/.mmg";
return 0;
}
user_conf() {
for file in "$(dirname "$0")/mmg-conf.txt" "$(dirname "$zipfile")/mmg-conf.txt" "$moddir/mmg-conf.txt" "/data/adb/mmg-conf.txt"; do
[ -f "$file" ] && {
ui_print " "; ui_print "Processing user config $file...";
includelist="$(cat "$file" | sed 's|\#.*||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";
}
[ "$includelist" ] && {
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')
";
addona="#!/sbin/sh
#
# MinMicroG addon.d
save_files() {
cat <<EOF
$(echo $stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $initdfile $addondfile /system/etc/.mmg | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
delete_files() {
cat <<EOF
$(echo $stuff_debloat | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
";
addond="$addona$addonb";
}
[ "$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk" ] || abort "Nothing left to install after config";
}
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="GoogleServicesFramework PrebuiltGmsCore GmsCore MicroGGSFProxy MicroGGMSCore PlayStore Vending Phonesky";
cleanup_packages="com.google.android.gsf com.google.android.gms com.android.vending";
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-*; 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;
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;
}

@ -0,0 +1,392 @@
# Config
variant="Standard"
ver="2.4-MAYBE";
verc="240"
date="27th September, 2019";
minsdk=19;
modprop="id=MinMicroG
name=Minimal MicroG Pack $variant Edition
version=$ver
versionCode=$verc
author=MOVZX and FatherJony and FriendlyNeighborhoodShane
description=A Minimal MicroG installer with just the essentials
support=https://t.me/joinchat/FyFlS0X2D7f6YNvdxhEsfw
donate=
minMagisk=1900
";
stuff="
/system/app/AppleNLPBackend/AppleNLPBackend.apk
/system/app/AuroraDroid/AuroraDroid.apk
/system/app/DejaVuNLPBackend/DejaVuNLPBackend.apk
/system/app/LocalGSMNLPBackend/LocalGSMNLPBackend.apk
/system/app/LocalWiFiNLPBackend/LocalWiFiNLPBackend.apk
/system/app/MicroGGSFProxy/MicroGGSFProxy.apk
/system/app/MozillaUnifiedNLPBackend/MozillaUnifiedNLPBackend.apk
/system/app/NominatimNLPBackend/NominatimNLPBackend.apk
/system/app/RadioCellsNLPBackend/RadioCellsNLPBackend.apk
/system/etc/default-permissions/microg-permissions.xml
/system/etc/permissions/com.android.vending.xml
/system/etc/permissions/com.aurora.services.xml
/system/etc/permissions/com.google.android.backuptransport.xml
/system/etc/permissions/com.google.android.gms.xml
/system/etc/permissions/com.google.android.maps.xml
/system/etc/permissions/com.google.android.media.effects.xml
/system/etc/permissions/com.google.widevine.software.drm.xml
/system/etc/sysconfig/nogoolag.xml
/system/framework/com.google.android.maps.jar
/system/framework/com.google.android.media.effects.jar
/system/framework/com.google.widevine.software.drm.jar
/system/priv-app/AuroraServices/AuroraServices.apk
/system/priv-app/MicroGDroidGuard/MicroGDroidGuard.apk
/system/priv-app/MicroGGMSCore/MicroGGMSCore.apk
/system/priv-app/PatchPhonesky/PatchPhonesky.apk
";
stuff_arch="
/system/lib/libjni_latinimegoogle.so
/system/lib64/libjni_latinimegoogle.so
";
stuff_sdk="
/system/app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk
/system/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
/system/etc/permissions/gsync.xml
/system/priv-app/GoogleBackupTransport/GoogleBackupTransport.apk
";
stuff_arch_sdk="
";
stuff_other="
/system/app/AuroraStore/AuroraStore.apk
/system/etc/default-permissions/aurora-permissions.xml
/system/priv-app/FakeStore/FakeStore.apk
/system/priv-app/MicroGUNLP/MicroGUNLP.apk
";
stuff_old="
/system/addon.d/01-nogoolag.sh
/system/app/FDroid/FDroid.apk
/system/etc/permissions/org.fdroid.fdroid.privileged.xml
/system/priv-app/AuroraStore/AuroraStore.apk
/system/priv-app/DejaVuLocationService/DejaVuLocationService.apk
/system/priv-app/DejaVuNLPBackend/DejaVuNLPBackend.apk
/system/priv-app/FDroidPrivileged/FDroidPrivileged.apk
/system/priv-app/LocalGSMNLPBackend/LocalGSMNLPBackend.apk
/system/priv-app/LocalWiFiNLPBackend/LocalWiFiNLPBackend.apk
/system/priv-app/MicroGGSFProxy/MicroGGSFProxy.apk
/system/priv-app/MozillaUnifiedNLPBackend/MozillaUnifiedNLPBackend.apk
/system/priv-app/NominatimNLPBackend/NominatimNLPBackend.apk
";
stuff_uninstall="$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $stuff_other $stuff_old $initdfile $addondfile";
stuff_debloat="
/system/app/GmsCore/GmsCore.apk
/system/app/GooglePlay/GooglePlay.apk
/system/app/GoogleServicesFramework/GoogleServicesFramework.apk
/system/app/Phonesky/Phonesky.apk
/system/app/PlayStore/PlayStore.apk
/system/app/PrebuiltGmsCore/PrebuiltGmsCore.apk
/system/app/Vending/Vending.apk
/system/priv-app/GmsCore/GmsCore.apk
/system/priv-app/GooglePlay/GooglePlay.apk
/system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
/system/priv-app/Phonesky/Phonesky.apk
/system/priv-app/PlayStore/PlayStore.apk
/system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
/system/priv-app/Vending/Vending.apk
/system/app/AMAPNetworkLocation/AMAPNetworkLocation.apk
/system/app/BaiduNetworkLocation/BaiduNetworkLocation.apk
/system/app/LegacyNetworkLocation/LegacyNetworkLocation.apk
/system/app/NetworkLocation/NetworkLocation.apk
/system/priv-app/AMAPNetworkLocation/AMAPNetworkLocation.apk
/system/priv-app/BaiduNetworkLocation/BaiduNetworkLocation.apk
/system/priv-app/LegacyNetworkLocation/LegacyNetworkLocation.apk
/system/priv-app/NetworkLocation/NetworkLocation.apk
/system/app/BlankStore/BlankStore.apk
/system/app/DroidGuard/DroidGuard.apk
/system/app/GmsCore/GmsCore.apk
/system/app/GmsDroidGuard/GmsDroidguard.apk
/system/app/GsfProxy/GsfProxy.apk
/system/app/UnifiedNlp/UnifiedNlp.apk
/system/priv-app/BlankStore/BlankStore.apk
/system/priv-app/DroidGuard/DroidGuard.apk
/system/priv-app/GmsCore/GmsCore.apk
/system/priv-app/GmsDroidGuard/GmsDroidguard.apk
/system/priv-app/GsfProxy/GsfProxy.apk
/system/priv-app/UnifiedNlp/UnifiedNlp.apk
";
stuff_perm="
/system/addon.d
/system/app
/system/etc
/system/framework
/system/lib
/system/lib64
/system/priv-app
";
service='#!/system/bin/sh
# MinMicroG bootup script
{
sleep 30;
dg="$(find /system -name MicroGDroidGuard.apk -type f | head -n1)";
for i in 1 2 3; do
# Fixes wrong signature for Phonesky in self-check
/system/bin/pm grant com.android.vending android.permission.FAKE_PACKAGE_SIGNATURE;
sleep 5;
# Fixes GroidGuard crash on safetynet check
/system/bin/pm install -r "$dg";
sleep 5;
# Fixes the motherfuckery caused by MagicGApps
rm -rf "/magisk/.core/service.d/MagicGApps.sh" "/sbin/.core/img/.core/service.d/MagicGApps.sh";
pm enable "com.google.android.gms";
sleep 5;
done;
}
';
addona="#!/sbin/sh
#
# MinMicroG addon.d
save_files() {
cat <<EOF
$(echo $stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $initdfile $addondfile /system/etc/.mmg | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
delete_files() {
cat <<EOF
$(echo $stuff_debloat | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
";
addonb='
log() { echo "$1"; }
log " ";
log "=== MinMicroG addon.d script ===";
[ -e "/system_root" ] && {
mount -o ro /system_root;
sysroot="system_root";
} || {
mount -o ro /system;
[ -e "/system/system/build.prop" ] && sysroot="system";
}
sdk="$(grep ro.build.version.sdk "/$sysroot/system/build.prop" | head -n1 | cut -d= -f2)";
backupdir="/data/media/0/MinMicroG/backups";
[ "$C" ] && tmpdir="$C" || tmpdir="/tmp/backupdir";
move() {
sourceobject="$1";
destobject="$2";
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$sourceobject")").apk" == "$(basename "$sourceobject")" ] && { sourceobject="$(dirname "$(dirname "$sourceobject")")/$(basename "$sourceobject")"; destobject="$(dirname "$(dirname "$destobject")")/$(basename "$destobject")"; }
fi;
[ "$(basename "$(dirname "$sourceobject")").apk" == "$(basename "$sourceobject")" ] && { sourceobject="$(dirname "$sourceobject")"; destobject="$(dirname "$destobject")"; }
[ -e "$sourceobject" ] || return 0;
mkdir -p "$(dirname "$destobject")";
cp -rf "$sourceobject" "$(dirname "$destobject")/";
[ -e "$destobject" ] && log "MOVER: Object moved ($sourceobject)" || log "ERROR: Could not move ($sourceobject)";
rm -rf "$sourceobject" || { log "ERROR: Could not remove ($sourceobject)"; return 1; }
[ -e "$sourceobject" ] && { log "ERROR: Could not remove ($sourceobject)"; return 1; } || log "MOVER: Object removed ($sourceobject)";
}
perm_r() {
uid="$1";
gid="$2";
dmod="$3";
fmod="$4";
dir="$5";
[ -d "$dir" ] || return 0;
chown -R $uid:$gid "$dir" || chown -R $uid.$gid "$dir";
find "$dir" -type d -exec chmod $dmod {} +;
find "$dir" -type f -exec chmod $fmod {} +;
}
case "$1" in
backup)
log " ";
log "Backing up...";
save_files | while read object dummy; do
move "/$sysroot/$object" "$tmpdir/$object";
done;
;;
restore)
log " ";
log "Restoring...";
save_files | while read object dummy; do
move "$tmpdir/$object" "/$sysroot/$object";
done;
;;
post-restore)
log " ";
log "Debloating...";
mount /data;
delete_files | while read object dummy; do
move "/$sysroot/$object" "$backupdir/$object";
done;
[ -d "$backupdir" ] && { perm_r 1023 1023 775 664 "$backupdir"; chcon -hR "u:object_r:media_rw_data_file:s0" "$backupdir"; }
;;
esac;
';
addond="$addona$addonb";
pre_install_actions() {
user_conf;
microg_cleanup;
return 0;
}
post_install_actions() {
return 0;
}
pre_uninstall_actions() {
return 0;
}
post_uninstall_actions() {
rm -rf "$root/system/etc/.mmg";
return 0;
}
user_conf() {
for file in "$(dirname "$0")/mmg-conf.txt" "$(dirname "$zipfile")/mmg-conf.txt" "$moddir/mmg-conf.txt" "/data/adb/mmg-conf.txt"; do
[ -f "$file" ] && {
ui_print " "; ui_print "Processing user config $file...";
includelist="$(cat "$file" | sed 's|\#.*||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";
}
[ "$includelist" ] && {
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')
";
addona="#!/sbin/sh
#
# MinMicroG addon.d
save_files() {
cat <<EOF
$(echo $stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $initdfile $addondfile /system/etc/.mmg | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
delete_files() {
cat <<EOF
$(echo $stuff_debloat | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
";
addond="$addona$addonb";
}
[ "$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk" ] || abort "Nothing left to install after config";
}
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="GoogleServicesFramework PrebuiltGmsCore GmsCore MicroGGSFProxy MicroGGMSCore PlayStore Vending Phonesky";
cleanup_packages="com.google.android.gsf com.google.android.gms com.android.vending";
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-*; 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;
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;
}

@ -0,0 +1,320 @@
# Config
variant="Backend";
ver="1.2";
verc="120"
date="26 september, 2019";
minsdk=19;
modprop="id=MinMicroG
name=Minimal MicroG Pack $variant Edition
version=$ver
versionCode=$verc
author=MOVZX and FatherJony and FriendlyNeighborhoodShane
description=A Minimal MicroG installer with just the essentials
support=https://t.me/joinchat/FyFlS0X2D7f6YNvdxhEsfw
donate=
minMagisk=1900
";
stuff="
/system/app/AppleNLPBackend/AppleNLPBackend.apk
/system/app/DejaVuNLPBackend/DejaVuNLPBackend.apk
/system/app/LocalGSMNLPBackend/LocalGSMNLPBackend.apk
/system/app/LocalWiFiNLPBackend/LocalWiFiNLPBackend.apk
/system/app/MozillaUnifiedNLPBackend/MozillaUnifiedNLPBackend.apk
/system/app/NominatimNLPBackend/NominatimNLPBackend.apk
/system/app/RadioCellsNLPBackend/RadioCellsNLPBackend.apk
/system/etc/default-permissions/microg-permissions-unlp.xml
/system/etc/permissions/com.google.android.gms.xml
/system/etc/sysconfig/nogoolag-unlp.xml
/system/priv-app/MicroGUNLP/MicroGUNLP.apk
";
stuff_arch="
";
stuff_sdk="
";
stuff_arch_sdk="
";
stuff_other="
/system/app/AuroraDroid/AuroraDroid.apk
/system/app/AuroraStore/AuroraStore.apk
/system/app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk
/system/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
/system/app/MicroGGSFProxy/MicroGGSFProxy.apk
/system/etc/default-permissions/microg-permissions.xml
/system/etc/permissions/com.android.vending.xml
/system/etc/permissions/com.aurora.services.xml
/system/etc/permissions/com.google.android.backuptransport.xml
/system/etc/permissions/com.google.android.maps.xml
/system/etc/permissions/com.google.android.media.effects.xml
/system/etc/permissions/com.google.widevine.software.drm.xml
/system/etc/permissions/gsync.xml
/system/etc/sysconfig/nogoolag.xml
/system/framework/com.google.android.maps.jar
/system/framework/com.google.android.media.effects.jar
/system/framework/com.google.widevine.software.drm.jar
/system/lib/libjni_latinimegoogle.so
/system/lib64/libjni_latinimegoogle.so
/system/priv-app/AuroraServices/AuroraServices.apk
/system/priv-app/GoogleBackupTransport/GoogleBackupTransport.apk
/system/priv-app/FakeStore/FakeStore.apk
/system/priv-app/MicroGDroidGuard/MicroGDroidGuard.apk
/system/priv-app/MicroGGMSCore/MicroGGMSCore.apk
/system/priv-app/PatchPhonesky/PatchPhonesky.apk
";
stuff_old="
/system/addon.d/01-nogoolag.sh
/system/app/FDroid/FDroid.apk
/system/etc/permissions/org.fdroid.fdroid.privileged.xml
/system/priv-app/AuroraStore/AuroraStore.apk
/system/priv-app/DejaVuLocationService/DejaVuLocationService.apk
/system/priv-app/DejaVuNLPBackend/DejaVuNLPBackend.apk
/system/priv-app/FDroidPrivileged/FDroidPrivileged.apk
/system/priv-app/LocalGSMNLPBackend/LocalGSMNLPBackend.apk
/system/priv-app/LocalWiFiNLPBackend/LocalWiFiNLPBackend.apk
/system/priv-app/MicroGGSFProxy/MicroGGSFProxy.apk
/system/priv-app/MozillaUnifiedNLPBackend/MozillaUnifiedNLPBackend.apk
/system/priv-app/NominatimNLPBackend/NominatimNLPBackend.apk
";
stuff_uninstall="$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $stuff_other $stuff_old $initdfile $addondfile";
stuff_debloat="
/system/app/GmsCore/GmsCore.apk
/system/app/PrebuiltGmsCore/PrebuiltGmsCore.apk
/system/priv-app/GmsCore/GmsCore.apk
/system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
/system/app/AMAPNetworkLocation/AMAPNetworkLocation.apk
/system/app/BaiduNetworkLocation/BaiduNetworkLocation.apk
/system/app/LegacyNetworkLocation/LegacyNetworkLocation.apk
/system/app/NetworkLocation/NetworkLocation.apk
/system/priv-app/AMAPNetworkLocation/AMAPNetworkLocation.apk
/system/priv-app/BaiduNetworkLocation/BaiduNetworkLocation.apk
/system/priv-app/LegacyNetworkLocation/LegacyNetworkLocation.apk
/system/priv-app/NetworkLocation/NetworkLocation.apk
/system/app/MicroGGMSCore/MicroGGMSCore.apk
/system/app/UnifiedNlp/UnifiedNlp.apk
/system/priv-app/MicroGGMSCore/MicroGGMSCore.apk
/system/priv-app/UnifiedNlp/UnifiedNlp.apk
";
stuff_perm="
/system/addon.d
/system/app
/system/etc
/system/priv-app
";
addona="#!/sbin/sh
#
# MinMicroG addon.d
save_files() {
cat <<EOF
$(echo $stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $initdfile $addondfile /system/etc/.mmg | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
delete_files() {
cat <<EOF
$(echo $stuff_debloat | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
";
addonb='
log() { echo "$1"; }
log " ";
log "=== MinMicroG addon.d script ===";
[ -e "/system_root" ] && {
mount -o ro /system_root;
sysroot="system_root";
} || {
mount -o ro /system;
[ -e "/system/system/build.prop" ] && sysroot="system";
}
sdk="$(grep ro.build.version.sdk "/$sysroot/system/build.prop" | head -n1 | cut -d= -f2)";
backupdir="/data/media/0/MinMicroG/backups";
[ "$C" ] && tmpdir="$C" || tmpdir="/tmp/backupdir";
move() {
sourceobject="$1";
destobject="$2";
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$sourceobject")").apk" == "$(basename "$sourceobject")" ] && { sourceobject="$(dirname "$(dirname "$sourceobject")")/$(basename "$sourceobject")"; destobject="$(dirname "$(dirname "$destobject")")/$(basename "$destobject")"; }
fi;
[ "$(basename "$(dirname "$sourceobject")").apk" == "$(basename "$sourceobject")" ] && { sourceobject="$(dirname "$sourceobject")"; destobject="$(dirname "$destobject")"; }
[ -e "$sourceobject" ] || return 0;
mkdir -p "$(dirname "$destobject")";
cp -rf "$sourceobject" "$(dirname "$destobject")/";
[ -e "$destobject" ] && log "MOVER: Object moved ($sourceobject)" || log "ERROR: Could not move ($sourceobject)";
rm -rf "$sourceobject" || { log "ERROR: Could not remove ($sourceobject)"; return 1; }
[ -e "$sourceobject" ] && { log "ERROR: Could not remove ($sourceobject)"; return 1; } || log "MOVER: Object removed ($sourceobject)";
}
perm_r() {
uid="$1";
gid="$2";
dmod="$3";
fmod="$4";
dir="$5";
[ -d "$dir" ] || return 0;
chown -R $uid:$gid "$dir" || chown -R $uid.$gid "$dir";
find "$dir" -type d -exec chmod $dmod {} +;
find "$dir" -type f -exec chmod $fmod {} +;
}
case "$1" in
backup)
log " ";
log "Backing up...";
save_files | while read object dummy; do
move "/$sysroot/$object" "$tmpdir/$object";
done;
;;
restore)
log " ";
log "Restoring...";
save_files | while read object dummy; do
move "$tmpdir/$object" "/$sysroot/$object";
done;
;;
post-restore)
log " ";
log "Debloating...";
mount /data;
delete_files | while read object dummy; do
move "/$sysroot/$object" "$backupdir/$object";
done;
[ -d "$backupdir" ] && { perm_r 1023 1023 775 664 "$backupdir"; chcon -hR "u:object_r:media_rw_data_file:s0" "$backupdir"; }
;;
esac;
';
addond="$addona $addonb";
pre_install_actions() {
user_conf;
microg_cleanup;
return 0;
}
post_install_actions() {
return 0;
}
pre_uninstall_actions() {
return 0;
}
post_uninstall_actions() {
rm -rf "$root/system/etc/.mmg";
return 0;
}
user_conf() {
for file in "$(dirname "$0")/mmg-conf.txt" "$(dirname "$zipfile")/mmg-conf.txt" "$moddir/mmg-conf.txt" "/data/adb/mmg-conf.txt"; do
[ -f "$file" ] && {
ui_print " "; ui_print "Processing user config $file...";
includelist="$(cat "$file" | sed 's|\#.*||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";
}
[ "$includelist" ] && {
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')
";
addona="#!/sbin/sh
#
# MinMicroG addon.d
save_files() {
cat <<EOF
$(echo $stuff $stuff_arch $stuff_sdk $stuff_arch_sdk $initdfile $addondfile /system/etc/.mmg | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
delete_files() {
cat <<EOF
$(echo $stuff_debloat | sed 's| |\n|g' | sort -u | tr -s '\n')
EOF
}
";
addond="$addona$addonb";
}
[ "$stuff $stuff_arch $stuff_sdk $stuff_arch_sdk" ] || abort "Nothing left to install after config";
}
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="PrebuiltGmsCore GmsCore MicroGGMSCore";
cleanup_packages="com.google.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;
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-*; do
[ -e "$file" ] && { log "PREPPER: Removing $file"; rm -rf "$file"; }
done;
done;
fi;
fi;
}

@ -0,0 +1,3 @@
Put all static or manually updated binary assets in the system folder here
Automagically updated assets go in resdl/system

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 ale5000
This file was created by ale5000 (ale5000-git on GitHub).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version, w/ zip exception.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!-- This file contains permissions to be granted by default.
Default permissions are granted to special platform components and to apps
that are approved to get default grants.
The special components are apps that are expected to work out-of-the-box
as they provide core use cases. These grants are managed by the platform.
Fixed permissions cannot be controlled by the user and need a special
approval. Typically these are to ensure either legally mandated functions
or the app is considered a part of the OS.
Granting these permissions could prevent issues on some ROMs or
on non-clean installations.
-->
<exceptions>
<exception package="org.microg.nlp.backend.ichnaea">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_NETWORK_STATE" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.INTERNET" fixed="false"></permission>
<permission name="android.permission.READ_PHONE_STATE" fixed="false"></permission>
</exception>
<exception package="org.fitchfamily.android.dejavu">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
</exception>
<exception package="org.microg.nlp.backend.nominatim">
<permission name="android.permission.INTERNET" fixed="false"></permission>
</exception>
<exception package="org.fitchfamily.android.gsmlocation">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
</exception>
<exception package="org.fitchfamily.android.wifi_backend">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
</exception>
</exceptions>

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 ale5000
This file was created by ale5000 (ale5000-git on GitHub).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version, w/ zip exception.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!-- This file contains permissions to be granted by default.
Default permissions are granted to special platform components and to apps
that are approved to get default grants.
The special components are apps that are expected to work out-of-the-box
as they provide core use cases. These grants are managed by the platform.
Fixed permissions cannot be controlled by the user and need a special
approval. Typically these are to ensure either legally mandated functions
or the app is considered a part of the OS.
Granting these permissions could prevent issues on some ROMs or
on non-clean installations.
-->
<exceptions>
<exception package="com.google.android.gms">
<!-- Phone -->
<permission name="android.permission.READ_PHONE_STATE" fixed="false"></permission>
<!-- Account -->
<permission name="android.permission.GET_ACCOUNTS" fixed="false"></permission>
<!-- Location -->
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<!-- Storage -->
<permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"></permission>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"></permission>
<!-- Fake Signature Spoofing -->
<permission name="android.permission.FAKE_PACKAGE_SIGNATURE" fixed="true"></permission>
</exception>
<exception package="com.google.android.gsf">
<permission name="com.google.android.c2dm.permission.RECEIVE" fixed="false"></permission>
<permission name="com.google.android.c2dm.permission.SEND" fixed="false"></permission>
</exception>
<exception package="com.android.vending">
<!-- Phone -->
<permission name="android.permission.READ_PHONE_STATE" fixed="false"></permission>
<!-- Account -->
<permission name="android.permission.GET_ACCOUNTS" fixed="false"></permission>
<!-- Location -->
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<!-- Storage -->
<permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"></permission>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"></permission>
<!-- Fake Signature Spoofing -->
<permission name="android.permission.FAKE_PACKAGE_SIGNATURE" fixed="true"></permission>
</exception>
<exception package="org.microg.gms.droidguard">
<permission name="android.permission.INTERNET" fixed="false"></permission>
</exception>
<exception package="org.microg.nlp.backend.ichnaea">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_NETWORK_STATE" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.INTERNET" fixed="false"></permission>
<permission name="android.permission.READ_PHONE_STATE" fixed="false"></permission>
</exception>
<exception package="org.fitchfamily.android.dejavu">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
</exception>
<exception package="org.microg.nlp.backend.nominatim">
<permission name="android.permission.INTERNET" fixed="false"></permission>
</exception>
<exception package="org.fitchfamily.android.gsmlocation">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
</exception>
<exception package="org.fitchfamily.android.wifi_backend">
<permission name="android.permission.ACCESS_COARSE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"></permission>
<permission name="android.permission.ACCESS_WIFI_STATE" fixed="false"></permission>
<permission name="android.permission.CHANGE_WIFI_STATE" fixed="false"></permission>
</exception>
</exceptions>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<exceptions>
<exception package="com.google.android.backuptransport"></exception>
<exception package="com.google.android.syncadapters.contacts">
<permission name="android.permission.READ_CONTACTS" fixed="false"></permission>
<permission name="android.permission.WRITE_CONTACTS" fixed="false"></permission>
<permission name="android.permission.GET_ACCOUNTS" fixed="false"></permission>
<permission name="android.permission.USE_CREDENTIALS" fixed="false"></permission>
<permission name="android.permission.READ_SYNC_SETTINGS" fixed="false"></permission>
<permission name="android.permission.WRITE_SYNC_SETTINGS" fixed="false"></permission>
</exception>
<exception package="com.google.android.syncadapters.calendar">
<permission name="android.permission.READ_CALENDAR" fixed="false"></permission>
<permission name="android.permission.WRITE_CALENDAR" fixed="false"></permission>
<permission name="android.permission.USE_CREDENTIALS" fixed="false"></permission>
<permission name="android.permission.READ_SYNC_SETTINGS" fixed="false"></permission>
<permission name="android.permission.WRITE_SYNC_SETTINGS" fixed="false"></permission>
</exception>
</exceptions>

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="com.android.vending">
<permission name="android.permission.ALLOCATE_AGGRESSIVE" />
<permission name="android.permission.BACKUP" />
<permission name="android.permission.BATTERY_STATS" />
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
<permission name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" />
<permission name="android.permission.CHANGE_OVERLAY_PACKAGES" />
<permission name="android.permission.CLEAR_APP_CACHE" />
<permission name="android.permission.CONNECTIVITY_INTERNAL" />
<permission name="android.permission.DELETE_PACKAGES" />
<permission name="android.permission.DUMP" />
<permission name="android.permission.FAKE_PACKAGE_SIGNATURE" />
<permission name="android.permission.FORCE_STOP_PACKAGES" />
<permission name="android.permission.GET_ACCOUNTS" />
<permission name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
<permission name="android.permission.GET_APP_OPS_STATS" />
<permission name="android.permission.INSTALL_PACKAGES" />
<permission name="android.permission.INTERACT_ACROSS_USERS" />
<permission name="android.permission.MANAGE_USERS" />
<permission name="android.permission.NFC" />
<permission name="android.permission.PACKAGE_USAGE_STATS" />
<permission name="android.permission.PACKAGE_VERIFICATION_AGENT" />
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<permission name="android.permission.READ_RUNTIME_PROFILES" />
<permission name="android.permission.REAL_GET_TASKS" />
<permission name="android.permission.REBOOT" />
<permission name="android.permission.SEND_SMS" />
<permission name="android.permission.SEND_SMS_NO_CONFIRMATION" />
<permission name="android.permission.STATUS_BAR" />
<permission name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
<permission name="android.permission.UPDATE_DEVICE_STATS" />
<permission name="android.permission.WRITE_SECURE_SETTINGS" />
</privapp-permissions>
</permissions>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="com.aurora.services">
<permission name="android.permission.DELETE_PACKAGES" />
<permission name="android.permission.INSTALL_PACKAGES" />
</privapp-permissions>
</permissions>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="com.google.android.backuptransport">
<permission name="android.permission.BACKUP" />
<permission name="android.permission.GET_ACCOUNTS" />
<permission name="android.permission.UPDATE_DEVICE_STATS" />
</privapp-permissions>
</permissions>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="com.google.android.gms">
<permission name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" />
<permission name="android.permission.FAKE_PACKAGE_SIGNATURE" />
<permission name="android.permission.GET_ACCOUNTS" />
<permission name="android.permission.INSTALL_LOCATION_PROVIDER" />
</privapp-permissions>
</permissions>

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<permissions>
<library name="com.google.android.maps"
file="/system/framework/com.google.android.maps.jar" />
</permissions>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<permissions>
<library name="com.google.android.media.effects"
file="/system/framework/com.google.android.media.effects.jar" />
</permissions>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2011 Google, Inc. All Rights Reserved
-->
<permissions>
<library name="com.google.widevine.software.drm"
file="/system/framework/com.google.widevine.software.drm.jar"/>
</permissions>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="org.fdroid.fdroid.privileged">
<permission name="android.permission.DELETE_PACKAGES"/>
<permission name="android.permission.INSTALL_PACKAGES"/>
</privapp-permissions>
</permissions>

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 NoGooLag
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<config>
<!-- These are the standard packages that are white-listed to always have internet
access while in power save mode, even if they aren't in the foreground. -->
<!-- Nominatim NLP Backend must always have network access for GCM and other things. -->
<allow-in-power-save package="org.microg.nlp.backend.nominatim" />
<allow-in-data-usage-save package="org.microg.nlp.backend.nominatim" />
<allow-unthrottled-location package="org.microg.nlp.backend.nominatim" />
<!-- These are the packages that are white-listed to be able to run as system user -->
<!-- Apple Location Service -->
<system-user-whitelisted-app package="org.microg.nlp.apple.backend" />
<!-- DejaVu Location Service -->
<system-user-whitelisted-app package="org.fitchfamily.android.dejavu" />
<!-- Local GSM NLP Backend -->
<system-user-whitelisted-app package="org.fitchfamily.android.gsmlocation" />
<!-- Local WiFi NLP Backend -->
<system-user-whitelisted-app package="org.fitchfamily.android.wifi_backend" />
<!-- Mozilla Unified NLP Backend -->
<system-user-whitelisted-app package="org.microg.nlp.backend.ichnaea" />
<!-- RadioCells Unified NLP Backend -->
<system-user-whitelisted-app package="org.openbmap.unifiedNlp" />
</config>

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 NoGooLag
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<config>
<!-- These are the standard packages that are white-listed to always have internet
access while in power save mode, even if they aren't in the foreground. -->
<!-- Nominatim NLP Backend must always have network access for GCM and other things. -->
<allow-in-power-save package="com.google.android.gms" />
<allow-in-power-save package="org.microg.nlp.backend.nominatim" />
<allow-in-data-usage-save package="org.microg.nlp.backend.nominatim" />
<allow-unthrottled-location package="org.microg.nlp.backend.nominatim" />
<!-- These are the packages that are white-listed to be able to run as system user -->
<!-- Droid Guard SafetyNet Bridge -->
<system-user-whitelisted-app package="org.microg.gms.droidguard" />
<!-- DejaVu Location Service -->
<system-user-whitelisted-app package="org.fitchfamily.android.dejavu" />
<!-- Local GSM NLP Backend -->
<system-user-whitelisted-app package="org.fitchfamily.android.gsmlocation" />
<!-- Local WiFi NLP Backend -->
<system-user-whitelisted-app package="org.fitchfamily.android.wifi_backend" />
<!-- Mozilla Unified NLP Backend -->
<system-user-whitelisted-app package="org.microg.nlp.backend.ichnaea" />
</config>

@ -0,0 +1,3 @@
Script downloads all updateable assets in system here
All static or manually updated assets go in res/system

@ -0,0 +1,515 @@
#!/sbin/sh
# Minimal MicroG installer
# By FriendlyNeighborhoodShane
# Based on work by osm0sis @ xda-developers (Thanks!)
exec 3>&1;
exec 1>&2;
outfd="/proc/self/fd/$2";
zipfile="$3";
ps | grep zygote | grep -v grep >/dev/null && bootmode=true || bootmode=false;
$bootmode || ps -A 2>/dev/null | grep zygote | grep -v grep >/dev/null && bootmode=true;
$bootmode && ui_print() { echo "$1" >&3; } || ui_print() { echo -e "ui_print $1\nui_print" >> $outfd; }
log() { echo "$1"; }
$bootmode || mount -o bind /dev/urandom /dev/random;
file_getprop() {
grep "^$2" "$1" | head -n1 | awk '{ print $1 }' | cut -d= -f2;
}
abort() {
ui_print " ";
ui_print "!!! FATAL ERROR: $1";
ui_print " ";
ui_print "Stopping installation and Uninstalling...";
uninstall_pack;
[ -d "$filedir" ] && rm -rf "$filedir";
$bootmode || { [ "$sysroot" ] && umount /$sysroot || umount /system; }
sync;
ui_print " ";
ui_print "Installation failed!";
ui_print " ";
exit 1;
}
ui_print " ";
ui_print "-- Minimal MicroG Installer --";
ui_print "-- The Essentials only MicroG pack --";
ui_print "-- From the MicroG Telegram group --";
ui_print "-- No, not the Official one --";
modname="MinMicroG";
log " ";
log "Zip File is $zipfile";
log "Bootmode is $bootmode";
$bootmode || { mount /data; mount /cache; }
for bb in /magisk/.core/busybox /sbin/.core/busybox /sbin/.magisk/busybox; do
[ -e "$bb" ] && magiskbb="$bb";
done;
[ "$magiskbb" ] && export PATH="$magiskbb:$PATH";
[ -e "/system_root" ] && {
mount -o ro /system_root;
sysroot="system_root";
} || {
mount -o ro /system;
[ -e "/system/system/build.prop" ] && sysroot="system";
}
[ -f "/$sysroot/system/build.prop" ] || abort "Could not find a ROM in /$sysroot";
for bin in awk cat chcon chmod chown cp cut df du echo find grep head losetup ls mkdir mount ps rm sed tail touch umount unzip; do
[ "$(which "$bin")" ] || abort "No $bin available";
done;
$bootmode && filedir="/dev/tmp/$modname" || filedir="/tmp/$modname";
tmplibdir="$filedir/tmplibdir";
moddir="/data/media/0/$modname";
backupdir="$moddir/Backup";
initdfile="/system/etc/init.d/10-$modname";
addondfile="/system/addon.d/10-$modname.sh";
$bootmode && forcesys=no;
case "$(basename "$zipfile")" in
*system*|*System*|*SYSTEM*)
forcesys=yes;
ui_print " ";
ui_print "WARNING: Forcing a system action!";
;;
esac;
case "$(basename "$zipfile")" in
*uninstall*|*Uninstall*|*UNINSTALL*)
action=uninstallation;
;;
*)
action=installation;
;;
esac;
abi="$(file_getprop /$sysroot/system/build.prop ro.product.cpu.abi)";
case "$abi" in
arm64*)
arch=arm64;
libarches="arm64-v8a armeabi-v7a armeabi";
;;
arm*)
arch=arm;
libarches="armeabi-v7a armeabi";
;;
x86_64*)
arch=x86_64;
libarches="x86_64 x86 armeabi-v7a armeabi";
;;
x86*)
arch=x86;
libarches="x86 armeabi-v7a armeabi";
;;
mips64*)
arch=mips64;
libarches="mips64 mips";
;;
mips*)
arch=mips;
libarches="mips";
;;
*)
abort "Could not recognise architecture: $abi";
;;
esac;
sdk="$(file_getprop /$sysroot/system/build.prop ro.build.version.sdk)";
[ "$sdk" ] || abort "Could not find SDK";
[ "$sdk" -gt 0 ] || abort "Could not recognise SDK: $sdk";
sizecheck() {
for realsizeobject in $1; do
sizeobject="$realsizeobject";
break;
done;
[ -e "$sizeobject" ] || { echo 0; return 0; }
objectsize="$(du -s "$sizeobject" | awk '{ print $1 }')";
libsize=0;
case "$sizeobject" in
*.apk)
apkunzip="$(unzip -l "$sizeobject" "lib/*/lib*.so")";
if [ "$(echo "$apkunzip" | grep lib/.*/lib.*.so)" ]; then
for archlib in $libarches; do
if [ "$(echo "$apkunzip" | grep lib/$archlib/lib.*.so)" ]; then
libsizeb=0;
for entry in $(echo "$apkunzip" | grep lib/$archlib/lib.*.so | awk '{ print $1 }'); do
libsizeb="$(($libsizeb + $entry))";
done;
libsize="$(($libsizeb / 1024 + 1))";
break;
fi;
done;
fi;
;;
esac;
echo "$(($objectsize + $libsize))";
}
remove() {
removalobject="$1";
backupobject="$2";
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$removalobject")").apk" == "$(basename "$removalobject")" ] && {
removalobject="$(dirname "$(dirname "$removalobject")")/$(basename "$removalobject")";
backupobject="$(dirname "$(dirname "$backupobject")")/$(basename "$backupobject")";
}
fi;
[ "$(basename "$(dirname "$removalobject")").apk" == "$(basename "$removalobject")" ] && { removalobject="$(dirname "$removalobject")"; backupobject="$(dirname "$backupobject")"; }
[ -e "$removalobject" ] || return 0;
mkdir -p "$(dirname "$backupobject")";
cp -rf "$removalobject" "$backupobject";
[ -e "$backupobject" ] && log "BACKUPER: Object backed up ($removalobject)" || log "ERROR: Could not backup ($removalobject)";
rm -rf "$removalobject" || { log "ERROR: Could not remove ($removalobject)"; return 1; }
[ -e "$removalobject" ] && { log "ERROR: Could not remove ($removalobject)"; return 1; } || log "REMOVER: Object removed ($removalobject)";
}
debloat() {
debloatobject="$1";
debloatingobject="$2";
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$debloatobject")").apk" == "$(basename "$debloatobject")" ] && {
debloatobject="$(dirname "$(dirname "$debloatobject")")/$(basename "$debloatobject")";
debloatingobject="$(dirname "$(dirname "$debloatingobject")")/$(basename "$debloatingobject")";
}
fi;
[ "$(basename "$(dirname "$debloatobject")").apk" == "$(basename "$debloatobject")" ] && debloatobject="$(dirname "$debloatobject")";
[ -e "$debloatobject" ] || return 0;
mkdir -p "$(dirname "$debloatingobject")";
if [ "$(basename "$(dirname "$debloatingobject")").apk" == "$(basename "$debloatingobject")" ]; then
touch "$(dirname $debloatingobject)/.replace" && log "DEBLOATER: Object directory debloated ($debloatobject)" || { log "ERROR: Could not create replace file for object $debloatobject"; return 1; }
elif [ -d "$debloatobject" ]; then
touch "$debloatingobject/.replace" && log "DEBLOATER: directory debloated ($debloatobject)" || { log "ERROR: Could not create replace file for directory $debloatobject"; return 1; }
else
echo "# This is a dummy for debloating" > "$debloatingobject" && log "DEBLOATER: Object dummy debloated ($debloatobject)" || { log"ERROR: Could not create dummy file for $debloatobject"; return 1; }
fi;
}
uninstall() {
uninstallobject="$1";
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$uninstallobject")").apk" == "$(basename "$uninstallobject")" ] && uninstallobject="$(dirname "$(dirname "$uninstallobject")")/$(basename "$uninstallobject")";
fi;
[ "$(basename "$(dirname "$uninstallobject")").apk" == "$(basename "$uninstallobject")" ] && uninstallobject="$(dirname "$uninstallobject")";
[ -e "$uninstallobject" ] || return 0;
rm -rf "$uninstallobject" || { log "ERROR: Object not uninstalled ($uninstallobject)"; return 1; }
[ -e "$uninstallobject" ] && { log "ERROR: Object not uninstalled ($uninstallobject)"; return 1; } || log "UNINSTALLER: Object uninstalled ($uninstallobject)";
}
install_dest() {
for realobject in $1; do
object="$realobject";
break;
done;
destobject="$2";
[ -e "$object" ] || { log "ERROR: Object not found ($object)"; return 1; }
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$destobject")").apk" == "$(basename "$destobject")" ] && destobject="$(dirname "$(dirname "$destobject")")/$(basename "$destobject")";
fi;
mkdir -p "$(dirname "$destobject")";
cp -rf "$object" "$destobject" || abort "Could not install $destobject";
[ -e "$destobject" ] && log "INSTALLER: Object installed ($object to $destobject)" || abort "Could not install $destobject";
case "$destobject" in
*.apk)
install_lib "$destobject";
;;
esac;
}
install_lib() {
libobject="$1";
mkdir -p "$tmplibdir";
unzipout="$(unzip -l "$libobject" "lib/*/lib*.so")";
[ "$(echo "$unzipout" | grep lib/.*/lib.*.so)" ] || return 0;
for archlib in $libarches; do
if [ "$(echo "$unzipout" | grep lib/$archlib/lib.*.so)" ]; then
case "$archlib" in
*arm64*)
log "INSTALLER: Installing arm64 libs ($libobject)";
libdir=lib64;
libarch=arm64;
;;
*arm*)
log "INSTALLER: Installing arm libs ($libobject)";
libdir=lib;
libarch=arm;
;;
*x86_64*)
log "INSTALLER: Installing x86_64 libs ($libobject)";
libdir=lib64;
libarch=x86_64;
;;
*x86*)
log "INSTALLER: Installing x86 libs ($libobject)";
libdir=lib;
libarch=x86;
;;
*mips64*)
log "INSTALLER: Installing mips64 libs ($libobject)";
libdir=lib64;
libarch=mips64;
;;
*mips*)
log "INSTALLER: Installing mips libs ($libobject)";
libdir=lib;
libarch=mips;
;;
esac;
if [ "$sdk" -lt 21 ]; then
libdest="$(dirname $(dirname $libobject))/$libdir";
else
libdest="$(dirname $libobject)/lib/$libarch";
fi;
unzip -oq "$libobject" "lib/$archlib/lib*.so" -d "$tmplibdir";
mkdir -p "$libdest";
for lib in $tmplibdir/lib/$archlib/lib*.so; do
cp -rf "$lib" "$libdest/$(basename "$lib")" || abort "Could not Install $lib for $libobject";
[ -f "$libdest/$(basename "$lib")" ] && log "INSTALLER: Installed library ($lib to $libdest)" || abort "Could not Install $lib for $libobject";
done;
break;
fi;
done;
rm -rf "$tmplibdir";
}
uninstall_pack() {
if [ "$magisk" == "yes" ]; then
rm -rf "$root" || { log " "; log "Could not delete Magisk root ($root)"; }
else
for thing in $stuff_uninstall; do
[ "$thing" ] && uninstall "$root/$thing";
done;
uninstall "$initdfile";
uninstall "$addondfile";
[ "$sysprop" ] && {
for line in $sysprop; do
if [ "$(grep "^$line #$modname" "/$sysroot/system/build.prop")" ]; then
sed -i "s|^$line #$modname||g" "/$sysroot/system/build.prop";
fi;
if [ "$(grep "^#$modname $(echo $line | cut -d= -f1)" "/$sysroot/system/build.prop")" ]; then
sed -i "s|^#$modname $(echo $line | cut -d= -f1)|$(echo $line | cut -d= -f1)|g" "/$sysroot/system/build.prop";
fi;
done;
}
fi;
}
perm() {
uid="$1";
gid="$2";
dmod="$3";
fmod="$4";
permobject="$5";
[ -e "$permobject" ] || return 0;
chown -R $uid:$gid "$permobject" || chown -R $uid.$gid "$permobject";
find "$permobject" -type d -exec chmod $dmod {} +;
find "$permobject" -type f -exec chmod $fmod {} +;
}
rm -rf "$filedir";
mkdir -p "$filedir";
unzip -o "$zipfile" "defconf" -d "$filedir/";
[ -f "$filedir/defconf" ] || abort "Could not find a default config";
chmod 0777 "$filedir/defconf";
. "$filedir/defconf" || abort "Could not execute default config";
ui_print " ";
ui_print "Package: $variant";
ui_print "Version: $ver";
ui_print "Release date: $date";
ui_print " ";
ui_print "Using architecture: $arch";
ui_print "Using SDK level: $sdk";
ui_print "Sysroot is on /$sysroot";
if [ "$sdk" -lt "$minsdk" ]; then
ui_print " ";
ui_print "WARNING: Using an old Android";
ui_print "Full compatibility not guaranteed";
fi;
ui_print " ";
ui_print "Mounting...";
if [ -e "/data/adb/magisk" -a "$forcesys" != "yes" ]; then
$bootmode && modulesdir="/data/adb/modules_update" || modulesdir="/data/adb/modules";
root="$modulesdir/$modname";
magisk=yes;
log "Using $modulesdir";
[ -d "$modulesdir" ] || {
mkdir -p "$modulesdir";
perm 0 0 0755 0644 "$modulesdir";
}
else
[ "$sysroot" ] && {
mount -o rw,remount /$sysroot;
mount -o rw,remount /$sysroot /$sysroot;
} || {
mount -o rw,remount /system;
mount -o rw,remount /system /system;
}
root="/$sysroot";
magisk=no;
log "Mounted /$sysroot/system RW";
fi;
if [ "$action" == "installation" ]; then
pre_install_actions;
ui_print " ";
ui_print "Cleaning up...";
log "Removing duplicates";
uninstall_pack;
log "Debloating";
if [ "$magisk" == "yes" ]; then
for thing in $stuff_debloat; do
[ "$thing" ] && debloat "/$sysroot/$thing" "$root/$thing";
done;
else
for thing in $stuff_debloat; do
[ "$thing" ] && remove "/$sysroot/$thing" "$backupdir/$thing";
done;
fi;
[ -d "$backupdir" ] && { perm 1023 1023 775 664 "$backupdir"; chcon -hR 'u:object_r:media_rw_data_file:s0' "$backupdir"; }
ui_print " ";
ui_print "Extracting files...";
rm -rf "$filedir";
mkdir -p "$filedir";
unzip -o "$zipfile" -d "$filedir" || abort "Could not unzip $zipfile";
ui_print " ";
ui_print "Doing size checks...";
packsize=0;
for thing in defconf $stuff; do
[ "$thing" ] && packsize="$(($packsize + $(sizecheck "$filedir/$thing")))";
done;
for thing in $stuff_arch; do
[ "$thing" ] && packsize="$(($packsize + $(sizecheck "$filedir/$(dirname $thing)/*-$arch-*/$(basename $thing)")))";
done;
for thing in $stuff_sdk; do
[ "$thing" ] && packsize="$(($packsize + $(sizecheck "$filedir/$(dirname $thing)/*-$sdk-*/$(basename $thing)")))";
done;
for thing in $stuff_arch_sdk; do
[ "$thing" ] && packsize="$(($packsize + $(sizecheck "$filedir/$(dirname $thing)/*-$arch-*-$sdk-*/$(basename $thing)")))";
done;
packsizem="$(($packsize / 1024 + 1))";
log "Pack size is $packsizem";
if [ "$magisk" == "yes" ]; then
datfreem="$(($(df -Pk "/data" | tail -n 1 | awk '{ print $4 }') / 1024))";
log "Free data space is $datfreem";
[ "$datfreem" -lt "$packsizem" ] && abort "Not enough free space in your data!";
else
sysfreem="$(($(df -Pk "/$sysroot/system" | tail -n 1 | awk '{ print $4 }') / 1024))";
log "Free system space is $sysfreem";
[ "$sysfreem" -lt "$packsizem" ] && abort "Not enough free space in your system!";
fi;
ui_print " ";
ui_print "Installing $modname to $root...";
mkdir -p "$root";
log " ";
log "Installing generic stuff";
for thing in $stuff; do
[ "$thing" ] && install_dest "$filedir/$thing" "$root/$thing";
done;
log " ";
log "Installing Arch dependant stuff for $arch";
for thing in $stuff_arch; do
[ "$thing" ] && install_dest "$filedir/$(dirname $thing)/*-$arch-*/$(basename $thing)" "$root/$thing";
done;
log " ";
log "Installing SDK dependant stuff for SDK $sdk";
for thing in $stuff_sdk; do
[ "$thing" ] && install_dest "$filedir/$(dirname $thing)/*-$sdk-*/$(basename $thing)" "$root/$thing";
done;
log " ";
log "Installing Arch and SDK dependant stuff for $arch and SDK $sdk";
for thing in $stuff_arch_sdk; do
[ "$thing" ] && install_dest "$filedir/$(dirname $thing)/*-$arch-*-$sdk-*/$(basename $thing)" "$root/$thing";
done;
log " ";
log "Executing other actions";
if [ "$magisk" == "yes" ]; then
[ "$postfs" ] && { echo "$postfs" > "$root/post-fs-data.sh" || abort "Could not create post-fs-data.sh in $root"; }
[ "$service" ] && { echo "$service" > "$root/service.sh" || abort "Could not create service.sh in $root"; }
[ "$sysprop" ] && { echo "$sysprop" > "$root/system.prop" || abort "Could not create system.prop in $root"; }
[ "$modprop" ] && { echo "$modprop" > "$root/module.prop" || abort "Could not create module.prop in $root"; }
touch "$root/auto_mount" || abort "Could not create auto_mount in $root";
if $bootmode && [ "$modulesdir" == "/data/adb/modules_update" ]; then
modmnt="/data/adb/modules";
mkdir -p "$modmnt/$modname";
touch "$modmnt/$modname/update" || abort "Could not create update in $modmnt/$modname";
[ "$modprop" ] && { echo "$modprop" > "$modmnt/$modname/module.prop" || abort "Could not create module.prop in $modmnt/$modname"; }
fi;
else
[ "$postfs" ] && { mkdir -p $(dirname "$root/$initdfile"); echo "$postfs" > "$root/$initdfile" || abort "Could not create $initdfile in $root"; }
[ "$service" ] && { mkdir -p $(dirname "$root/$initdfile"); echo "$service" > "$root/$initdfile" || abort "Could not create $initdfile in $root"; }
[ "$addond" ] && { mkdir -p $(dirname "$root/$addondfile"); echo "$addond" > "$root/$addondfile" || abort "Could not create $addondfile in $root"; }
[ "$sysprop" ] && {
for line in $sysprop; do
if [ "$(grep "^$line" "/$sysroot/system/build.prop")" ]; then
continue;
fi;
if [ "$(grep "^$(echo $line | cut -d= -f1)" "/$sysroot/system/build.prop")" ]; then
sed -i "s|^$(echo $line | cut -d= -f1)|#$modname $(echo $line | cut -d= -f1)|g" "/$sysroot/system/build.prop";
fi;
echo -e "$line #$modname" >> "/$sysroot/system/build.prop";
done;
}
fi;
ui_print " ";
ui_print "Setting permissions...";
if [ "$magisk" == "yes" ]; then
find "$root" -maxdepth 1 -exec chmod 0755 {} +;
fi;
for thing in $stuff_perm; do
case "$thing" in
*/bin*|*/xbin*)
perm 0 2000 0755 0777 "$root/$thing";
;;
*)
perm 0 0 0755 0644 "$root/$thing";
;;
esac;
chcon -hR 'u:object_r:system_file:s0' "$root/$thing";
done;
post_install_actions;
fi;
if [ "$action" == "uninstallation" ]; then
pre_uninstall_actions;
ui_print " ";
ui_print "Uninstalling $modname from $root...";
uninstall_pack;
post_uninstall_actions;
fi;
ui_print " ";
ui_print "Unmounting...";
$bootmode || { [ "$sysroot" ] && umount /$sysroot || umount /system; }
rm -rf "$filedir";
sync;
ui_print " ";
ui_print "Done!";
ui_print "Join us on Telegram: @NoGooLag";
ui_print " ";
exit 0;

@ -0,0 +1 @@
#MAGISK# Dummy file; update-binary is a shell script.

@ -0,0 +1 @@
The main scripts

@ -0,0 +1,5 @@
# Update all binary assets
# Delete all assets
# Download new ones
Loading…
Cancel
Save