diff options
| author | Kacper Sagalara <mail@kasesag.me> | 2026-06-19 19:08:11 +0200 |
|---|---|---|
| committer | Kacper Sagalara <mail@kasesag.me> | 2026-06-19 19:08:11 +0200 |
| commit | 7821c02171d77229797e3a57edd0502e942373cc (patch) | |
| tree | 2856fdb7f36144c6e539cfedacd475bf10458ce1 /scripts/microg.sh | |
| parent | 0339c6b9e1cafffc2e37c47df4277157fc678041 (diff) | |
Diffstat (limited to 'scripts/microg.sh')
| -rwxr-xr-x | scripts/microg.sh | 130 |
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 |
