diff --git a/docs/README.md b/docs/README.md
index 7014d7abc..630c16c0e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -42,6 +42,7 @@
- Keep each build up to date
- Support both ARM64 and x64
- Support MindTheGapps
+- Support LiteGapps
- Remove Amazon Appstore
- Fix VPN dialog not showing (use our [VpnDialogs app](https://github.com/LSPosed/VpnDialogs))
- Add device administration feature
@@ -65,10 +66,12 @@
6. Select the version of Magisk.
7. Choose which brand of GApps you want to install:
- MindTheGapps
+ - LiteGapps
- There is no other variant we can choose.
+ There is no other variant we can choose from MindTheGapps.
+ At this time of writing this, for Android 13, x86-64 architecture, there are `core` and `lite` variants from LiteGapps.
8. Select the root solution (none means no root).
-9. If you are running the script for the first time, it will take some time to complete. After the script completes, two new folders named `output` and `download` will be generated in the `MagiskOnWSALocal` folder. Go to the `output` folder. While running the `./run.sh` script in the step 3, if you selected `Yes` for `Do you want to compress the output?` then in `output` folder you will see a compressed file called `WSA-with-magisk-stable-MindTheGapps_2207.40000.8.0_x64_Release-Nightly`or else there will be folder with the `WSA-with-magisk-stable-MindTheGapps_2207.40000.8.0_x64_Release-Nightly`. If there is a folder open it and skip to step 10. NOTE: The name of compressed file or the folder generated in the `output` folder may be different for you. It will be dependent on the choices made when executing `./run.sh`.
+9. If you are running the script for the first time, it will take some time to complete. After the script completes, two new folders named `output` and `download` will be generated in the `MagiskOnWSALocal` folder. Go to the `output` folder. While running the `./run.sh` script in the step 3, if you selected `Yes` for `Do you want to compress the output?`, you will find a compressed file in the `output` folder. Depending on the GApps brand you chose earlier, the compressed file will be named either `WSA-with-magisk-stable-MindTheGapps_2311.40000.5.0_x64_Release-Nightly` or `WSA-with-magisk-stable-LiteGapps_2311.40000.5.0_x64_Release-Nightly`. Otherwise, there will be a folder with any of these names. If a folder exists, open it and proceed to step 10. NOTE: The name of the compressed file or the folder generated in the `output` folder may be a little bit different for you, depending on the choices you made when executing `./run.sh`.
10. Extract the compressed file and open the folder created after the extraction of the file.
11. Here look for file `Run.bat` and run it.
- If you previously have a MagiskOnWSA installation, it will automatically uninstall the previous one while **preserving all user data** and install the new one, so don't worry about your data.
@@ -151,13 +154,17 @@
Or you can download the built package for 12.1 and 13 for x86_64 from [this page](https://sourceforge.net/projects/wsa-mtg/files/x86_64/).
-- Can I switch OpenGApps to MindTheGapps and keep user data in a previous build?
+- Where can I download LiteGapps?
+
+ You can download the built packages for multiple Android versions for x86_64 from [this page](https://sourceforge.net/projects/litegapps/files/litegapps/x86_64/).
+
+- Can I switch OpenGApps to MindTheGapps or LiteGapps and keep user data in a previous build?
No. You should wipe data after changing the GApps brand. Otherwise, you will find that the installed GApps are not recognized.
- WSA with OpenGApps integrated fails to start.
- OpenGApps has not yet released a version built for Android 12L and 13, only built for Android 11, which may not be compatible and thus cause crashes. Consider switching to MindTheGapps.
+ OpenGApps has not yet released a version built for Android 12L and 13, only built for Android 11, which may not be compatible and thus cause crashes. Consider switching to MindTheGapps or LiteGapps.
- How to install KernelSU?
@@ -172,6 +179,7 @@
- [StoreLib](https://github.com/StoreDev/StoreLib): API for downloading WSA
- [Magisk](https://github.com/topjohnwu/Magisk): The most famous root solution on Android
- [The Open GApps Project](https://opengapps.org): One of the most famous Google Apps packages solution
+- [LiteGapps](https://litegapps.github.io): A compact, user-friendly, and comprehensive custom GApps package
- [WSA-Kernel-SU](https://github.com/LSPosed/WSA-Kernel-SU) and [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/): The kernel `su` for debugging Magisk Integration
- [WSAGAScript](https://github.com/ADeltaX/WSAGAScript): The first GApps integration script for WSA
- [erofs-utils](https://github.com/sekaiacg/erofs-utils): Pre-build `erofs-utils` with erofsfuse enabled
diff --git a/scripts/build.sh b/scripts/build.sh
index f36e12746..15ab7f7c4 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -257,6 +257,7 @@ MAGISK_VER_MAP=(
GAPPS_BRAND_MAP=(
"OpenGApps"
"MindTheGapps"
+ "LiteGapps"
"none"
)
@@ -270,6 +271,8 @@ GAPPS_VARIANT_MAP=(
"pico"
"tvstock"
"tvmini"
+ "core"
+ "lite"
)
ROOT_SOL_MAP=(
@@ -483,6 +486,8 @@ update_gapps_zip_name() {
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
ANDROID_API=30
GAPPS_ZIP_NAME=$GAPPS_BRAND-$ARCH-${ANDROID_API_MAP[$ANDROID_API]}-$GAPPS_VARIANT.zip
+ elif [ "$GAPPS_BRAND" = "LiteGapps" ]; then
+ GAPPS_ZIP_NAME=$GAPPS_BRAND-$ARCH-${ANDROID_API_MAP[$ANDROID_API]}-$GAPPS_VARIANT.zip
else
GAPPS_ZIP_NAME=$GAPPS_BRAND-$ARCH-${ANDROID_API_MAP[$ANDROID_API]}.zip
fi
@@ -639,6 +644,22 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
CLEAN_DOWNLOAD_GAPPS=1
abort "Unzip OpenGApps failed, is the download incomplete?"
fi
+ elif [ "$GAPPS_BRAND" = "LiteGapps" ]; then
+ if ! unzip -p "$GAPPS_PATH" files/files.tar.xz | tar -xJf - -C "$WORK_DIR/gapps" --strip-components=3 "x86_64/${ANDROID_API}/system"; then
+ CLEAN_DOWNLOAD_GAPPS=1
+ abort "Unzip LiteGapps failed, is the download incomplete?"
+ fi
+ if unzip -l "$GAPPS_PATH" | grep -q "modules/"; then
+ for module_zip in $(unzip -l "$GAPPS_PATH" | awk '/modules\/.*\.zip/ && !/_MarkupGoogle|_PixelLauncher|_PixelSetupWizard|_SetupWizard/ { print $4 }'); do
+ unzip -j -o "$GAPPS_PATH" "$module_zip" -d "$WORK_DIR/litegapps-modules"
+ unzip -o "$WORK_DIR/litegapps-modules/$(basename "$module_zip")" 'system/*' -d "$WORK_DIR/litegapps-modules"
+ rsync -a "$WORK_DIR/litegapps-modules/system/" "$WORK_DIR/gapps/"
+ done
+ rm -rf "$WORK_DIR/litegapps-modules/"
+ fi
+ if ! grep -q '' "$WORK_DIR/gapps/product/etc/permissions/litegapps-permissions.xml"; then
+ sudo sed -e '/NOTIFY_PENDING_SYSTEM_UPDATE/i \ ' -i "$WORK_DIR/gapps/product/etc/permissions/litegapps-permissions.xml"
+ fi
else
if ! unzip "$GAPPS_PATH" "system/*" -x "system/addon.d/*" "system/product/priv-app/VelvetTitan/*" "system/system_ext/priv-app/SetupWizard/*" -d "$WORK_DIR/gapps"; then
CLEAN_DOWNLOAD_GAPPS=1
@@ -867,7 +888,7 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
find "$WORK_DIR/gapps/" -maxdepth 1 -mindepth 1 -type d -exec sudo cp --preserve=all -r {} "$SYSTEM_MNT" \; || abort
- elif [ "$GAPPS_BRAND" = "MindTheGapps" ]; then
+ elif [ "$GAPPS_BRAND" = "MindTheGapps" ] || [ "$GAPPS_BRAND" = "LiteGapps" ]; then
sudo cp --preserve=all -r "$WORK_DIR/gapps/system_ext/"* "$SYSTEM_EXT_MNT/" || abort
if [ -e "$SYSTEM_EXT_MNT/priv-app/SetupWizard" ]; then
rm -rf "${SYSTEM_EXT_MNT:?}/priv-app/Provision"
@@ -888,6 +909,20 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
find "$WORK_DIR/gapps/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/priv-app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/etc/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/etc/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ elif [ "$GAPPS_BRAND" = "LiteGapps" ]; then
+ sudo setfattr -n security.selinux -v "u:object_r:system_file:s0" "$PRODUCT_MNT/framework" || abort
+ find "$WORK_DIR/gapps/product/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/product/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/priv-app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/product/framework/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/framework/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+
+ find "$WORK_DIR/gapps/product/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/product/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/priv-app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/product/framework/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/framework/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/system_ext/etc/permissions/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_EXT_MNT/etc/permissions/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+
+ find "$WORK_DIR/gapps/system_ext/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_EXT_MNT/priv-app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/system_ext/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_EXT_MNT/etc/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/system_ext/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_EXT_MNT/priv-app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
else
sudo setfattr -n security.selinux -v "u:object_r:system_file:s0" "$PRODUCT_MNT/framework" || abort
find "$WORK_DIR/gapps/product/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
@@ -981,7 +1016,7 @@ fi
if [ "$GAPPS_BRAND" = "none" ]; then
name2="-NoGApps"
else
- if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
+ if [ "$GAPPS_BRAND" = "OpenGApps" ] || [ "$GAPPS_BRAND" = "LiteGapps" ]; then
name2=-$GAPPS_BRAND-${ANDROID_API_MAP[$ANDROID_API]}-${GAPPS_VARIANT}
else
name2=-$GAPPS_BRAND-${ANDROID_API_MAP[$ANDROID_API]}
diff --git a/scripts/generateGappsLink.py b/scripts/generateGappsLink.py
index f07a2b1a2..65d8de894 100644
--- a/scripts/generateGappsLink.py
+++ b/scripts/generateGappsLink.py
@@ -78,6 +78,13 @@
ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
print(f"The current rate limit window resets in {ratelimit_reset}", flush=True)
exit(1)
+elif brand == "LiteGapps":
+ res = requests.get(
+ f'https://sourceforge.net/projects/litegapps/rss?path=/litegapps/{abi_map[arch]}/{android_api}/{variant}&limit=100')
+ matched = re.search(f'https://.*AUTO-LiteGapps-(?:{variant}-)?{abi_map[arch]}-{release}-v([\d.]+)-official\.zip/download', res.text, flags=re.IGNORECASE)
+ if matched:
+ link = matched.group().replace(
+ '.zip/download', '.zip').replace('sourceforge.net/projects/litegapps/files', 'downloads.sourceforge.net/project/litegapps')
print(f"download link: {link}", flush=True)
diff --git a/scripts/run.sh b/scripts/run.sh
index b2c1692a4..adac9b048 100755
--- a/scripts/run.sh
+++ b/scripts/run.sh
@@ -103,7 +103,8 @@ if (YesNoBox '([title]="Install GApps" [text]="Do you want to install GApps?")')
# GAPPS_BRAND=$(
# Radiolist '([title]="Which GApps do you want to install?"
# [default]="MindTheGapps")' \
- # 'MindTheGapps' "Recommend" 'on' \
+ # 'LiteGapps' "GApps provided by LiteGapps" 'off' \
+ # 'MindTheGapps' "GApps provided by MindTheGapps" 'on' \
# 'OpenGApps' "This flavor may cause startup failure" 'off'
# )
GAPPS_BRAND="MindTheGapps"
@@ -134,6 +135,21 @@ else
GAPPS_VARIANT=""
fi
+if [ "$GAPPS_BRAND" = "LiteGapps" ]; then
+ if [ "$DEBUG" = "1" ]; then
+ GAPPS_VARIANT=$(
+ Radiolist '([title]="Variants of GApps"
+ [default]="lite")' \
+ 'core' "" 'off' \
+ 'lite' "" 'on'
+ )
+ else
+ GAPPS_VARIANT=""
+ fi
+else
+ GAPPS_VARIANT=""
+fi
+
if (YesNoBox '([title]="Remove Amazon Appstore" [text]="Do you want to keep Amazon Appstore?")'); then
REMOVE_AMAZON=""
else