aboutsummaryrefslogtreecommitdiff
path: root/scripts/microg.sh
diff options
context:
space:
mode:
authorKacper Sagalara <mail@kasesag.me>2026-06-19 19:08:11 +0200
committerKacper Sagalara <mail@kasesag.me>2026-06-19 19:08:11 +0200
commit7821c02171d77229797e3a57edd0502e942373cc (patch)
tree2856fdb7f36144c6e539cfedacd475bf10458ce1 /scripts/microg.sh
parent0339c6b9e1cafffc2e37c47df4277157fc678041 (diff)
Add missing files.HEADmaster
Diffstat (limited to 'scripts/microg.sh')
-rwxr-xr-xscripts/microg.sh130
1 files changed, 130 insertions, 0 deletions
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