#!/bin/bash if [ "$#" -lt 2 ]; then echo "Incorrect arguments!" echo " Using: $0 " 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!"