diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/add_media.sh | 29 | ||||
| -rwxr-xr-x | scripts/apk_obtain_permissions.sh | 49 | ||||
| -rw-r--r-- | scripts/bloatware/bloatware.json | 720 | ||||
| -rwxr-xr-x | scripts/bloatware/main.sh | 21 | ||||
| -rwxr-xr-x | scripts/configs/main.sh | 20 | ||||
| -rwxr-xr-x | scripts/configs/modify_configs.sh | 57 | ||||
| -rwxr-xr-x | scripts/configs/remove_configs.sh | 95 | ||||
| -rwxr-xr-x | scripts/download_apks.sh | 65 | ||||
| -rwxr-xr-x | scripts/install_apks.sh | 57 | ||||
| -rwxr-xr-x | scripts/microg.sh | 130 | ||||
| -rwxr-xr-x | scripts/permissions/install_permissions.sh | 37 | ||||
| -rwxr-xr-x | scripts/permissions/main.sh | 14 | ||||
| -rwxr-xr-x | scripts/permissions/remove_permissions.sh | 154 | ||||
| -rwxr-xr-x | scripts/props.sh | 115 |
14 files changed, 1563 insertions, 0 deletions
diff --git a/scripts/add_media.sh b/scripts/add_media.sh new file mode 100755 index 0000000..44bc5bf --- /dev/null +++ b/scripts/add_media.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR> <TMP_DIR>" + exit 1 +fi + +BASE_DIR=$1 +TMP_DIR=$2 +PRODUCT_DIR="${BASE_DIR}/product_a" +RES_MEDIA_DIR="${TMP_DIR}/res/media" + +add_tones() { + local subdir=$1 + + cp -L -r "${RES_MEDIA_DIR}"/"${subdir}"/* "${PRODUCT_DIR}"/media-moto/"${subdir}" + + for tone in "${RES_MEDIA_DIR}"/"${subdir}"/*; do + [ -f "$tone" ] || continue + tone_name=$(basename "$tone") + + ./utils/scripts/add_to_fs.sh product_a "$tone_name" media-moto/"${subdir}" + done +} + +add_tones "ringtones" +add_tones "notifications" +add_tones "ringtones" diff --git a/scripts/apk_obtain_permissions.sh b/scripts/apk_obtain_permissions.sh new file mode 100755 index 0000000..c40c3b3 --- /dev/null +++ b/scripts/apk_obtain_permissions.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <TMP_DIR>" + exit 1 +fi + +TMP_DIR=$1 +APPS_DIR="$TMP_DIR/res/apks" +PERMISSIONS_APPS_DIR="$TMP_DIR/res/permissions" + +mkdir -p "$TMP_DIR/res/permissions" \ + "$TMP_DIR/res/permissions/apps" \ + "$TMP_DIR/res/permissions/priv-apps" + +obtain_permissions() { + local type_app=$1 + + for apk in "${APPS_DIR}"/$type_app/*.apk; do + package_name=$(aapt dump badging ${apk} | awk '/package:/{gsub("name=|'"'"'",""); print $2}') + permissions=$(aapt dump badging ${apk} | awk '/uses-permission:/{gsub("name=|'"'"'",""); print $2}') + + if [[ $type_app == "apps" ]]; then + out_file="${PERMISSIONS_APPS_DIR}/$type_app/default-permissions-${package_name}.xml" + echo -e '<?xml version="1.0" encoding="utf-8"?>\n<exceptions>\n\t<exception package="'$package_name'">' > "$out_file" + for p in $permissions; do + echo -e '\t\t<permission name="'$p'" fixed="false"/>' >> "$out_file" + done + echo -e '\t</exception>\n</exceptions>' >> "$out_file" + + echo -e "\t[+] $out_file" + else + out_file="${PERMISSIONS_APPS_DIR}/$type_app/privapp-permissions-${package_name}.xml" + echo -e '<?xml version="1.0" encoding="utf-8"?>\n<permissions>\n\t<privapp-permissions package="'$package_name'">' > "$out_file" + for p in $permissions; do + echo -e '\t\t<permission name="'$p'" />' >> "$out_file" + done + echo -e '\t</privapp-permissions>\n</permissions>' >> "$out_file" + + echo -e "\t[+] $out_file" + fi + + done +} + +echo -e "[*] Obtaining permissions from APKs." +obtain_permissions "apps" +obtain_permissions "priv-apps" diff --git a/scripts/bloatware/bloatware.json b/scripts/bloatware/bloatware.json new file mode 100644 index 0000000..23dab79 --- /dev/null +++ b/scripts/bloatware/bloatware.json @@ -0,0 +1,720 @@ +{ + "product_a": [ + { + "path": "priv-app/MotoFeedback", + "description": "", + "remove": true + }, + { + "path": "priv-app/GameMode", + "description": "", + "remove": true + }, + { + "path": "operator-app/priv-app/PayJoyAccess", + "description": "", + "remove": true + }, + { + "path": "priv-app/FamilyLinkParentalControls/", + "description": "", + "remove": true + }, + { + "path": "priv-app/GooglePartnerSetup", + "description": "", + "remove": true + }, + { + "path": "priv-app/AndroidAutoStub", + "description": "", + "remove": true + }, + { + "path": "priv-app/AndroidSystemIntelligence", + "description": "An app that enables smart and personalized features on your Android phone using machine learning and Private Compute Core", + "remove": false + }, + { + "path": "priv-app/AndroidSettingsIntelligence", + "description": "If you remove it, you will lose the search in the settings", + "remove": false + }, + { + "path": "priv-app/SettingsIntelligence", + "description": "If you remove it, you will lose the search in the settings", + "remove": false + }, + { + "path": "priv-app/GoogleRestore", + "description": "", + "remove": true + }, + { + "path": "priv-app/Turbo", + "description": "Breaks battery settings", + "remove": false + }, + { + "path": "priv-app/Velvet", + "description": "Google's Main app (aka. QuickSearchBox)", + "remove": true + }, + { + "path": "app/YouTube", + "description": "", + "remove": true + }, + { + "path": "app/Meet", + "description": "", + "remove": true + }, + { + "path": "app/YTMusic", + "description": "", + "remove": true + }, + { + "path": "app/com.google.mainline.adservices", + "description": "", + "remove": true + }, + { + "path": "app/com.google.mainline.telemetry", + "description": "", + "remove": true + }, + { + "path": "app/Drive", + "description": "", + "remove": true + }, + { + "path": "app/Gmail2", + "description": "", + "remove": true + }, + { + "path": "app/Maps", + "description": "", + "remove": true + }, + { + "path": "app/Chrome64", + "description": "Google Chrome web browser", + "remove": true + }, + { + "path": "app/WebViewGoogle64", + "description": "Default Google's webview app.", + "remove": false + }, + { + "path": "app/CalculatorGoogle", + "description": "", + "remove": true + }, + { + "path": "app/DeskClockGoogle", + "description": "", + "remove": true + }, + { + "path": "app/GoogleLocationHistory", + "description": "", + "remove": true + }, + { + "path": "app/Photos", + "description": "", + "remove": true + }, + { + "path": "app/Videos", + "description": "", + "remove": true + }, + { + "path": "priv-app/GoogleOne", + "description": "", + "remove": true + }, + { + "path": "priv-app/GoogleOneTimeInitializer", + "description": "", + "remove": true + }, + { + "path": "app/com.google.android.modulemetadata", + "description": "", + "remove": false + }, + { + "path": "priv-app/AssistantShell", + "description": "Google Assistant", + "remove": true + }, + { + "path": "priv-app/Messages", + "description": "Google Messages", + "remove": true + }, + { + "path": "priv-app/Phonesky", + "description": "Google Play store", + "remove": true + }, + { + "path": "priv-app/GmsCore", + "description": "Google Play Services", + "remove": true + }, + { + "path": "app/CalendarGoogle", + "description": "Google Calendar", + "remove": true + }, + { + "path": "app/GoogleContacts", + "description": "Google Calendar", + "remove": true + }, + { + "path": "priv-app/FilesGoogle", + "description": "Google Files", + "remove": true + }, + { + "path": "priv-app/PersonalSafety", + "description": "Google Personal Safety Manager (broken)", + "remove": true + }, + { + "path": "app/LatinImeGoogle", + "description": "GBoard", + "remove": true + }, + { + "path": "priv-app/Wellbeing", + "description": "Digital Wellbeing", + "remove": true + }, + { + "path": "overlay/GmsConfigOverlayASI.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GmsConfigOverlayCommon.apk", + "description": "Removing this causes system's webview to not be present.", + "remove": false + }, + { + "path": "overlay/GmsConfigOverlayComms.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GmsConfigOverlayGeotz.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GmsConfigOverlayGSA.apk", + "description": "GSA - Google Search Assistant. Needed to enable 'DigitalAssistant' app to work.", + "remove": false + }, + { + "path": "overlay/GmsConfigOverlayPersonalSafety.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GmsConfigOverlayPhotos.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GmsConfigOverlaySearchSelector.apk", + "description": "", + "remove": true + }, + { + "path": "operator-app/priv-app/DigitalTurbine", + "description": "", + "remove": true + }, + { + "path": "operator-app/priv-app/OneWeather", + "description": "", + "remove": true + }, + { + "path": "operator-app/priv-app/OneWeatherAmx", + "description": "", + "remove": true + }, + { + "path": "app/SpeechServicesByGoogle", + "description": "Google TTS", + "remove": true + }, + { + "path": "priv-app/GoogleDialer", + "description": "Google default dialer", + "remove": true + }, + { + "path": "overlay/MotoSetupWizardOverlay.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/MotoSetupWizardOverlayDS.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GoogleDeviceLockControllerOverlay.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/GoogleExtServicesConfigOverlay.apk", + "description": "Seems to preconfigure Google assistant as the preferred package. Removing causes defects.", + "remove": false + }, + { + "path": "overlay/GooglePermissionControllerOverlay.apk", + "description": "Removing causes defects.", + "remove": false + }, + { + "path": "overlay/GooglePermissionControllerFrameworkOverlay.apk", + "description": "Seems to preconfigure Google Wallet as the preferred package. Removing causes defects.", + "remove": false + }, + { + "path": "overlay/PAKSOverlayTCE.apk", + "description": "Overlay for PAKS (package removed from the system).", + "remove": true + }, + { + "path": "overlay/PAKSOverlayUSC.apk", + "description": "Overlay for PAKS (package removed from the system).", + "remove": true + }, + { + "path": "overlay/LauncherFrameworkRRO.apk", + "description": "", + "remove": false + }, + { + "path": "overlay/MotoLauncherConfigLamuLiteResOverlay.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/MotoLauncherConfigLamuPowerResOverlay.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/MotoLauncherOverlayAMX.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/MotoLauncherOverlayAppLabelTwoLines.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/MotoLauncherResOverlay.apk", + "description": "", + "remove": true + }, + { + "path": "overlay/VivoAppTrayFolderOverlay.apk", + "description": "", + "remove": true + } + ], + + "system_a": [ + { + "path": "system/app/CompanionDeviceManager", + "description": "", + "remove": true + }, + { + "path": "system/app/facebook-appmanager", + "description": "", + "remove": true + }, + { + "path": "system/app/WallpaperBackup", + "description": "", + "remove": true + }, + { + "path": "system/app/BasicDreams", + "description": "", + "remove": true + }, + { + "path": "system/app/MotoSignatureApp", + "description": "", + "remove": true + }, + { + "path": "system/priv-app/LiveWallpapersPicker", + "description": "", + "remove": true + }, + { + "path": "system/priv-app/LenovoID", + "description": "", + "remove": true + }, + { + "path": "system/priv-app/facebook-installer", + "description": "", + "remove": true + }, + { + "path": "system/priv-app/facebook-services", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/Taboola", + "description": "Moto Live lockscreen", + "remove": true + }, + { + "path": "system/priv-app/PartnerBookmarksProviderMoto", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/MotoGlance", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/TelcelContenedor", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/BRApps2", + "description": "Allows unathorized installation of bloatware by moto.", + "remove": true + }, + { + "path": "system/operator-app/priv-app/ChromeHomePageProviderMoto", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/ClaroContenedor", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/StubMotorolaClaro", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/SysDLL", + "description": "Useless app that sends requests to carrier servers to know if the device has to be locked (if the IMEI is banned)", + "remove": true + }, + { + "path": "system/operator-app/priv-app/IronSource", + "description": "IronSource: Israeli software company offering products focused on the app economy.", + "remove": true + }, + { + "path": "system/operator-app/priv-app/IronSource3UK", + "description": "IronSource: Israeli software company offering products focused on the app economy.", + "remove": true + }, + { + "path": "system/priv-app/MotoCamera", + "description": "", + "remove": false + }, + { + "path": "system/priv-app/ManagedProvisioning", + "description": "", + "remove": true + }, + { + "path": "system/priv-app/ONS", + "description": "", + "remove": true + }, + { + "path": "system/preloadapp/app/facebook", + "description": "", + "remove": true + }, + { + "path": "system/preloadapp/operator-app/app/instagram", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/MotoHelp", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/MotoSpaces", + "description": "", + "remove": true + }, + { + "path": "system/priv-app/MotoOta", + "description": "OTA updater from Motorola", + "remove": true + }, + { + "path": "system/priv-app/PlayAutoInstallConfigSigned", + "description": "", + "remove": true + }, + { + "path": "system/app/ApeSoundRecorder", + "description": "Shipped sound recorder", + "remove": true + }, + { + "path": "system/operator-app/priv-app/SearchSelector", + "description": "Search Selector app (depends on GMS)", + "remove": true + }, + { + "path": "system/priv-app/MotoSetupWizard", + "description": "Moto setup wizard application", + "remove": true + }, + { + "path": "system/priv-app/EnterpriseAdapterService", + "description": "Thinkshield", + "remove": true + }, + { + "path": "system/priv-app/MotoThinkUEM", + "description": "Thinkshield", + "remove": true + }, + { + "path": "system/app/TimeWeather", + "description": "", + "remove": true + }, + { + "path": "system/app/CarrierDefaultApp", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/HomepageAPAC", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/priv-app/MDIP", + "description": "Amazon appmanager", + "remove": true + }, + { + "path": "system/operator-app/priv-app/Orange", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfig", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigAmxar", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigAmxcl", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigAmxco", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigAmxla", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigAmxmx", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigAmxpe", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigClaro", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigLenovo", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigOraeu", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigPlaypl", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigTimit", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigYandex", + "description": "", + "remove": true + }, + { + "path": "system/operator-app/app/MotoLauncherConfigYandexLenovo", + "description": "", + "remove": true + }, + { + "path": "system/framework/moto-enterprise.jar", + "description": "", + "remove": false + }, + { + "path": "system/framework/moto-core_services.jar", + "description": "", + "remove": false + }, + { + "path": "system/framework/moto-enterprise.jar.fsv_meta", + "description": "", + "remove": false + }, + { + "path": "system/framework/moto-core_services.jar.fsv_meta", + "description": "", + "remove": false + } + ], + + "system_ext_a": [ + { + "path": "priv-app/PAKS", + "description": "", + "remove": true + }, + { + "path": "priv-app/PaksNotification", + "description": "", + "remove": true + }, + { + "path": "priv-app/DemoMode", + "description": "", + "remove": true + }, + { + "path": "priv-app/GoogleFeedback", + "description": "", + "remove": true + }, + { + "path": "operator-app/priv-app/MotoLiveWallpaper3", + "description": "", + "remove": true + }, + { + "path": "priv-app/Notifications", + "description": "", + "remove": true + }, + { + "path": "priv-app/MotoCare", + "description": "", + "remove": true + }, + { + "path": "priv-app/SetupWizard", + "description": "Removing this app causes system to become unusable without prior option changes.", + "remove": false + }, + { + "path": "priv-app/GoogleServicesFramework", + "description": "Google GSF", + "remove": true + }, + { + "path": "priv-app/MotoInstaller", + "description": "", + "remove": true + }, + { + "path": "priv-app/MotoSecureVault", + "description": "", + "remove": true + }, + { + "path": "priv-app/MotoSecurityHub", + "description": "", + "remove": true + }, + { + "path": "priv-app/Devicemanagement", + "description": "Device management app", + "remove": true + }, + { + "path": "app/Main", + "description": "", + "remove": true + }, + { + "path": "priv-app/MotoLauncher", + "description": "Replaced with Lawnchair. Requires LauncherFrameworkRRO overlay to be set to 'app.lawnchair'.", + "remove": true + }, + { + "path": "priv-app/DuraSpeed", + "description": "DuraSpeed by Mediatek. Can be disabled by the end-user without uninstalling app.", + "remove": false + }, + { + "path": "priv-app/CoreSettingsExt", + "description": "", + "remove": true + } + ] +} diff --git a/scripts/bloatware/main.sh b/scripts/bloatware/main.sh new file mode 100755 index 0000000..2a76137 --- /dev/null +++ b/scripts/bloatware/main.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR>" + exit 1 +fi + +BASE_DIR=$1 +SCRIPT_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")") +CONFIG="${SCRIPT_DIR}/bloatware.json" +BLOATWARE=() + +BLOATWARE+=($(jq -r '.product_a[] | select(.remove == true) | "product_a/\(.path)"' "$CONFIG")) +BLOATWARE+=($(jq -r '.system_a[] | select(.remove == true) | "system_a/\(.path)"' "$CONFIG")) +BLOATWARE+=($(jq -r '.system_ext_a[] | select(.remove == true) | "system_ext_a/\(.path)"' "$CONFIG")) + +for package in "${BLOATWARE[@]}"; do + echo "[-] ${BASE_DIR}/${package}" + rm -rf "${BASE_DIR}/${package}" +done diff --git a/scripts/configs/main.sh b/scripts/configs/main.sh new file mode 100755 index 0000000..55ebc46 --- /dev/null +++ b/scripts/configs/main.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR> <TMP_DIR>" + exit 1 +fi + +BASE_DIR=$1 +TMP_DIR=$2 +SCRIPT_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")") + +cp -L "$TMP_DIR/res/configs/preferred-apps/preferred-apps-driedlamu.xml" "${BASE_DIR}"/product_a/etc/preferred-apps +./utils/scripts/add_to_fs.sh product_a "preferred-apps-driedlamu.xml" etc/preferred-apps 1 + +cp -L -r "$TMP_DIR/res/configs/sysconfig/app.lawnchair-hiddenapi-package-whitelist.xml" "${BASE_DIR}/product_a/etc/sysconfig" +./utils/scripts/add_to_fs.sh product_a app.lawnchair-hiddenapi-package-whitelist.xml etc/sysconfig + +"${SCRIPT_DIR}"/modify_configs.sh "$BASE_DIR" +"${SCRIPT_DIR}"/remove_configs.sh "$BASE_DIR" diff --git a/scripts/configs/modify_configs.sh b/scripts/configs/modify_configs.sh new file mode 100755 index 0000000..d400346 --- /dev/null +++ b/scripts/configs/modify_configs.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR>" + exit 1 +fi + +BASE_DIR=$1 + +SYSTEM_DIR="${BASE_DIR}/system_a" +PRODUCT_DIR="${BASE_DIR}/product_a" +SYSTEM_EXT_DIR="${BASE_DIR}/system_ext_a" + +modify_default_assistant() { + local apk_name="GmsConfigOverlayGSA" + local apk_location="${PRODUCT_DIR}/overlay" + local working_dir="/tmp/driedlamu/modify_apk/${apk_name}/decompile" + local assistant_package_name="me.kasesag.driedlamu.assistant" + + ./utils/scripts/modify_apk.sh unpack "$apk_location"/${apk_name}.apk + xml ed -L -u "/resources/string[@name='config_defaultAssistant']" -v "${assistant_package_name}" "$working_dir/res/values/strings.xml" + ./utils/scripts/modify_apk.sh repack "$apk_location"/${apk_name}.apk "$apk_location" +} + +modify_default_launcher() { + local apk_name="LauncherFrameworkRRO" + local apk_location="${PRODUCT_DIR}/overlay" + local working_dir="/tmp/driedlamu/modify_apk/${apk_name}/decompile" + local launcher_package_name="app.lawnchair" + + ./utils/scripts/modify_apk.sh unpack "$apk_location"/${apk_name}.apk + sed -i "s/com.motorola.launcher3/${launcher_package_name}/g" "$working_dir/res/values/strings.xml" + ./utils/scripts/modify_apk.sh repack "$apk_location"/${apk_name}.apk "$apk_location" +} + +echo "[=] Modifying default assistant to 'me.kasesag.driedlamu.asistant'" +modify_default_assistant + +echo "[=] Modifying default launcher activity to 'app.lawnchair'" +modify_default_launcher + +echo "[=] Writing an empty config to ${SYSTEM_DIR}/system/etc/sysconfig/enable-disable-preload-apps.xml" +echo -e '<?xml version="1.0" encoding="utf-8"?>\n<config>\n\n</config>' > "${SYSTEM_DIR}/system/etc/sysconfig/enable-disable-preload-apps.xml" +./utils/scripts/add_to_fs.sh system_a "enable-disable-preload-apps.xml" system/etc/sysconfig + +echo "[=] Writing an empty config to ${SYSTEM_DIR}/system/etc/appmanager.conf" +touch "${SYSTEM_DIR}/system/etc/appmanager.conf" +./utils/scripts/add_to_fs.sh system_a "appmanager.conf" system/etc + +echo "[=] Patching 'system_ext_property_contexts' in ${SYSTEM_EXT_DIR}/etc/selinux/system_ext_property_contexts" +sed -i -e "/facebook/d" \ + -e "/spotify/d" \ + -e "/booking/d" \ + -e "/inmobi/d" \ + -e "/zero_touch/d" \ + "${SYSTEM_EXT_DIR}/etc/selinux/system_ext_property_contexts"
\ No newline at end of file diff --git a/scripts/configs/remove_configs.sh b/scripts/configs/remove_configs.sh new file mode 100755 index 0000000..6940b2e --- /dev/null +++ b/scripts/configs/remove_configs.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR>" + exit 1 +fi + +BASE_DIR=$1 + +SYSTEM_DIR="${BASE_DIR}/system_a" +PRODUCT_DIR="${BASE_DIR}/product_a" +SYSTEM_EXT_DIR="${BASE_DIR}/system_ext_a" + +REMOVE_CONFIGS=( + "${PRODUCT_DIR}/etc/sysconfig/bugreport-whitelist-com.motorola.help.xml" + "${PRODUCT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.gamemode.xml" + "${PRODUCT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.help.xml" + "${PRODUCT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.timeweatherwidget.xml" + "${PRODUCT_DIR}/etc/sysconfig/preinstalled-packages-platform-overlays.xml" + "${PRODUCT_DIR}/etc/sysconfig/shortcut-com.motorola.gamemode.xml" + "${PRODUCT_DIR}/etc/sysconfig/whitelist_com.dti.motorola.xml" + "${PRODUCT_DIR}/etc/preferred-apps/google.xml" + "${PRODUCT_DIR}/etc/tn_app_delay.xml" + "${PRODUCT_DIR}/etc/perf_config_common.xml" + + "${SYSTEM_EXT_DIR}/etc/init/init.spotifyprops.rc" + "${SYSTEM_EXT_DIR}/etc/sysconfig/com.motorola.ccc.devicemanagement.powersave.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/com.motorola.ccc.mainplm.powersave.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/com.motorola.ccc.notification.powersave.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/com.motorola.installer.powersave.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/com.motorola.paks.powersave.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-allowlist-com.motorola.paks.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.ccc.devicemanagement.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.ccc.notification.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.demo.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.livewallpaper.xml" + # "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.securevault.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/hiddenapi-whitelist-com.motorola.launcher3.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/initial-package-stopped-states-com.motorola.securityhub.xml" + "${SYSTEM_EXT_DIR}/etc/sysconfig/whitelist_com.motorola.motocare.xml" + "${SYSTEM_EXT_DIR}/etc/nondisable/com.motorola.ccc.devicemanagement.nondisable.xml" + "${SYSTEM_EXT_DIR}/etc/nondisable/com.motorola.installer.xml" + "${SYSTEM_EXT_DIR}/etc/enable-disable-packages/enable-disable-com.motorola.installer.xml" + + "${SYSTEM_DIR}/system/etc/sysconfig/facebook-hiddenapi-package-allowlist.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/hiddenapi-moto-ota-package-whitelist.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/hiddenapi-whitelist-com.motorola.brapps.xml" + "${SYSTEM_DIR}/system/etc/enable-disable-packages/enable-disable-com.motorola.brapps.xml" + "${SYSTEM_DIR}/system/etc/enable-disable-packages/enable-disable-com.motorola.enterprise.adapter.service.xml" + + "${SYSTEM_DIR}/system/etc/init/facebook-appmanager.rc" + "${SYSTEM_DIR}/system/etc/sysconfig/afw-com.aura.oobe.motorola.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/afw-com.dti.motorola.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/afw-com.inmobi.installer.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/business-edition-disabled-apps.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/com.motorola.brapps.powersave.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/com.motorola.enterprise.adapter.service.powersave.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/hiddenapi-whitelist-cco.sitic.pp.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/hiddenapi-whitelist-com.android.providers.partnerbookmarks.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/hiddenapi-whitelist-com.motorola.android.providers.chromehomepage.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/hiddenapi-whitelist-moto.xml" # MotoOTA package + "${SYSTEM_DIR}/system/etc/sysconfig/initial-package-stopped-states-orange.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/meta-hiddenapi-package-allowlist.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/sysconfig-orange.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/whitelist_aura.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/whitelist_com.claroColombia.contenedor.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/whitelist_com.ironsource.appcloud.oobe.hutchison.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/whitelist_com.motorola.spaces.xml" + "${SYSTEM_DIR}/system/etc/sysconfig/whitelist_com.telcel.contenedor.xml" + "${SYSTEM_DIR}/system/etc/appmanager.conf" +) + +REMOVE_DIRS=( + "${PRODUCT_DIR}/media-poland-play" + "${PRODUCT_DIR}/etc/sku_RU" + "${PRODUCT_DIR}/etc/sku_INDIA" + "${PRODUCT_DIR}/etc/sku_EEA" + "${PRODUCT_DIR}/etc/motorola" + "${PRODUCT_DIR}/etc/MotoDesktopAppConfig" + + # "${SYSTEM_DIR}/system/etc/duraspeed" +) + +echo "[i] Removing system configs..." +for config in "${REMOVE_CONFIGS[@]}"; do + echo -e "\t[-] ${config}" + rm -rf "$config" +done + +echo "[i] Removing system directories..." +for config in "${REMOVE_DIRS[@]}"; do + echo -e "\t[-] ${config}" + rm -rf "$config" +done diff --git a/scripts/download_apks.sh b/scripts/download_apks.sh new file mode 100755 index 0000000..e494b9e --- /dev/null +++ b/scripts/download_apks.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <TMP_DIR>" + exit 1 +fi + +source .config + +TMP_DIR=$1 +APK_RES_DIR="$TMP_DIR/res/apks" + +FDROID_PACKAGES=( + "org.fossify.math" + "org.fossify.clock" + "org.fossify.contacts" + "org.fossify.filemanager" + "org.fossify.gallery" + "org.fossify.messages" + "org.fossify.phone" + "org.fossify.voicerecorder" + "org.fossify.musicplayer" + "org.fossify.calendar" +) + +normalize_package_name() { + local package_name=$1 + local dots=$(echo "${package_name}" | grep -o "\." | wc -l) + echo "${package_name}" | tr "." "\n" | sed -e "1,${dots}d" -e "s/\b\(.\)/\u\1/g" +} + +fdroid_download_package() { + local package_name=$1 + local output_dir=$2 + local version=$(curl -s "https://f-droid.org/api/v1/packages/${package_name}" | jq -r '.suggestedVersionCode') + local normalized_pkg_name=$(normalize_package_name ${package_name}) + + wget -q -O "$output_dir/${normalized_pkg_name}.apk" https://f-droid.org/repo/${package_name}_${version}.apk + echo -e "\t[+] $package_name" +} + +mkdir -p "$TMP_DIR/res/apks" \ + "$TMP_DIR/res/apks/apps" \ + "$TMP_DIR/res/apks/priv-apps" \ + "$TMP_DIR/res/apks/preload-apps" + +if [[ $INSTALL_FDROID == 1 ]]; then + echo "[i] Downloading F-Droid" + fdroid_download_package "org.fdroid.fdroid.privileged" "$APK_RES_DIR/priv-apps" + fdroid_download_package "org.fdroid.fdroid" "$APK_RES_DIR/apps" + echo "[i] Done" +fi + +wait + +if [[ $INSTALL_RECOMMENDED_FOSS_APPS == 1 ]]; then + echo "[i] Downloading recommended apps" + fdroid_download_package "org.fossify.phone" "$APK_RES_DIR/priv-apps" + for pkg in "${FDROID_PACKAGES[@]}"; do + fdroid_download_package "${pkg}" "$APK_RES_DIR/apps" & + done + wait + echo "[i] Done" +fi
\ No newline at end of file diff --git a/scripts/install_apks.sh b/scripts/install_apks.sh new file mode 100755 index 0000000..9e22ee3 --- /dev/null +++ b/scripts/install_apks.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "Incorrect arguments!" + echo " Using: $0 <BASE_DIR> <SRC_DIR>" + exit 1 +fi + +BASE_DIR=$1 +SRC_DIR=$2 + +APPS_SRC="${SRC_DIR}/apks/apps" +PRIV_APPS_SRC="${SRC_DIR}/apks/priv-apps" +PRELOAD_APP_SRC="${SRC_DIR}/apks/preload-apps" +OVERLAY_APP_SRC="${SRC_DIR}/apks/overlay" + +APPS_DST="${BASE_DIR}/product_a/app" +PRIV_APPS_DST="${BASE_DIR}/product_a/priv-app" +PRELOAD_APP_DST="${BASE_DIR}/system_a/system/preloadapp/app" +OVERLAY_APP_DST="${BASE_DIR}/product_a/overlay" + +install_apks() { + local src_dir=$1 + local dst_dir=$2 + local label=$3 + local partition=$4 + + if [ ! -d "$src_dir" ]; then + echo "[~] No apks avialable ${label}" + return + fi + + local count=0 + for apk in "${src_dir}"/*.apk; do + [ -f "$apk" ] || continue + + app_name=$(basename "$apk" .apk) + app_dst="${dst_dir}/${app_name}" + + echo -e "\t[=] Installing ${app_name} to ${label}..." + mkdir -p "$app_dst" + ./utils/scripts/add_to_fs.sh "$partition" "$app_name" "$label" 1 + + cp -L "$apk" "${app_dst}/${app_name}.apk" + ./utils/scripts/add_to_fs.sh "$partition" "${app_name}.apk" "$label/$app_name" + + count=$((count + 1)) + done + + echo "[i] ${count} APK(s) have been installed as '${label}'" +} + +echo "[*] Installing APKs..." +install_apks "$APPS_SRC" "$APPS_DST" "app" "product_a" +install_apks "$PRIV_APPS_SRC" "$PRIV_APPS_DST" "priv-app" "product_a" +install_apks "$OVERLAY_APP_SRC" "$OVERLAY_APP_DST" "overlay" "product_a" +install_apks "$PRELOAD_APP_SRC" "$PRELOAD_APP_DST" "system/preloadapp/app" "system_a"
\ No newline at end of file diff --git a/scripts/microg.sh b/scripts/microg.sh new file mode 100755 index 0000000..6b4bed8 --- /dev/null +++ b/scripts/microg.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +if [ "$#" -lt 2 ]; then + echo "Incorrect arguments!" + echo " Using: $0 <BASE_DIR> <TMP_DIR>" + exit 1 +fi + +source .config + +BASE_DIR=$1 +TMP_DIR=$2 + +RES_DIR="$TMP_DIR/res/microg" +APK_RES_DIR="$TMP_DIR/res/apks" +WORK_DIR="$TMP_DIR/microg" + +SYSTEM_DIR="${BASE_DIR}/system_a" +PRODUCT_DIR="${BASE_DIR}/product_a" + +patch_microg() { + echo "[i] Patching microG" + + zip -q -d "${WORK_DIR}"/GmsCore_o.apk META-INF/MANIFEST.MF + zip -q -d "${WORK_DIR}"/GmsCore_o.apk META-INF/CERT.SF + zip -q -d "${WORK_DIR}"/GmsCore_o.apk META-INF/CERT.RSA + + zip -q -d "${WORK_DIR}"/Phonesky_o.apk META-INF/MANIFEST.MF + zip -q -d "${WORK_DIR}"/Phonesky_o.apk META-INF/CERT.SF + zip -q -d "${WORK_DIR}"/Phonesky_o.apk META-INF/CERT.RSA + + zipalign 4 "${WORK_DIR}"/Phonesky_o.apk "${WORK_DIR}"/Phonesky_oz.apk + zipalign 4 "${WORK_DIR}"/GmsCore_o.apk "${WORK_DIR}"/GmsCore_oz.apk + + apksigcopier patch "${RES_DIR}"/signatures-google/phonesky "${WORK_DIR}"/Phonesky_oz.apk "${APK_RES_DIR}"/priv-apps/Phonesky.apk + apksigcopier patch "${RES_DIR}"/signatures-google/gms "${WORK_DIR}"/GmsCore_oz.apk "${APK_RES_DIR}"/priv-apps/GmsCore.apk +} + +download_latest_microg() { + echo "[i] Downloading latest microG" + + local gmscore_url=$(curl -s "https://api.github.com/repos/microg/GmsCore/releases/latest" | jq -r '[ .assets[] | select( .browser_download_url | test("com.google.android.gms.(\\d+).apk$")?) ]' | jq -r ".[] | .browser_download_url") + local phonesky_url=$(curl -s "https://api.github.com/repos/microg/GmsCore/releases/latest" | jq -r '[ .assets[] | select( .browser_download_url | test("com.android.vending.(\\d+).apk$")) ]' | jq -r ".[] | .browser_download_url") + local gsfproxy_url=$(curl -s "https://api.github.com/repos/microg/GsfProxy/releases/latest" | jq -r '[ .assets[] | select( .browser_download_url) ]' | jq -r ".[] | .browser_download_url") + + if [[ $INSTALL_SU == 1 ]]; then + wget -q -O "${APK_RES_DIR}"/priv-apps/GmsCore.apk "$gmscore_url" + wget -q -O "${APK_RES_DIR}"/priv-apps/Phonesky_o.apk "$phonesky_url" + else + wget -q -O "${WORK_DIR}"/GmsCore_o.apk "$gmscore_url" + wget -q -O "${WORK_DIR}"/Phonesky_o.apk "$phonesky_url" + fi + + wget -q -O "${APK_RES_DIR}"/priv-apps/GsfProxy.apk "$gsfproxy_url" +} + +install_lib() { + mkdir -p "${PRODUCT_DIR}"/priv-app/GmsCore/lib + ./utils/scripts/add_to_fs.sh product_a "lib" priv-app/GmsCore 1 + + mkdir -p "${PRODUCT_DIR}"/priv-app/GmsCore/lib/arm64 + ./utils/scripts/add_to_fs.sh product_a "arm64" priv-app/GmsCore/lib 1 + + echo "[*] Installing microG libraries (64-bit)" + + for lib in "${RES_DIR}"/system/lib/arm64/*; do + lib_name=$(basename "$lib") + + cp -L "${lib}" "${SYSTEM_DIR}/system/lib64/" + cp -L "${lib}" "${PRODUCT_DIR}/priv-app/GmsCore/lib/arm64" + + ./utils/scripts/add_to_fs.sh system_a "${lib_name}" system/lib64 + ./utils/scripts/add_to_fs.sh product_a "${lib_name}" priv-app/GmsCore/lib/arm64 + + echo -e "\t[+] ${lib}" + done + + echo "[*] Installing microG libraries (32-bit)" + + for lib in "${RES_DIR}"/system/lib/armeabi-v7a/*; do + lib_name=$(basename "$lib") + + cp -L "${lib}" "${SYSTEM_DIR}/system/lib/" + ./utils/scripts/add_to_fs.sh system_a "${lib_name}" system/lib + + echo -e "\t[+] ${lib}" + done +} + +install_files() { + echo "[i] Installing microG files" + + cp -L "${RES_DIR}/permissions/priv-apps/privapp-permissions-org.microG.xml" "${PRODUCT_DIR}/etc/permissions/privapp-permissions-org.microG.xml" + ./utils/scripts/add_to_fs.sh product_a "privapp-permissions-org.microG.xml" etc/permissions + + cp -L "${RES_DIR}/permissions/apps/permissions-com.google.android.gms.xml" "${PRODUCT_DIR}/etc/default-permissions/permissions-com.google.android.gms.xml" + ./utils/scripts/add_to_fs.sh product_a "permissions-com.google.android.gms.xml" etc/default-permissions + + cp -L "${RES_DIR}/permissions/priv-apps/com.google.android.maps.xml" "${SYSTEM_DIR}/system/etc/permissions/com.google.android.maps.xml" + ./utils/scripts/add_to_fs.sh system_a "com.google.android.maps.xml" system/etc/permissions + + cp -L "${RES_DIR}/system/framework/com.google.android.maps.jar" "${SYSTEM_DIR}/system/framework/com.google.android.maps.jar" + ./utils/scripts/add_to_fs.sh system_a "com.google.android.maps.jar" system/framework +} + +install_sync() { + echo "[i] Installing Google Sync" + + cp -L "${RES_DIR}/permissions/apps/permissions-google-sync.xml" "${SYSTEM_DIR}/system/etc/permissions/permissions-google-sync.xml" + ./utils/scripts/add_to_fs.sh system_a "permissions-google-sync.xml" system/etc/permissions + + cp -L "${RES_DIR}/apks/apps/GoogleCalendarSyncAdapter.apk" "${APK_RES_DIR}/apps" + cp -L "${RES_DIR}/apks/apps/GoogleContactsSyncAdapter.apk" "${APK_RES_DIR}/apps" +} + +mkdir -p "$WORK_DIR" +download_latest_microg + +if [[ $INSTALL_SU == 0 ]]; then + patch_microg +else + echo "[i] Root installation enabled. MicroG will not be patched to accept default signatures." + sleep 1 +fi + +install_files +install_lib +install_sync + +echo "[i] microG setup complete!"
\ No newline at end of file diff --git a/scripts/permissions/install_permissions.sh b/scripts/permissions/install_permissions.sh new file mode 100755 index 0000000..e802cc7 --- /dev/null +++ b/scripts/permissions/install_permissions.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "Incorrect arguments!" + echo " Using: $0 <BASE_DIR> <SRC_DIR>" + exit 1 +fi + +BASE_DIR=$1 +SRC_DIR=$2 +PERMISSIONS_APPS_SRC="${SRC_DIR}/permissions/apps" +PERMISSIONS_PRIV_APPS_SRC="${SRC_DIR}/permissions/priv-apps" +PERMISSIONS_APPS_DST="${BASE_DIR}/product_a/etc/default-permissions" +PERMISSIONS_PRIV_APPS_DST="${BASE_DIR}/product_a/etc/permissions" + +install_permissions() { + local src_dir=$1 + local dst_dir=$2 + local label=$3 + + for file in "${src_dir}"/*.xml; do + file_name=$(basename "$file") + + cp -L "$file" "${dst_dir}/${file_name}" + ./utils/scripts/add_to_fs.sh product_a "$file_name" "etc/$label" + done +} + +install_permissions "$PERMISSIONS_APPS_SRC" "$PERMISSIONS_APPS_DST" "default-permissions" +install_permissions "$PERMISSIONS_PRIV_APPS_SRC" "$PERMISSIONS_PRIV_APPS_DST" "permissions" + +echo -e '<?xml version="1.0" encoding="utf-8"?>\n<permissions>\n\t\t<privapp-permissions package="org.fdroid.fdroid.privileged">\n\t\t\t\t<permission name="android.permission.DELETE_PACKAGES"/>\n\t\t\t\t<permission name="android.permission.INSTALL_PACKAGES"/>\n\t\t</privapp-permissions>\n</permissions>' > "${PERMISSIONS_PRIV_APPS_DST}/org.fdroid.fdroid.privileged.xml" +./utils/scripts/add_to_fs.sh product_a org.fdroid.fdroid.privileged.xml etc/permissions + +# sed -i '$d' ${BASE_DIR}/system_a/system/etc/permissions/privapp-permissions-platform.xml +# echo -e '\n\t<privapp-permissions package="org.fdroid.fdroid.privileged">\n\t\t<permission name="android.permission.DELETE_PACKAGES"/>\n\t\t<permission name=" android.permission.INSTALL_PACKAGES"/>\n\t</privapp-permissions>\n' >> ${BASE_DIR}/product_a/etc/permissions/org.fdroid.fdroid.privileged.xml >> ${BASE_DIR}/system_a/system/etc/permissions/privapp-permissions-platform.xml +# sed -i '$a</permissions>' ${BASE_DIR}/system_a/system/etc/permissions/privapp-permissions-platform.xml
\ No newline at end of file diff --git a/scripts/permissions/main.sh b/scripts/permissions/main.sh new file mode 100755 index 0000000..4584f64 --- /dev/null +++ b/scripts/permissions/main.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR> <TMP_DIR>" + exit 1 +fi + +BASE_DIR=$1 +TMP_DIR=$2 +SCRIPT_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")") + +"${SCRIPT_DIR}"/remove_permissions.sh "$BASE_DIR" +"${SCRIPT_DIR}"/install_permissions.sh "$BASE_DIR" "$TMP_DIR/res"
\ No newline at end of file diff --git a/scripts/permissions/remove_permissions.sh b/scripts/permissions/remove_permissions.sh new file mode 100755 index 0000000..053f12a --- /dev/null +++ b/scripts/permissions/remove_permissions.sh @@ -0,0 +1,154 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[-] Incorrect arguments!" + echo " Using: $0 <BASE_DIR>" + exit 1 +fi + +BASE_DIR=$1 +SYSTEM_DIR="${BASE_DIR}/system_a" +PRODUCT_DIR="${BASE_DIR}/product_a" +SYSTEM_EXT_DIR="${BASE_DIR}/system_ext_a" + +REMOVE_GOOGLE_APP_PERMISSIONS=( + "com.google.android.apps.restore" + "com.google.android.apps.assistant" + "com.google.android.apps.actionsservice" + "com.google.android.apps.tachyon" + "com.google.android.apps.photos" +) + +REMOVE_GOOGLE_PRIVAPP_PERMISSIONS=( + "com.google.android.apps.nbu.files" + "com.google.android.apps.messaging" + "com.google.android.apps.restore" + "com.google.android.apps.safetyhub" + "com.android.vending" + "com.google.android.apps.actionsservice" + "com.google.android.apps.assistant" + "com.google.android.gms" + "com.google.android.gms.supervision" + "com.google.android.googlequicksearchbox" + "com.android.hotwordenrollment.okgoogle" +) + +REMOVE_CONFIG_PERMISSIONS=( + # app permissions + "${PRODUCT_DIR}/etc/default-permissions/default-permission-com.motorola.timeweatherwidget.xml" + + "${SYSTEM_EXT_DIR}/etc/default-permissions/default-permission-com.motorola.ccc.notification.xml" + "${SYSTEM_EXT_DIR}/etc/default-permissions/default-permission-com.motorola.installer.xml" + + "${SYSTEM_DIR}/system/etc/default-permissions/default-permission-com.glance.lockscreenM.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permission-com.motorola.motoota.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permission-com.telcel.contenedor.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-com.aura.oobe.motorola.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-com.claro.contenedor.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-com.dti.motorola.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-com.handmark.expressweather.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-com.ironsource.appcloud.oobe.hutchison.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-com.motorola.gamemode.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-meta.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/default-permissions-sysdll.xml" + "${SYSTEM_DIR}/system/etc/default-permissions/pregranted-notification-permission-orange.xml" + + # priv-app permissions + "${PRODUCT_DIR}/etc/permissions/privapp-permissions-com.motorola.help.xml" + "${PRODUCT_DIR}/etc/permissions/privapp-permissions-google-comms-suite.xml" + "${PRODUCT_DIR}/etc/permissions/split-permissions-google.xml" + "${PRODUCT_DIR}/etc/permissions/com.motorola.gamemode_cli_games.xml" + "${PRODUCT_DIR}/etc/permissions/com.motorola.gamemode.xml" + "${PRODUCT_DIR}/etc/permissions/com.motorola.help.xml" + "${PRODUCT_DIR}/etc/permissions/com.motorola.timeweatherwidget.xml" + # "${PRODUCT_DIR}/etc/permissions/feature-com.motorola.securevault.xml" + "${PRODUCT_DIR}/etc/permissions/permission_ignite_com.dti.motorola.xml" + "${PRODUCT_DIR}/etc/permissions/privapp-permissions-com.motorola.gamemode.xml" + "${PRODUCT_DIR}/etc/permissions/privapp-permissions-com.payjoy.access.xml" + + "${SYSTEM_EXT_DIR}/etc/permissions/afw-com.motorola.livewallpaper.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/feature-com.motorola.securityhub.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.livewallpaper.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.installer.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.paks.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.motocare.xml" + # "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.securevault.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.securityhub.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.ccc.devicemanagement.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.ccc.notification.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.demo.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.launcher3.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/com.motorola.launcher3.delete.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/com.motorola.launcher3_feature.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/com.motorola.launcher3.swipe2stream.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/com.motorola.launcher3.twoline.xml" + "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-com.motorola.coresettingsext.xml" + + "${SYSTEM_DIR}/system/etc/permissions/co.sitic.pp.powersave.xml" + "${SYSTEM_DIR}/system/etc/permissions/feature-com.glance.lockscreenM.xml" + "${SYSTEM_DIR}/system/etc/permissions/feature-com.taboola.ody.xml" + "${SYSTEM_DIR}/system/etc/permissions/permission_ignite_com.motorola.genie.xml" + "${SYSTEM_DIR}/system/etc/permissions/permission_SM_com.claroColombia.contenedor.xml" + "${SYSTEM_DIR}/system/etc/permissions/permission_SM_com.telcel.contenedor.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.amazon.appmanager.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.android.providers.partnerbookmarks.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.ape.setupwizard.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.aura.oobe.motorola.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.glance.lockscreenM.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.ironsource.appcloud.oobe.hutchison.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.motorola.android.providers.chromehomepage.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.motorola.brapps.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.motorola.enterprise.adapter.service.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.motorola.enterprise.service.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-co.sitic.pp.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-meta.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-orange.xml" + + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-orange.xml" + + "${SYSTEM_DIR}/system/etc/permissions/com.motorola.enterpriseinternal.xml" + # "${SYSTEM_DIR}/system/etc/permissions/com.motorola.enterprise.xml" + # "${SYSTEM_DIR}/system/etc/permissions/com.motorola.motosignature.xml" + "${SYSTEM_DIR}/system/etc/permissions/com.motorola.software.guideme.xml" + # "${SYSTEM_DIR}/system/etc/permissions/moto-core_services.xml" + # "${SYSTEM_DIR}/system/etc/permissions/moto-enterprise-internal.xml" + # "${SYSTEM_DIR}/system/etc/permissions/moto-enterprise.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.motorola.motoota.xml" + "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-com.motorola.spaces.xml" +) + +xml_remove_app_permission() { + local pkg=$1 + local dst_file=$2 + + echo -e "\t[-] App permission: ${pkg}" + xml ed -L -d "/exceptions/exception [@package='${pkg}']" "${dst_file}" +} + +xml_remove_privapp_permission() { + local pkg=$1 + local dst_file=$2 + + echo -e "\t[-] Privapp permission: ${pkg}" + xml ed -L -d "/permissions/privapp-permissions [@package='${pkg}']" "${dst_file}" +} + +echo "[i] Removing Google App permissions..." +for pkg in "${REMOVE_GOOGLE_APP_PERMISSIONS[@]}"; do + xml_remove_app_permission "${pkg}" "${PRODUCT_DIR}/etc/default-permissions/default-permissions-google.xml" +done + +echo "[i] Removing Google Priv-App permissions..." +for pkg in "${REMOVE_GOOGLE_PRIVAPP_PERMISSIONS[@]}"; do + xml_remove_privapp_permission "${pkg}" "${PRODUCT_DIR}/etc/permissions/privapp-permissions-google-product.xml" +done + +echo "[i] Removing config permissions..." +for config in "${REMOVE_CONFIG_PERMISSIONS[@]}"; do + echo -e "\t[-] ${config}" + rm -rf "$config" +done + +xml_remove_privapp_permission "com.google.android.apps.setupwizard.searchselector" "${SYSTEM_DIR}/system/etc/permissions/privapp-permissions-google-system.xml" +xml_remove_privapp_permission "com.google.android.gsf" "${SYSTEM_EXT_DIR}/etc/permissions/privapp-permissions-google-system_ext.xml" +xml_remove_privapp_permission "com.google.android.apps.searchlite" "${PRODUCT_DIR}/etc/permissions/privapp-permissions-google-product.xml" diff --git a/scripts/props.sh b/scripts/props.sh new file mode 100755 index 0000000..fd1bd0c --- /dev/null +++ b/scripts/props.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +if [ "$#" -ne 1 ]; then + echo "[x] Incorrect arguments!" + echo " Using: $0 <BASE_DIR>" + exit 1 +fi + +source .config + +BASE_DIR=$1 +BUILD_PROP="${BASE_DIR}/system_a/system/build.prop" + +ADD_PROP_LIST=( + "persist.camera.HAL3.enabled=1" + + "debug.hwui.render_dirty_regions=false" + "debug.sf.skip_dirty_regions=1" + "debug.sf.nobootanimation=1" + "ro.max.fling_velocity=18000" + "ro.min.fling_velocity=12000" + "debug.sf.hw=1" + + "ro.telephony.call_ring.delay=0" + "ro.media.enc.jpeg.quality=100" + "ro.audio.silent=0" + + # Skip SetupWizard (required without GAPPS) + "ro.setupwizard.enable_bypass=1" + "ro.setupwizard.enterprise_mode=0" + "ro.setupwizard.mode=DISABLED" + "ro.setupwizard.network_required=false" + "ro.setupwizard.wifi_required=false" +) + +EDIT_PROP_LIST=( + "persist.sys.zram_wb_enabled=false" + "persist.sys.zram_wb_ai_enabled=false" + "ro.zygote.preload.enable=1" + "ro.moto.general.feature.ota=false" + "ro.moto.general.clientid=false" + "ro.moto.general.motosecure=false" + "ro.moto.general.motofeedback=false" + "ro.moto.general.motohelp=false" + "ro.moto.general.time_weather=false" + "ro.moto.general.feature.ironsource=false" +) + +append_prop() { + if ! grep -q "${1}" "$BUILD_PROP"; then + echo -e "\t[+] Adding prop '${1}' to '${2}'" + sed -i "$ a ${1}" "$BUILD_PROP" + else + echo -e "\t[i] Prop '${1}' is already present in '${2}'" + fi +} + +remove_prop() { + if grep -q "^${1}" "${2}"; then + echo -e "\t[-] Removing prop '${1}' from '${2}'" + sed -i "/^${1}/d" "${2}" + else + echo -e "\t[i] Prop '${1}' is not present in '${2}'" + fi +} + +edit_prop() { + prop_name="${1%%=*}" + new_value="${1#*=}" + if grep -q "${prop_name}=" "${2}"; then + current_value=$(grep "^${prop_name}=" "${2}" | cut -d'=' -f2) + if [ "$current_value" != "$new_value" ]; then + echo "[=] Editing prop '${prop_name}' in '${2}'" + sed -i "s/${prop_name}=.*/${prop_name}=${new_value}/" "${2}" + else + echo "[*] Prop '${prop_name}' already has the desired value (${new_value}) in '${2}'" + fi + else + echo "[i] Prop '${prop_name}' is not present in '${2}'" + fi +} + + +if [[ $ENABLE_INSECURE_ADB == 1 ]]; then + ADD_PROP_LIST+=( + "persist.adb.notify=0" + "persist.service.adb.enable=1" + "persist.service.debuggable=1" + "persist.sys.usb.config=mtp,adb" + "ro.adb.secure=0" + "ro.debuggable=1" + "ro.force.debuggable=1" + "ro.control_privapp_permissions=log" + ) +fi + +if [[ $DISABLE_MOTO_HELLO_UI == 1 ]]; then + EDIT_PROP_LIST+=("ro.moto.general.feature.enable_systemui_hello_ui=false") +else + if [[ $DISABLE_MOTO_HELLO_UI_BLUR == 1 ]]; then + ADD_PROP_LIST+=( + "ro.sf.blurs_are_expensive=1" + "ro.surface_flinger.supports_background_blur=0" + "persist.sysui.disableBlur=true" + ) + fi +fi + +for prop in "${EDIT_PROP_LIST[@]}"; do + edit_prop "$prop" "${BUILD_PROP}" +done + +for prop in "${ADD_PROP_LIST[@]}"; do + append_prop "$prop" "${BUILD_PROP}" +done |
