diff --git a/.gitignore b/.gitignore
index 6baed8f..af38087 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
download
output
python3-env
+token
diff --git a/arm64/gapps/product/etc/sysconfig/component-overrides.xml b/arm64/gapps/product/etc/sysconfig/component-overrides.xml
deleted file mode 100644
index 2720650..0000000
--- a/arm64/gapps/product/etc/sysconfig/component-overrides.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/arm64/gapps/product/overlay/GoogleWebViewOverlay.apk b/arm64/gapps/product/overlay/GoogleWebViewOverlay.apk
deleted file mode 100644
index cb6f5a3..0000000
Binary files a/arm64/gapps/product/overlay/GoogleWebViewOverlay.apk and /dev/null differ
diff --git a/arm64/system/priv-app/VpnDialogs/VpnDialogs.apk b/arm64/system/priv-app/VpnDialogs/VpnDialogs.apk
deleted file mode 100644
index c345c99..0000000
Binary files a/arm64/system/priv-app/VpnDialogs/VpnDialogs.apk and /dev/null differ
diff --git a/bin/aarch64/fuse.erofs b/bin/aarch64/fuse.erofs
deleted file mode 100755
index 462f9b4..0000000
Binary files a/bin/aarch64/fuse.erofs and /dev/null differ
diff --git a/bin/aarch64/mkfs.erofs b/bin/aarch64/mkfs.erofs
deleted file mode 100755
index 7ac3170..0000000
Binary files a/bin/aarch64/mkfs.erofs and /dev/null differ
diff --git a/bin/arm64/lspinit b/bin/arm64/lspinit
new file mode 100644
index 0000000..f46512b
Binary files /dev/null and b/bin/arm64/lspinit differ
diff --git a/bin/x64/lspinit b/bin/x64/lspinit
new file mode 100644
index 0000000..1775e81
Binary files /dev/null and b/bin/x64/lspinit differ
diff --git a/bin/x86_64/fuse.erofs b/bin/x86_64/fuse.erofs
deleted file mode 100755
index 472f926..0000000
Binary files a/bin/x86_64/fuse.erofs and /dev/null differ
diff --git a/bin/x86_64/mkfs.erofs b/bin/x86_64/mkfs.erofs
deleted file mode 100755
index e23b767..0000000
Binary files a/bin/x86_64/mkfs.erofs and /dev/null differ
diff --git a/installer/Install.ps1 b/installer/Install.ps1
index 9815c83..afb8626 100644
--- a/installer/Install.ps1
+++ b/installer/Install.ps1
@@ -13,7 +13,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2024 LSPosed Contributors
#
$Host.UI.RawUI.WindowTitle = "Installing MagiskOnWSA...."
@@ -48,11 +48,6 @@ Function Test-CommandExist {
} #end function Test-CommandExist
Function Finish {
- Clear-Host
- If (Test-CommandExist Optimize-VHD) {
- Write-Output "Optimizing VHDX size...."
- Optimize-VHD ".\*.vhdx" -Mode Full
- }
Clear-Host
Start-Process "wsa://com.topjohnwu.magisk"
Start-Process "wsa://com.android.vending"
diff --git a/linker/aarch64/libc.so b/linker/aarch64/libc.so
deleted file mode 100644
index 6f4ec47..0000000
Binary files a/linker/aarch64/libc.so and /dev/null differ
diff --git a/linker/aarch64/libdl.so b/linker/aarch64/libdl.so
deleted file mode 100644
index 15cfd68..0000000
Binary files a/linker/aarch64/libdl.so and /dev/null differ
diff --git a/linker/aarch64/libm.so b/linker/aarch64/libm.so
deleted file mode 100644
index c129e26..0000000
Binary files a/linker/aarch64/libm.so and /dev/null differ
diff --git a/linker/aarch64/linker64 b/linker/aarch64/linker64
deleted file mode 100755
index eeca0b8..0000000
Binary files a/linker/aarch64/linker64 and /dev/null differ
diff --git a/linker/x86_64/libc.so b/linker/x86_64/libc.so
deleted file mode 100644
index 748c48c..0000000
Binary files a/linker/x86_64/libc.so and /dev/null differ
diff --git a/linker/x86_64/libdl.so b/linker/x86_64/libdl.so
deleted file mode 100644
index 8b24897..0000000
Binary files a/linker/x86_64/libdl.so and /dev/null differ
diff --git a/linker/x86_64/libm.so b/linker/x86_64/libm.so
deleted file mode 100644
index 7bf99e8..0000000
Binary files a/linker/x86_64/libm.so and /dev/null differ
diff --git a/linker/x86_64/linker64 b/linker/x86_64/linker64
deleted file mode 100755
index 894beae..0000000
Binary files a/linker/x86_64/linker64 and /dev/null differ
diff --git a/scripts/build.sh b/scripts/build.sh
index f36e127..2d72d6a 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2024 LSPosed Contributors
#
if [ ! "$BASH_VERSION" ]; then
@@ -34,49 +34,12 @@ if [ "$TMPDIR" ] && [ ! -d "$TMPDIR" ]; then
fi
WORK_DIR=$(mktemp -d -t wsa-build-XXXXXXXXXX_) || exit 1
-# lowerdir
-ROOT_MNT_RO="$WORK_DIR/erofs"
-VENDOR_MNT_RO="$ROOT_MNT_RO/vendor"
-PRODUCT_MNT_RO="$ROOT_MNT_RO/product"
-SYSTEM_EXT_MNT_RO="$ROOT_MNT_RO/system_ext"
-
-# upperdir
-ROOT_MNT_RW="$WORK_DIR/upper"
-VENDOR_MNT_RW="$ROOT_MNT_RW/vendor"
-PRODUCT_MNT_RW="$ROOT_MNT_RW/product"
-SYSTEM_EXT_MNT_RW="$ROOT_MNT_RW/system_ext"
-SYSTEM_MNT_RW="$ROOT_MNT_RW/system"
-
-# merged
-ROOT_MNT="$WORK_DIR/system_root_merged"
-SYSTEM_MNT="$ROOT_MNT/system"
-VENDOR_MNT="$ROOT_MNT/vendor"
-PRODUCT_MNT="$ROOT_MNT/product"
-SYSTEM_EXT_MNT="$ROOT_MNT/system_ext"
-
-declare -A LOWER_PARTITION=(["zsystem"]="$ROOT_MNT_RO" ["vendor"]="$VENDOR_MNT_RO" ["product"]="$PRODUCT_MNT_RO" ["system_ext"]="$SYSTEM_EXT_MNT_RO")
-declare -A UPPER_PARTITION=(["zsystem"]="$SYSTEM_MNT_RW" ["vendor"]="$VENDOR_MNT_RW" ["product"]="$PRODUCT_MNT_RW" ["system_ext"]="$SYSTEM_EXT_MNT_RW")
-declare -A MERGED_PARTITION=(["zsystem"]="$ROOT_MNT" ["vendor"]="$VENDOR_MNT" ["product"]="$PRODUCT_MNT" ["system_ext"]="$SYSTEM_EXT_MNT")
DOWNLOAD_DIR=../download
DOWNLOAD_CONF_NAME=download.list
PYTHON_VENV_DIR="$(dirname "$PWD")/python3-env"
-EROFS_USE_FUSE=1
-umount_clean() {
- if [ -d "$ROOT_MNT" ] || [ -d "$ROOT_MNT_RO" ]; then
- echo "Cleanup Mount Directory"
- for PART in "${LOWER_PARTITION[@]}"; do
- sudo umount -v "$PART"
- done
- for PART in "${UPPER_PARTITION[@]}"; do
- sudo rm -rf "${PART:?}"
- done
- for PART in "${MERGED_PARTITION[@]}"; do
- sudo umount -v "$PART"
- done
- sudo rm -rf "${WORK_DIR:?}"
- else
- rm -rf "${WORK_DIR:?}"
- fi
+
+dir_clean() {
+ rm -rf "${WORK_DIR:?}"
if [ "$TMPDIR" ] && [ -d "$TMPDIR" ]; then
echo "Cleanup Temp Directory"
rm -rf "${TMPDIR:?}"
@@ -88,7 +51,7 @@ umount_clean() {
deactivate
fi
}
-trap umount_clean EXIT
+trap dir_clean EXIT
OUTPUT_DIR=../output
WSA_WORK_ENV="${WORK_DIR:?}/ENV"
if [ -f "$WSA_WORK_ENV" ]; then rm -f "${WSA_WORK_ENV:?}"; fi
@@ -104,7 +67,8 @@ clean_download() {
rm -f "${MAGISK_PATH:?}"
fi
if [ "$CLEAN_DOWNLOAD_GAPPS" ]; then
- rm -f "${GAPPS_PATH:?}"
+ rm -f "${GAPPS_IMAGE_PATH:?}"
+ rm -f "${GAPPS_RC_PATH:?}"
fi
if [ "$CLEAN_DOWNLOAD_KERNELSU" ]; then
rm -f "${KERNELSU_PATH:?}"
@@ -117,24 +81,19 @@ abort() {
echo "Build: an error has occurred, exit"
if [ -d "$WORK_DIR" ]; then
echo -e "\nCleanup Work Directory"
- umount_clean
+ dir_clean
fi
clean_download
exit 1
}
trap abort INT TERM
-Gen_Rand_Str() {
- head /dev/urandom | tr -dc '[:lower:]' | head -c"$1"
-}
-
default() {
ARCH=x64
RELEASE_TYPE=retail
MAGISK_VER=stable
- GAPPS_BRAND=MindTheGapps
- GAPPS_VARIANT=pico
ROOT_SOL=magisk
+ COMPRESS_FORMAT=none
}
exit_with_message() {
@@ -143,97 +102,6 @@ exit_with_message() {
exit 1
}
-resize_img() {
- sudo e2fsck -pf "$1" || return 1
- if [ "$2" ]; then
- sudo resize2fs "$1" "$2" || return 1
- else
- sudo resize2fs -M "$1" || return 1
- fi
- return 0
-}
-
-vhdx_to_raw_img() {
- qemu-img convert -q -f vhdx -O raw "$1" "$2" || return 1
- rm -f "$1" || return 1
-}
-
-check_image_type() {
- local type
- type=$(blkid -o value -s TYPE "$1")
- echo "$type"
-}
-
-mk_overlayfs() { # label lowerdir upperdir merged
- local context own
- local workdir="$WORK_DIR/worker/$1"
- local lowerdir="$2"
- local upperdir="$3"
- local merged="$4"
-
- echo "mk_overlayfs: label $1
- lowerdir=$lowerdir
- upperdir=$upperdir
- workdir=$workdir
- merged=$merged"
- case "$1" in
- vendor)
- context="u:object_r:vendor_file:s0"
- own="0:2000"
- ;;
- system)
- context="u:object_r:rootfs:s0"
- own="0:0"
- ;;
- *)
- context="u:object_r:system_file:s0"
- own="0:0"
- ;;
- esac
- sudo mkdir -p -m 755 "$workdir" "$upperdir" "$merged" || return 1
- sudo chown -R "$own" "$upperdir" "$workdir" "$merged" || return 1
- sudo setfattr -n security.selinux -v "$context" "$upperdir" || return 1
- sudo setfattr -n security.selinux -v "$context" "$workdir" || return 1
- sudo setfattr -n security.selinux -v "$context" "$merged" || return 1
- sudo mount -vt overlay overlay -olowerdir="$lowerdir",upperdir="$upperdir",workdir="$workdir" "$merged" || return 1
-}
-
-mk_image_umount() { # dir imgpath upperdir imgtype
- echo "mk_image_umount: $*"
- if [ "$4" = "erofs" ]; then
- sudo "../bin/$HOST_ARCH/mkfs.erofs" -zlz4hc -T1230768000 --chunksize=4096 --exclude-regex="lost+found" "$2"."$4" "$1" || abort "Failed to make image for $1"
- elif [ "$4" = "ext4" ]; then
- abort "Not yet implemented"
- fi
- sudo umount -v "$1"
- sudo rm -f "$2"
- sudo mv "$2"."$4" "$2"
- if [ -d "$3" ]; then
- sudo rm -rf "$3"
- fi
-}
-
-ro_ext4_img_to_rw() {
- resize_img "$1" "$(($(du --apparent-size -sB512 "$1" | cut -f1) * 2))"s || return 1
- e2fsck -fp -E unshare_blocks "$1" || return 1
- resize_img "$1" || return 1
- return 0
-}
-
-mount_erofs() {
- if [ "$EROFS_USE_FUSE" ]; then
- sudo "../bin/$HOST_ARCH/fuse.erofs" "$1" "$2" || return 1
- else
- sudo mount -v -t erofs -o ro,loop "$1" "$2" || return 1
- fi
-}
-
-# workaround for Debian
-# In Debian /usr/sbin is not in PATH and some utilities in there are in use
-[ -d /usr/sbin ] && export PATH="/usr/sbin:$PATH"
-# In Debian /etc/mtab is not exist
-[ -f /etc/mtab ] || sudo ln -s /proc/self/mounts /etc/mtab
-
ARCH_MAP=(
"x64"
"arm64"
@@ -254,24 +122,6 @@ MAGISK_VER_MAP=(
"release"
)
-GAPPS_BRAND_MAP=(
- "OpenGApps"
- "MindTheGapps"
- "none"
-)
-
-GAPPS_VARIANT_MAP=(
- "super"
- "stock"
- "full"
- "mini"
- "micro"
- "nano"
- "pico"
- "tvstock"
- "tvmini"
-)
-
ROOT_SOL_MAP=(
"magisk"
"kernelsu"
@@ -281,6 +131,7 @@ ROOT_SOL_MAP=(
COMPRESS_FORMAT_MAP=(
"7z"
"zip"
+ "none"
)
ARR_TO_STR() {
@@ -289,9 +140,7 @@ ARR_TO_STR() {
printf -v joined "%s, " "${arr[@]}"
echo "${joined%, }"
}
-GAPPS_PROPS_MSG1="\033[0;31mWARNING: Services such as the Play Store may stop working properly."
-GAPPS_PROPS_MSG2="We are not responsible for any problems caused by this!\033[0m"
-GAPPS_PROPS_MSG3="Info: https://support.google.com/android/answer/10248227"
+
usage() {
default
echo -e "
@@ -312,66 +161,44 @@ Usage:
Possible values: $(ARR_TO_STR "${MAGISK_VER_MAP[@]}")
Default: $MAGISK_VER
- --gapps-brand GApps brand.
- \"none\" for no integration of GApps
-
- Possible values: $(ARR_TO_STR "${GAPPS_BRAND_MAP[@]}")
- Default: $GAPPS_BRAND
-
- --gapps-variant GApps variant.
-
- Possible values: $(ARR_TO_STR "${GAPPS_VARIANT_MAP[@]}")
- Default: $GAPPS_VARIANT
-
--root-sol Root solution.
\"none\" means no root.
Possible values: $(ARR_TO_STR "${ROOT_SOL_MAP[@]}")
Default: $ROOT_SOL
- --compress-format
- Compress format of output file.
- If this option is not specified and --compress is not specified, the generated file will not be compressed
+ --compress-format Compress format of output file.
Possible values: $(ARR_TO_STR "${COMPRESS_FORMAT_MAP[@]}")
+ Default: $COMPRESS_FORMAT
Additional Options:
- --remove-amazon Remove Amazon Appstore from the system
- --compress Compress the WSA, The default format is 7z, you can use the format specified by --compress-format
--offline Build WSA offline
--magisk-custom Install custom Magisk
--skip-download-wsa Skip download WSA
- --debug Debug build mode
--help Show this help message and exit
- --nofix-props No fix \"build.prop\"
- $GAPPS_PROPS_MSG1
- $GAPPS_PROPS_MSG2
- $GAPPS_PROPS_MSG3
Example:
- ./build.sh --release-type RP --magisk-ver beta --gapps-variant pico --remove-amazon
- ./build.sh --arch arm64 --release-type WIF --gapps-brand OpenGApps --nofix-props
- ./build.sh --release-type WIS --gapps-brand none
- ./build.sh --offline --gapps-variant pico --magisk-custom
+ ./build.sh --release-type RP --magisk-ver beta
+ ./build.sh --arch arm64 --release-type WIF
+ ./build.sh --release-type WIS
+ ./build.sh --offline --magisk-custom
+ ./build.sh --release-type WIF --magisk-custom --magisk-ver release
"
}
ARGUMENT_LIST=(
+ "compress-format:"
"arch:"
"release-type:"
- "magisk-ver:"
- "gapps-brand:"
- "gapps-variant:"
- "nofix-props"
"root-sol:"
- "compress-format:"
- "remove-amazon"
- "compress"
- "offline"
+ "magisk-ver:"
"magisk-custom"
- "debug"
- "help"
+ "install-gapps"
+ "offline"
"skip-download-wsa"
+ "help"
+ "debug"
)
default
@@ -386,32 +213,58 @@ opts=$(
eval set --"$opts"
while [[ $# -gt 0 ]]; do
- case "$1" in
- --arch ) ARCH="$2"; shift 2 ;;
- --release-type ) RELEASE_TYPE="$2"; shift 2 ;;
- --gapps-brand ) GAPPS_BRAND="$2"; shift 2 ;;
- --gapps-variant ) GAPPS_VARIANT="$2"; shift 2 ;;
- --nofix-props ) NOFIX_PROPS="yes"; shift ;;
- --root-sol ) ROOT_SOL="$2"; shift 2 ;;
- --compress-format ) COMPRESS_FORMAT="$2"; shift 2 ;;
- --remove-amazon ) REMOVE_AMAZON="yes"; shift ;;
- --compress ) COMPRESS_OUTPUT="yes"; shift ;;
- --offline ) OFFLINE="on"; shift ;;
- --magisk-custom ) CUSTOM_MAGISK="debug"; shift ;;
- --magisk-ver ) MAGISK_VER="$2"; shift 2 ;;
- --debug ) DEBUG="on"; shift ;;
- --skip-download-wsa ) DOWN_WSA="no"; shift ;;
- --help ) usage; exit 0 ;;
- -- ) shift; break;;
- esac
+ case "$1" in
+ --compress-format)
+ COMPRESS_FORMAT="$2"
+ shift 2
+ ;;
+ --arch)
+ ARCH="$2"
+ shift 2
+ ;;
+ --release-type)
+ RELEASE_TYPE="$2"
+ shift 2
+ ;;
+ --root-sol)
+ ROOT_SOL="$2"
+ shift 2
+ ;;
+ --magisk-ver)
+ MAGISK_VER="$2"
+ shift 2
+ ;;
+ --magisk-custom)
+ CUSTOM_MAGISK=1
+ shift
+ ;;
+ --install-gapps)
+ HAS_GAPPS=1
+ shift
+ ;;
+ --offline)
+ OFFLINE=1
+ shift
+ ;;
+ --skip-download-wsa)
+ SKIP_DOWN_WSA=1
+ shift
+ ;;
+ --help)
+ usage
+ exit 0
+ ;;
+ --debug)
+ DEBUG=1
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
done
-if [ "$CUSTOM_MAGISK" ]; then
- if [ -z "$MAGISK_VER" ]; then
- MAGISK_VER=$CUSTOM_MAGISK
- fi
-fi
-
check_list() {
local input=$1
if [ -n "$input" ]; then
@@ -435,8 +288,6 @@ check_list() {
check_list "$ARCH" "Architecture" "${ARCH_MAP[@]}"
check_list "$RELEASE_TYPE" "Release Type" "${RELEASE_TYPE_MAP[@]}"
check_list "$MAGISK_VER" "Magisk Version" "${MAGISK_VER_MAP[@]}"
-check_list "$GAPPS_BRAND" "GApps Brand" "${GAPPS_BRAND_MAP[@]}"
-check_list "$GAPPS_VARIANT" "GApps Variant" "${GAPPS_VARIANT_MAP[@]}"
check_list "$ROOT_SOL" "Root Solution" "${ROOT_SOL_MAP[@]}"
check_list "$COMPRESS_FORMAT" "Compress Format" "${COMPRESS_FORMAT_MAP[@]}"
@@ -444,34 +295,27 @@ if [ "$DEBUG" ]; then
set -x
fi
-require_su() {
- if test "$(id -u)" != "0"; then
- if [ "$(sudo id -u)" != "0" ]; then
- abort "sudo is required to run this script"
- fi
- fi
-}
# shellcheck disable=SC1091
[ -f "$PYTHON_VENV_DIR/bin/activate" ] && {
source "$PYTHON_VENV_DIR/bin/activate" || abort "Failed to activate virtual environment, please re-run install_deps.sh"
}
declare -A RELEASE_NAME_MAP=(["retail"]="Retail" ["RP"]="Release Preview" ["WIS"]="Insider Slow" ["WIF"]="Insider Fast")
declare -A ANDROID_API_MAP=(["30"]="11.0" ["32"]="12.1" ["33"]="13.0")
+declare -A ARCH_NAME_MAP=(["x64"]="x86_64" ["arm64"]="arm64")
RELEASE_NAME=${RELEASE_NAME_MAP[$RELEASE_TYPE]} || abort
-
-echo -e "Build: RELEASE_TYPE=$RELEASE_NAME"
-
+echo -e "INFO: Release Name: $RELEASE_NAME\n"
WSA_ZIP_PATH=$DOWNLOAD_DIR/wsa-$RELEASE_TYPE.zip
vclibs_PATH="$DOWNLOAD_DIR/Microsoft.VCLibs.140.00_$ARCH.appx"
UWPVCLibs_PATH="$DOWNLOAD_DIR/Microsoft.VCLibs.140.00.UWPDesktop_$ARCH.appx"
xaml_PATH="$DOWNLOAD_DIR/Microsoft.UI.Xaml.2.8_$ARCH.appx"
MAGISK_ZIP=magisk-$MAGISK_VER.zip
MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
+CUST_PATH="$DOWNLOAD_DIR/cust.img"
if [ "$CUSTOM_MAGISK" ]; then
if [ ! -f "$MAGISK_PATH" ]; then
echo "Custom Magisk $MAGISK_ZIP not found"
MAGISK_ZIP=app-$MAGISK_VER.apk
- echo "Fallback to $MAGISK_ZIP"
+ echo -e "Fallback to $MAGISK_ZIP\n"
MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
if [ ! -f "$MAGISK_PATH" ]; then
abort "Custom Magisk $MAGISK_ZIP not found\nPlease put custom Magisk in $DOWNLOAD_DIR"
@@ -479,46 +323,77 @@ if [ "$CUSTOM_MAGISK" ]; then
fi
fi
ANDROID_API=33
-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
- else
- GAPPS_ZIP_NAME=$GAPPS_BRAND-$ARCH-${ANDROID_API_MAP[$ANDROID_API]}.zip
- fi
- GAPPS_PATH=$DOWNLOAD_DIR/$GAPPS_ZIP_NAME
+update_gapps_files_name() {
+ GAPPS_IMAGE_NAME=gapps-${ANDROID_API_MAP[$ANDROID_API]}-${ARCH_NAME_MAP[$ARCH]}.img
+ GAPPS_RC_NAME=gapps-${ANDROID_API_MAP[$ANDROID_API]}.rc
+ GAPPS_IMAGE_PATH=$DOWNLOAD_DIR/$GAPPS_IMAGE_NAME
+ GAPPS_RC_PATH=$DOWNLOAD_DIR/$GAPPS_RC_NAME
}
WSA_MAJOR_VER=0
+getKernelVersion() {
+ local bintype kernel_string kernel_version
+ bintype="$(file -b "$1")"
+ if [[ $bintype == *"version"* ]]; then
+ readarray -td '' kernel_string < <(awk '{ gsub(/, /,"\0"); print; }' <<<"$bintype, ")
+ unset 'kernel_string[-1]'
+ for i in "${kernel_string[@]}"; do
+ if [[ $i == *"version"* ]]; then
+ IFS=" " read -r -a kernel_string <<<"$i"
+ kernel_version="${kernel_string[1]}"
+ fi
+ done
+ else
+ IFS=" " read -r -a kernel_string <<<"$(strings "$1" | grep 'Linux version')"
+ kernel_version="${kernel_string[2]}"
+ fi
+ IFS=" " read -r -a arr <<<"${kernel_version//-/ }"
+ printf '%s' "${arr[0]}"
+}
update_ksu_zip_name() {
KERNEL_VER=""
- case "$WSA_MAJOR_VER" in
- "2305") KERNEL_VER="5.15.94.2";;
- "2306") KERNEL_VER="5.15.104.1";;
- "2307") KERNEL_VER="5.15.104.2";;
- "2308") KERNEL_VER="5.15.104.3";;
- "2309") KERNEL_VER="5.15.104.4";;
- *) abort "KernelSU is not supported in this WSA version: $WSA_MAJOR_VER"
- esac
+ if [ -f "$WORK_DIR/wsa/$ARCH/Tools/kernel" ]; then
+ KERNEL_VER=$(getKernelVersion "$WORK_DIR/wsa/$ARCH/Tools/kernel")
+ fi
KERNELSU_ZIP_NAME=kernelsu-$ARCH-$KERNEL_VER.zip
KERNELSU_PATH=$DOWNLOAD_DIR/$KERNELSU_ZIP_NAME
KERNELSU_INFO="$KERNELSU_PATH.info"
}
+
if [ -z ${OFFLINE+x} ]; then
- require_su
- if [ "$DOWN_WSA" != "no" ]; then
- echo "Generate Download Links"
+ echo "Generating WSA Download Links"
+ if [ -z ${SKIP_DOWN_WSA+x} ]; then
python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
- # shellcheck disable=SC1090
- source "$WSA_WORK_ENV" || abort
+ echo "Downloading WSA"
else
- echo "Generate Download Links"
- python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$DOWN_WSA" || abort
- WSA_MAJOR_VER=$(python3 getWSAMajorVersion.py "$ARCH" "$WSA_ZIP_PATH")
+ python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$SKIP_DOWN_WSA" || abort
+ echo "Skip download WSA, downloading WSA depends"
fi
- if [[ "$WSA_MAJOR_VER" -lt 2211 ]]; then
- ANDROID_API=32
+ if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_download.log" -x16 -s16 -j5 -c -R -m0 \
+ --async-dns=false --check-integrity=true --continue=true --allow-overwrite=true --conditional-get=true \
+ -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR/$DOWNLOAD_CONF_NAME"; then
+ abort "We have encountered an error while downloading files."
fi
- if [ "$ROOT_SOL" = "magisk" ] || [ "$GAPPS_BRAND" != "none" ]; then
+ rm -f "${DOWNLOAD_DIR:?}/$DOWNLOAD_CONF_NAME"
+fi
+
+echo "Extracting WSA"
+if [ -f "$WSA_ZIP_PATH" ]; then
+ if ! python3 extractWSA.py "$ARCH" "$WSA_ZIP_PATH" "$WORK_DIR" "$WSA_WORK_ENV"; then
+ CLEAN_DOWNLOAD_WSA=1
+ abort "Unzip WSA failed"
+ fi
+ echo -e "done\n"
+ # shellcheck disable=SC1090
+ source "$WSA_WORK_ENV" || abort
+else
+ abort "The WSA zip package does not exist"
+fi
+if [[ "$WSA_MAJOR_VER" -lt 2211 ]]; then
+ ANDROID_API=32
+fi
+if [ -z ${OFFLINE+x} ]; then
+ echo "Generating Download Links"
+ if [ "$HAS_GAPPS" ] || [ "$ROOT_SOL" = "magisk" ]; then
if [ -z ${CUSTOM_MAGISK+x} ]; then
python3 generateMagiskLink.py "$MAGISK_VER" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
fi
@@ -531,62 +406,42 @@ if [ -z ${OFFLINE+x} ]; then
# shellcheck disable=SC2153
echo "KERNELSU_VER=$KERNELSU_VER" >"$KERNELSU_INFO"
fi
- if [ "$GAPPS_BRAND" != "none" ]; then
- update_gapps_zip_name
- python3 generateGappsLink.py "$ARCH" "$GAPPS_BRAND" "$GAPPS_VARIANT" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$ANDROID_API" "$GAPPS_ZIP_NAME" || abort
+ if [ "$HAS_GAPPS" ]; then
+ update_gapps_files_name
+ python3 generateGappsLink.py "$ARCH" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$ANDROID_API" "$GAPPS_IMAGE_NAME" || abort
fi
-
- echo "Download Artifacts"
- if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_download.log" -x16 -s16 -j5 -c -R -m0 --async-dns=false --check-integrity=true --continue=true --allow-overwrite=true --conditional-get=true -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR/$DOWNLOAD_CONF_NAME"; then
- echo "We have encountered an error while downloading files."
- exit 1
- fi
-else # Offline mode
- WSA_MAJOR_VER=$(python3 getWSAMajorVersion.py "$ARCH" "$WSA_ZIP_PATH")
- if [[ "$WSA_MAJOR_VER" -lt 2211 ]]; then
- ANDROID_API=32
- fi
- declare -A FILES_CHECK_LIST=([WSA_ZIP_PATH]="$WSA_ZIP_PATH" [xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [UWPVCLibs_PATH]="$UWPVCLibs_PATH")
- if [ "$GAPPS_BRAND" != "none" ] || [ "$ROOT_SOL" = "magisk" ]; then
- FILES_CHECK_LIST+=(["MAGISK_PATH"]="$MAGISK_PATH")
- fi
- if [ "$ROOT_SOL" = "kernelsu" ]; then
- update_ksu_zip_name
- FILES_CHECK_LIST+=(["KERNELSU_PATH"]="$KERNELSU_PATH")
- fi
- if [ "$GAPPS_BRAND" != 'none' ]; then
- update_gapps_zip_name
- FILES_CHECK_LIST+=(["GAPPS_PATH"]="$GAPPS_PATH")
- fi
- for i in "${FILES_CHECK_LIST[@]}"; do
- if [ ! -f "$i" ]; then
- echo "Offline mode: missing [$i]."
- OFFLINE_ERR="1"
+ if [ -f "$DOWNLOAD_DIR/$DOWNLOAD_CONF_NAME" ]; then
+ echo "Downloading Artifacts"
+ if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_download.log" -x16 -s16 -j5 -c -R -m0 \
+ --async-dns=false --check-integrity=true --continue=true --allow-overwrite=true --conditional-get=true \
+ -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR/$DOWNLOAD_CONF_NAME"; then
+ abort "We have encountered an error while downloading files."
fi
- done
- if [ "$OFFLINE_ERR" ]; then
- echo "Offline mode: Some files are missing, please disable offline mode."
- exit 1
fi
- require_su
fi
-
-echo "Extract WSA"
-if [ -f "$WSA_ZIP_PATH" ]; then
- if ! python3 extractWSA.py "$ARCH" "$WSA_ZIP_PATH" "$WORK_DIR" "$WSA_WORK_ENV"; then
- CLEAN_DOWNLOAD_WSA=1
- abort "Unzip WSA failed, is the download incomplete?"
+declare -A FILES_CHECK_LIST=([xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [UWPVCLibs_PATH]="$UWPVCLibs_PATH")
+if [ "$HAS_GAPPS" ] || [ "$ROOT_SOL" = "magisk" ]; then
+ FILES_CHECK_LIST+=(["MAGISK_PATH"]="$MAGISK_PATH" ["CUST_PATH"]="$CUST_PATH")
+fi
+if [ "$ROOT_SOL" = "kernelsu" ]; then
+ update_ksu_zip_name
+ FILES_CHECK_LIST+=(["KERNELSU_PATH"]="$KERNELSU_PATH")
+fi
+if [ "$HAS_GAPPS" ]; then
+ update_gapps_files_name
+ FILES_CHECK_LIST+=(["GAPPS_IMAGE_PATH"]="$GAPPS_IMAGE_PATH" ["GAPPS_RC_PATH"]="$GAPPS_RC_PATH")
+fi
+for i in "${FILES_CHECK_LIST[@]}"; do
+ if [ ! -f "$i" ]; then
+ echo "Offline mode: missing [$i]"
+ FILE_MISSING="1"
fi
- echo -e "Extract done\n"
- # shellcheck disable=SC1090
- source "$WSA_WORK_ENV" || abort
-else
- echo "The WSA zip package does not exist, is the download incomplete?"
- exit 1
+done
+if [ "$FILE_MISSING" ]; then
+ abort "Some files are missing"
fi
-
-if [ "$GAPPS_BRAND" != "none" ] || [ "$ROOT_SOL" = "magisk" ]; then
- echo "Extract Magisk"
+if [ "$HAS_GAPPS" ] || [ "$ROOT_SOL" = "magisk" ]; then
+ echo "Extracting Magisk"
if [ -f "$MAGISK_PATH" ]; then
MAGISK_VERSION_NAME=""
MAGISK_VERSION_CODE=0
@@ -599,24 +454,41 @@ if [ "$GAPPS_BRAND" != "none" ] || [ "$ROOT_SOL" = "magisk" ]; then
if [ "$MAGISK_VERSION_CODE" -lt 26000 ] && [ "$MAGISK_VER" != "stable" ] && [ -z ${CUSTOM_MAGISK+x} ]; then
abort "Please install Magisk 26.0+"
fi
- sudo chmod +x "../linker/$HOST_ARCH/linker64" || abort
- sudo patchelf --set-interpreter "../linker/$HOST_ARCH/linker64" "$WORK_DIR/magisk/magiskpolicy" || abort
- chmod +x "$WORK_DIR/magisk/magiskpolicy" || abort
+ chmod +x "$WORK_DIR/magisk/magiskboot" || abort
elif [ -z "${CUSTOM_MAGISK+x}" ]; then
- echo "The Magisk zip package does not exist, is the download incomplete?"
- exit 1
+ abort "The Magisk zip package does not exist, is the download incomplete?"
else
- echo "The Magisk zip package does not exist, rename it to magisk-debug.zip and put it in the download folder."
- exit 1
+ abort "The Magisk zip package does not exist, rename it to magisk-debug.zip and put it in the download folder."
fi
echo -e "done\n"
fi
-if [ "$ROOT_SOL" = "kernelsu" ]; then
- update_ksu_zip_name
- echo "Extract KernelSU"
+if [ "$HAS_GAPPS" ] || [ "$ROOT_SOL" = "magisk" ]; then
+ echo "Integrating Magisk"
+ "$WORK_DIR/magisk/magiskboot" compress=xz "$WORK_DIR/magisk/magisk64" "$WORK_DIR/magisk/magisk64.xz"
+ "$WORK_DIR/magisk/magiskboot" compress=xz "$WORK_DIR/magisk/magisk32" "$WORK_DIR/magisk/magisk32.xz"
+ "$WORK_DIR/magisk/magiskboot" compress=xz "$MAGISK_PATH" "$WORK_DIR/magisk/stub.xz"
+ "$WORK_DIR/magisk/magiskboot" cpio "$WORK_DIR/wsa/$ARCH/Tools/initrd.img" \
+ "mv /init /wsainit" \
+ "add 0750 /lspinit ../bin/$ARCH/lspinit" \
+ "ln /lspinit /init" \
+ "add 0750 /magiskinit $WORK_DIR/magisk/magiskinit" \
+ "mkdir 0750 overlay.d" \
+ "mkdir 0750 overlay.d/sbin" \
+ "add 0644 overlay.d/sbin/magisk64.xz $WORK_DIR/magisk/magisk64.xz" \
+ "add 0644 overlay.d/sbin/magisk32.xz $WORK_DIR/magisk/magisk32.xz" \
+ "add 0644 overlay.d/sbin/stub.xz $WORK_DIR/magisk/stub.xz" \
+ "mkdir 000 .backup" \
+ "add 000 overlay.d/init.lsp.magisk.rc init.lsp.magisk.rc" \
+ "add 000 overlay.d/sbin/post-fs-data.sh post-fs-data.sh" \
+ "add 000 overlay.d/sbin/lsp_cust.img $CUST_PATH" \
+ || abort "Unable to patch initrd"
+elif [ "$ROOT_SOL" = "kernelsu" ]; then
+ echo "Extracting KernelSU"
# shellcheck disable=SC1090
source "${KERNELSU_INFO:?}" || abort
+ echo "WSA Kernel Version: $KERNEL_VER"
+ echo "KernelSU Version: $KERNELSU_VER"
if ! unzip "$KERNELSU_PATH" -d "$WORK_DIR/kernelsu"; then
CLEAN_DOWNLOAD_KERNELSU=1
abort "Unzip KernelSU failed, package is corrupted?"
@@ -626,339 +498,28 @@ if [ "$ROOT_SOL" = "kernelsu" ]; then
elif [ "$ARCH" = "arm64" ]; then
mv "$WORK_DIR/kernelsu/Image" "$WORK_DIR/kernelsu/kernel"
fi
- echo -e "done\n"
-fi
-
-if [ "$GAPPS_BRAND" != 'none' ]; then
- update_gapps_zip_name
- echo "Extract $GAPPS_BRAND"
- mkdir -p "$WORK_DIR/gapps" || abort
- if [ -f "$GAPPS_PATH" ]; then
- if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
- if ! unzip -p "$GAPPS_PATH" {Core,GApps}/'*.lz' | tar --lzip -C "$WORK_DIR/gapps" -xf - -i --strip-components=2 --exclude='setupwizardtablet-x86_64' --exclude='packageinstallergoogle-all' --exclude='speech-common' --exclude='markup-lib-arm' --exclude='markup-lib-arm64' --exclude='markup-all' --exclude='setupwizarddefault-x86_64' --exclude='pixellauncher-all' --exclude='pixellauncher-common'; then
- CLEAN_DOWNLOAD_GAPPS=1
- abort "Unzip OpenGApps failed, is the download incomplete?"
- 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
- abort "Unzip MindTheGapps failed, package is corrupted?"
- fi
- mv "$WORK_DIR/gapps/system/"* "$WORK_DIR/gapps" || abort
- rm -rf "${WORK_DIR:?}/gapps/system" || abort
- fi
- cp -r "../$ARCH/gapps/"* "$WORK_DIR/gapps" || abort
- else
- abort "The $GAPPS_BRAND zip package does not exist."
- fi
- echo -e "Extract done\n"
-fi
-
-if [ -f "$WORK_DIR/wsa/$ARCH/system.vhdx" ]; then
- VM_IMAGES_USE_VHDX=1
- echo "Convert vhdx to RAW image"
- vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
- vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/product.vhdx" "$WORK_DIR/wsa/$ARCH/product.img" || abort
- vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/system.vhdx" "$WORK_DIR/wsa/$ARCH/system.img" || abort
- vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/vendor.vhdx" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
- echo -e "Convert vhdx to RAW image done\n"
- SYSTEMIMAGES_FILE_SYSTEM_TYPE=$(check_image_type "$WORK_DIR/wsa/$ARCH/system.img")
- echo "Mount images"
- sudo mkdir -p -m 755 "$ROOT_MNT_RO" || abort
- sudo chown "0:0" "$ROOT_MNT_RO" || abort
- sudo setfattr -n security.selinux -v "u:object_r:rootfs:s0" "$ROOT_MNT_RO" || abort
- if [ "$SYSTEMIMAGES_FILE_SYSTEM_TYPE" = "ext4" ]; then
- sudo mount -vo loop,ro "$WORK_DIR/wsa/$ARCH/system.img" "$ROOT_MNT_RO" || abort
- sudo mount -vo loop,ro "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RO" || abort
- sudo mount -vo loop,ro "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RO" || abort
- sudo mount -vo loop,ro "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RO" || abort
- elif [ "$SYSTEMIMAGES_FILE_SYSTEM_TYPE" = "erofs" ]; then
- mount_erofs "$WORK_DIR/wsa/$ARCH/system.img" "$ROOT_MNT_RO" || abort
- mount_erofs "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RO" || abort
- mount_erofs "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RO" || abort
- mount_erofs "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RO" || abort
- else
- abort "Unknown file system type: $SYSTEMIMAGES_FILE_SYSTEM_TYPE"
- fi
- echo -e "done\n"
- echo "Create overlayfs"
- mk_overlayfs system "$ROOT_MNT_RO" "$SYSTEM_MNT_RW" "$ROOT_MNT" || abort
- mk_overlayfs vendor "$VENDOR_MNT_RO" "$VENDOR_MNT_RW" "$VENDOR_MNT" || abort
- mk_overlayfs product "$PRODUCT_MNT_RO" "$PRODUCT_MNT_RW" "$PRODUCT_MNT" || abort
- mk_overlayfs system_ext "$SYSTEM_EXT_MNT_RO" "$SYSTEM_EXT_MNT_RW" "$SYSTEM_EXT_MNT" || abort
- echo -e "Create overlayfs done\n"
-else
- echo "Calculate the required space"
- EXTRA_SIZE=10240
-
- SYSTEM_EXT_NEED_SIZE=$EXTRA_SIZE
- if [ -d "$WORK_DIR/gapps/system_ext" ]; then
- SYSTEM_EXT_NEED_SIZE=$((SYSTEM_EXT_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps/system_ext" | cut -f1)))
- fi
-
- PRODUCT_NEED_SIZE=$EXTRA_SIZE
- if [ -d "$WORK_DIR/gapps/product" ]; then
- PRODUCT_NEED_SIZE=$((PRODUCT_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps/product" | cut -f1)))
- fi
-
- SYSTEM_NEED_SIZE=$EXTRA_SIZE
- if [ -d "$WORK_DIR/gapps" ]; then
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps" | cut -f1) - PRODUCT_NEED_SIZE - SYSTEM_EXT_NEED_SIZE))
- fi
- if [ "$ROOT_SOL" = "magisk" ]; then
- if [ -d "$WORK_DIR/magisk" ]; then
- MAGISK_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/magisk/magisk" | cut -f1)
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + MAGISK_SIZE))
- fi
- if [ -f "$MAGISK_PATH" ]; then
- MAGISK_APK_SIZE=$(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1)
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + MAGISK_APK_SIZE))
- fi
- fi
- if [ -d "../$ARCH/system" ]; then
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1)))
- fi
- VENDOR_NEED_SIZE=$EXTRA_SIZE
- echo -e "done\n"
- echo "Expand images"
- SYSTEM_EXT_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/system_ext.img" | cut -f1)
- PRODUCT_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/product.img" | cut -f1)
- SYSTEM_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/system.img" | cut -f1)
- VENDOR_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/vendor.img" | cut -f1)
- SYSTEM_EXT_TARGET_SIZE=$((SYSTEM_EXT_NEED_SIZE * 2 + SYSTEM_EXT_IMG_SIZE))
- PRODUCT_TAGET_SIZE=$((PRODUCT_NEED_SIZE * 2 + PRODUCT_IMG_SIZE))
- SYSTEM_TAGET_SIZE=$((SYSTEM_IMG_SIZE * 2))
- VENDOR_TAGET_SIZE=$((VENDOR_NEED_SIZE * 2 + VENDOR_IMG_SIZE))
-
- resize_img "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_TARGET_SIZE"s || abort
- resize_img "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_TAGET_SIZE"s || abort
- resize_img "$WORK_DIR/wsa/$ARCH/system.img" "$SYSTEM_TAGET_SIZE"s || abort
- resize_img "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_TAGET_SIZE"s || abort
-
- echo -e "Expand images done\n"
-
- echo "Mount images"
- sudo mkdir "$ROOT_MNT" || abort
- sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system.img" "$ROOT_MNT" || abort
- sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT" || abort
- sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT" || abort
- sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT" || abort
- echo -e "done\n"
-fi
-if [ "$REMOVE_AMAZON" ]; then
- echo "Remove Amazon Appstore"
- find "${PRODUCT_MNT:?}"/{etc/permissions,etc/sysconfig,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | sudo xargs rm -rf
- find "${SYSTEM_EXT_MNT:?}"/{etc/*permissions,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | sudo xargs rm -rf
- rm -f "$WORK_DIR/wsa/$ARCH/apex/mado_release.apex"
- find "${PRODUCT_MNT:?}"/{apex,etc/*permissions} 2>/dev/null | grep -e mado | sudo xargs rm -rf
- echo -e "done\n"
-fi
-
-echo "Add device administration features"
-sudo sed -ie '/cts/a \ ' -e '/print/i \ ' "$VENDOR_MNT/etc/permissions/windows.permissions.xml"
-sudo setfattr -n security.selinux -v "u:object_r:vendor_configs_file:s0" "$VENDOR_MNT/etc/permissions/windows.permissions.xml" || abort
-echo -e "done\n"
-
-if [ "$ROOT_SOL" = 'magisk' ]; then
- echo "Integrate Magisk"
- sudo cp "$WORK_DIR/magisk/magisk/"* "$ROOT_MNT/debug_ramdisk/"
- sudo cp "$MAGISK_PATH" "$ROOT_MNT/debug_ramdisk/stub.apk" || abort
- sudo tee -a "$ROOT_MNT/debug_ramdisk/loadpolicy.sh" </dev/null || abort
-#!/system/bin/sh
-MAGISKTMP=/debug_ramdisk
-export MAGISKTMP
-mkdir -p /data/adb/magisk
-cp \$MAGISKTMP/* /data/adb/magisk/
-sync
-chmod -R 755 /data/adb/magisk
-restorecon -R /data/adb/magisk
-MAKEDEV=1 \$MAGISKTMP/magisk --preinit-device 2>&1
-RULESCMD=""
-for r in \$MAGISKTMP/.magisk/preinit/*/sepolicy.rule; do
- [ -f "\$r" ] || continue
- RULESCMD="\$RULESCMD --apply \$r"
-done
-\$MAGISKTMP/magiskpolicy --live \$RULESCMD 2>&1
-EOF
- sudo find "$ROOT_MNT/debug_ramdisk" -type f -exec chmod 0711 {} \;
- sudo find "$ROOT_MNT/debug_ramdisk" -type f -exec chown root:root {} \;
- sudo find "$ROOT_MNT/debug_ramdisk" -type f -exec setfattr -n security.selinux -v "u:object_r:magisk_file:s0" {} \; || abort
- echo "/debug_ramdisk(/.*)? u:object_r:magisk_file:s0" | sudo tee -a "$VENDOR_MNT/etc/selinux/vendor_file_contexts"
- echo '/data/adb/magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a "$VENDOR_MNT/etc/selinux/vendor_file_contexts"
- sudo LD_LIBRARY_PATH="../linker/$HOST_ARCH" "$WORK_DIR/magisk/magiskpolicy" --load "$VENDOR_MNT/etc/selinux/precompiled_sepolicy" --save "$VENDOR_MNT/etc/selinux/precompiled_sepolicy" --magisk || abort
- NEW_INITRC_DIR=$SYSTEM_MNT/etc/init/hw
- sudo tee -a "$SYSTEM_MNT/etc/init/hw/init.rc" </dev/null
-on post-fs-data
- mkdir /dev/debug_ramdisk_mirror
- mount none /debug_ramdisk /dev/debug_ramdisk_mirror bind
- mount none none /dev/debug_ramdisk_mirror private
- mount tmpfs magisk /debug_ramdisk mode=0755
- copy /dev/debug_ramdisk_mirror/magisk64 /debug_ramdisk/magisk64
- chmod 0755 /debug_ramdisk/magisk64
- symlink ./magisk64 /debug_ramdisk/magisk
- symlink ./magisk64 /debug_ramdisk/su
- symlink ./magisk64 /debug_ramdisk/resetprop
- start adbd
- copy /dev/debug_ramdisk_mirror/magisk32 /debug_ramdisk/magisk32
- chmod 0755 /debug_ramdisk/magisk32
- copy /dev/debug_ramdisk_mirror/magiskinit /debug_ramdisk/magiskinit
- chmod 0750 /debug_ramdisk/magiskinit
- copy /dev/debug_ramdisk_mirror/magiskpolicy /debug_ramdisk/magiskpolicy
- chmod 0755 /debug_ramdisk/magiskpolicy
- mkdir /debug_ramdisk/.magisk
- mkdir /debug_ramdisk/.magisk/mirror 0
- mkdir /debug_ramdisk/.magisk/block 0
- mkdir /debug_ramdisk/.magisk/worker 0
- copy /dev/debug_ramdisk_mirror/stub.apk /debug_ramdisk/stub.apk
- chmod 0644 /debug_ramdisk/stub.apk
- copy /dev/debug_ramdisk_mirror/loadpolicy.sh /debug_ramdisk/loadpolicy.sh
- chmod 0755 /debug_ramdisk/loadpolicy.sh
- umount /dev/debug_ramdisk_mirror
- rmdir /dev/debug_ramdisk_mirror
- exec u:r:magisk:s0 0 0 -- /system/bin/sh /debug_ramdisk/loadpolicy.sh
- exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --post-fs-data
-
-on property:vold.decrypt=trigger_restart_framework
- exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --service
-
-on nonencrypted
- exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --service
-
-on property:sys.boot_completed=1
- exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --boot-complete
-
-on property:init.svc.zygote=stopped
- exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --zygote-restart
-EOF
-
-for i in "$NEW_INITRC_DIR"/*; do
- if [[ "$i" =~ init.zygote.+\.rc ]]; then
- echo "Inject zygote restart $i"
- sudo awk -i inplace '{if($0 ~ /service zygote /){print $0;print " exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --zygote-restart";a="";next}} 1' "$i"
- sudo setfattr -n security.selinux -v "u:object_r:system_file:s0" "$i" || abort
- fi
-done
-
- echo -e "Integrate Magisk done\n"
-elif [ "$ROOT_SOL" = "kernelsu" ]; then
echo "Integrate KernelSU"
mv "$WORK_DIR/wsa/$ARCH/Tools/kernel" "$WORK_DIR/wsa/$ARCH/Tools/kernel_origin"
cp "$WORK_DIR/kernelsu/kernel" "$WORK_DIR/wsa/$ARCH/Tools/kernel"
- echo -e "Integrate KernelSU done\n"
fi
-
-echo "Add extra packages"
-sudo cp -r "../$ARCH/system/"* "$SYSTEM_MNT" || abort
-find "../$ARCH/system/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/priv-app/placeholder" -type d -exec chmod 0755 {} \;
-find "../$ARCH/system/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/priv-app/placeholder" -type f -exec chmod 0644 {} \;
-find "../$ARCH/system/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/priv-app/placeholder" -exec chown root:root {} \;
-find "../$ARCH/system/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/priv-app/placeholder" -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
-echo -e "Add extra packages done\n"
-
-if [ "$GAPPS_BRAND" != 'none' ]; then
- echo "Integrate $GAPPS_BRAND"
- find "$WORK_DIR/gapps/" -mindepth 1 -type d -exec sudo chmod 0755 {} \;
- find "$WORK_DIR/gapps/" -mindepth 1 -type d -exec sudo chown root:root {} \;
- file_list="$(find "$WORK_DIR/gapps/" -mindepth 1 -type f)"
- for file in $file_list; do
- sudo chown root:root "$file"
- sudo chmod 0644 "$file"
- done
-
- 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
- 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"
- fi
- fi
- sudo cp --preserve=all -r "$WORK_DIR/gapps/product/"* "$PRODUCT_MNT" || abort
-
- find "$WORK_DIR/gapps/product/overlay" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/overlay/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/product/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/etc/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/product/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/etc/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
-
- if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
- find "$WORK_DIR/gapps/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/framework/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/framework/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/priv-app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/framework/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/framework/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- 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
- 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
- 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
-
- sudo setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" "$PRODUCT_MNT/lib" || abort
- find "$WORK_DIR/gapps/product/lib/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/lib/placeholder" -exec setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/product/lib64/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/lib64/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_lib_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
- fi
-
- sudo LD_LIBRARY_PATH="../linker/$HOST_ARCH" "$WORK_DIR/magisk/magiskpolicy" --load "$VENDOR_MNT/etc/selinux/precompiled_sepolicy" --save "$VENDOR_MNT/etc/selinux/precompiled_sepolicy" "allow gmscore_app gmscore_app vsock_socket { create connect write read }" "allow gmscore_app device_config_runtime_native_boot_prop file read" "allow gmscore_app system_server_tmpfs dir search" "allow gmscore_app system_server_tmpfs file open" "allow gmscore_app system_server_tmpfs filesystem getattr" "allow gmscore_app gpu_device dir search" "allow gmscore_app media_rw_data_file filesystem getattr" || abort
- echo -e "Integrate $GAPPS_BRAND done\n"
-fi
-
-if [ "$GAPPS_BRAND" != 'none' ]; then
- if [ "$NOFIX_PROPS" ]; then
- echo -e "Skip fix $GAPPS_BRAND prop!\n$GAPPS_PROPS_MSG1\n$GAPPS_PROPS_MSG2\n$GAPPS_PROPS_MSG3\n"
- else
- echo "Fix $GAPPS_BRAND prop"
- sudo python3 fixGappsProp.py "$ROOT_MNT" || abort
+echo -e "done\n"
+if [ "$HAS_GAPPS" ]; then
+ update_gapps_files_name
+ if [ -f "$GAPPS_IMAGE_PATH" ] && [ -f "$GAPPS_RC_PATH" ]; then
+ echo "Integrating GApps"
+ "$WORK_DIR/magisk/magiskboot" cpio "$WORK_DIR/wsa/$ARCH/Tools/initrd.img" \
+ "add 000 /lspolicy.rule sepolicy.rule" \
+ "add 000 overlay.d/gapps.rc $GAPPS_RC_PATH" \
+ "add 000 overlay.d/sbin/lsp_gapps.img $GAPPS_IMAGE_PATH" \
+ || abort "Unable to patch initrd"
echo -e "done\n"
+ else
+ abort "The GApps package does not exist."
fi
fi
-if [ "$VM_IMAGES_USE_VHDX" ]; then
- echo "Create system images"
- mk_image_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RW" "$SYSTEMIMAGES_FILE_SYSTEM_TYPE" || abort
- mk_image_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RW" "$SYSTEMIMAGES_FILE_SYSTEM_TYPE" || abort
- mk_image_umount "$SYSTEM_EXT_MNT" "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RW" "$SYSTEMIMAGES_FILE_SYSTEM_TYPE" || abort
- mk_image_umount "$ROOT_MNT" "$WORK_DIR/wsa/$ARCH/system.img" "$SYSTEM_MNT_RW" "$SYSTEMIMAGES_FILE_SYSTEM_TYPE" || abort
- echo -e "Create system images done\n"
- echo "Umount images"
- sudo umount -v "$VENDOR_MNT_RO"
- sudo umount -v "$PRODUCT_MNT_RO"
- sudo umount -v "$SYSTEM_EXT_MNT_RO"
- sudo umount -v "$ROOT_MNT_RO"
- echo -e "done\n"
- echo "Convert images to vhdx"
- qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/system_ext.img" "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" || abort
- qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/product.img" "$WORK_DIR/wsa/$ARCH/product.vhdx" || abort
- qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/system.img" "$WORK_DIR/wsa/$ARCH/system.vhdx" || abort
- qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/vendor.img" "$WORK_DIR/wsa/$ARCH/vendor.vhdx" || abort
- rm -f "$WORK_DIR/wsa/$ARCH/"*.img || abort
- echo -e "Convert images to vhdx done\n"
-else
- echo "Umount images"
- sudo find "$ROOT_MNT" -exec touch -ht 200901010000.00 {} \;
- sudo umount -v "$VENDOR_MNT"
- sudo umount -v "$PRODUCT_MNT"
- sudo umount -v "$SYSTEM_EXT_MNT"
- sudo umount -v "$ROOT_MNT"
- echo -e "done\n"
- echo "Shrink images"
- resize_img "$WORK_DIR/wsa/$ARCH/system.img" || abort
- resize_img "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
- resize_img "$WORK_DIR/wsa/$ARCH/product.img" || abort
- resize_img "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
- echo -e "Shrink images done\n"
-fi
-
-echo "Remove signature and add scripts"
-sudo rm -rf "${WORK_DIR:?}"/wsa/"$ARCH"/\[Content_Types\].xml "$WORK_DIR/wsa/$ARCH/AppxBlockMap.xml" "$WORK_DIR/wsa/$ARCH/AppxSignature.p7x" "$WORK_DIR/wsa/$ARCH/AppxMetadata" || abort
+echo "Removing signature and add scripts"
+rm -rf "${WORK_DIR:?}"/wsa/"$ARCH"/\[Content_Types\].xml "$WORK_DIR/wsa/$ARCH/AppxBlockMap.xml" "$WORK_DIR/wsa/$ARCH/AppxSignature.p7x" "$WORK_DIR/wsa/$ARCH/AppxMetadata" || abort
cp "$vclibs_PATH" "$xaml_PATH" "$WORK_DIR/wsa/$ARCH" || abort
cp "$UWPVCLibs_PATH" "$xaml_PATH" "$WORK_DIR/wsa/$ARCH" || abort
cp "../bin/$ARCH/makepri.exe" "$WORK_DIR/wsa/$ARCH" || abort
@@ -967,9 +528,7 @@ cp ../installer/MakePri.ps1 "$WORK_DIR/wsa/$ARCH" || abort
cp ../installer/Install.ps1 "$WORK_DIR/wsa/$ARCH" || abort
cp ../installer/Run.bat "$WORK_DIR/wsa/$ARCH" || abort
find "$WORK_DIR/wsa/$ARCH" -maxdepth 1 -mindepth 1 -printf "%P\n" >"$WORK_DIR/wsa/$ARCH/filelist.txt" || abort
-echo -e "Remove signature and add scripts done\n"
-
-echo "Generate info"
+echo -e "done\n"
if [[ "$ROOT_SOL" = "none" ]]; then
name1=""
@@ -978,59 +537,36 @@ elif [ "$ROOT_SOL" = "magisk" ]; then
elif [ "$ROOT_SOL" = "kernelsu" ]; then
name1="-with-$ROOT_SOL-$KERNELSU_VER"
fi
-if [ "$GAPPS_BRAND" = "none" ]; then
+if [ -z "$HAS_GAPPS" ]; then
name2="-NoGApps"
else
- if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
- name2=-$GAPPS_BRAND-${ANDROID_API_MAP[$ANDROID_API]}-${GAPPS_VARIANT}
- else
- name2=-$GAPPS_BRAND-${ANDROID_API_MAP[$ANDROID_API]}
- fi
- if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
- echo -e "\033[0;31m:warning: Since $GAPPS_BRAND doesn't officially support Android 12.1 and 13 yet, lock the variant to pico!
- $GAPPS_BRAND may cause startup failure
- \033[0m"
- fi
+ name2=-GApps-${ANDROID_API_MAP[$ANDROID_API]}
fi
artifact_name=WSA_${WSA_VER}_${ARCH}_${WSA_REL}${name1}${name2}
-if [ "$NOFIX_PROPS" = "yes" ]; then
- artifact_name+="-NoFixProps"
-fi
-if [ "$REMOVE_AMAZON" = "yes" ]; then
- artifact_name+="-RemovedAmazon"
-fi
-echo "$artifact_name"
-echo -e "\nFinishing building...."
+
if [ -f "$OUTPUT_DIR" ]; then
- sudo rm -rf ${OUTPUT_DIR:?}
+ rm -rf ${OUTPUT_DIR:?}
fi
if [ ! -d "$OUTPUT_DIR" ]; then
mkdir -p "$OUTPUT_DIR"
fi
OUTPUT_PATH="${OUTPUT_DIR:?}/$artifact_name"
-if [ "$COMPRESS_OUTPUT" ] || [ -n "$COMPRESS_FORMAT" ]; then
+if [ "$COMPRESS_FORMAT" != "none" ]; then
mv "$WORK_DIR/wsa/$ARCH" "$WORK_DIR/wsa/$artifact_name"
- if [ -z "$COMPRESS_FORMAT" ]; then
- COMPRESS_FORMAT="7z"
- fi
if [ -n "$COMPRESS_FORMAT" ]; then
FILE_EXT=".$COMPRESS_FORMAT"
OUTPUT_PATH="$OUTPUT_PATH$FILE_EXT"
fi
rm -f "${OUTPUT_PATH:?}" || abort
if [ "$COMPRESS_FORMAT" = "7z" ]; then
- echo "Compressing with 7z"
+ echo "Compressing with 7z to $OUTPUT_PATH"
7z a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
elif [ "$COMPRESS_FORMAT" = "zip" ]; then
- echo "Compressing with zip"
+ echo "Compressing with zip to $OUTPUT_PATH"
7z -tzip a "$OUTPUT_PATH" "$WORK_DIR/wsa/$artifact_name" || abort
fi
else
rm -rf "${OUTPUT_PATH:?}" || abort
+ echo "Copying to $OUTPUT_PATH"
cp -r "$WORK_DIR/wsa/$ARCH" "$OUTPUT_PATH" || abort
fi
-echo -e "done\n"
-
-echo "Cleanup Work Directory"
-sudo rm -rf "${WORK_DIR:?}"
-echo "done"
diff --git a/scripts/extractMagisk.py b/scripts/extractMagisk.py
index 15ded6a..b5a80df 100644
--- a/scripts/extractMagisk.py
+++ b/scripts/extractMagisk.py
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2024 LSPosed Contributors
#
import sys
@@ -47,9 +47,8 @@ is_x86_64 = platform.machine() in ("AMD64", "x86_64")
host_abi = "x64" if is_x86_64 else "arm64"
arch = sys.argv[1]
magisk_zip = sys.argv[2]
-workdir = Path(sys.argv[3]) / "magisk"
-if not Path(workdir).is_dir():
- workdir.mkdir()
+workdir = Path(sys.argv[3])
+workdir.mkdir(parents=True, exist_ok=True)
abi_map = {"x64": ["x86_64", "x86"], "arm64": ["arm64-v8a", "armeabi-v7a"]}
@@ -65,40 +64,14 @@ with zipfile.ZipFile(magisk_zip) as zip:
versionName = props.get("version")
versionCode = props.get("versionCode")
print(f"Magisk version: {versionName} ({versionCode})", flush=True)
- with open(os.environ['WSA_WORK_ENV'], 'r') as environ_file:
- env = Prop(environ_file.read())
- env.MAGISK_VERSION_NAME = versionName
- env.MAGISK_VERSION_CODE = versionCode
- with open(os.environ['WSA_WORK_ENV'], 'w') as environ_file:
- environ_file.write(str(env))
- extract_as(
- zip, f"lib/{ abi_map[arch][0] }/libmagisk64.so", "magisk64", "magisk")
- extract_as(
- zip, f"lib/{ abi_map[arch][1] }/libmagisk32.so", "magisk32", "magisk")
- standalone_policy = False
- try:
- zip.getinfo(f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so")
- standalone_policy = True
- except:
- pass
- extract_as(
- zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskinit", "magisk")
- if standalone_policy:
- extract_as(
- zip, f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so", "magiskpolicy", "magisk")
- else:
- extract_as(
- zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskpolicy", "magisk")
- extract_as(
- zip, f"lib/{ abi_map[arch][0] }/libmagiskboot.so", "magiskboot", "magisk")
- extract_as(
- zip, f"lib/{ abi_map[arch][0] }/libbusybox.so", "busybox", "magisk")
- if standalone_policy:
- extract_as(
- zip, f"lib/{ abi_map[host_abi][0] }/libmagiskpolicy.so", "magiskpolicy", ".")
- else:
- extract_as(
- zip, f"lib/{ abi_map[host_abi][0] }/libmagiskinit.so", "magiskpolicy", ".")
- extract_as(zip, f"assets/boot_patch.sh", "boot_patch.sh", "magisk")
- extract_as(zip, f"assets/util_functions.sh",
- "util_functions.sh", "magisk")
+ if 'WSA_WORK_ENV' in os.environ and Path(os.environ['WSA_WORK_ENV']).is_file():
+ with open(os.environ['WSA_WORK_ENV'], 'r') as environ_file:
+ env = Prop(environ_file.read())
+ env.MAGISK_VERSION_NAME = versionName
+ env.MAGISK_VERSION_CODE = versionCode
+ with open(os.environ['WSA_WORK_ENV'], 'w') as environ_file:
+ environ_file.write(str(env))
+ extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagisk64.so", "magisk64", "magisk")
+ extract_as(zip, f"lib/{ abi_map[arch][1] }/libmagisk32.so", "magisk32", "magisk")
+ extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskinit", "magisk")
+ extract_as(zip, f"lib/{ abi_map[host_abi][0] }/libmagiskboot.so", "magiskboot", "magisk")
diff --git a/scripts/extractWSA.py b/scripts/extractWSA.py
index e933383..e564042 100644
--- a/scripts/extractWSA.py
+++ b/scripts/extractWSA.py
@@ -79,6 +79,10 @@ with zipfile.ZipFile(wsa_zip_path) as zip:
if not Path(workdir / zip_name).is_file():
print(f"unzipping {zip_name} to {workdir}", flush=True)
zip_path = zip.extract(f, workdir)
+ with zipfile.ZipFile(zip_path) as zip:
+ stat = Path(zip_path).stat()
+ print(f"unzipping from {zip_path}", flush=True)
+ zip.extractall(archdir)
ver_no = zip_name.split("_")
long_ver = ver_no[1]
ver = long_ver.split(".")
@@ -106,7 +110,3 @@ with zipfile.ZipFile(wsa_zip_path) as zip:
l.extract(g, xmldir)
elif re.search(u'Images/.+\.png', g.filename):
l.extract(g, archdir)
-with zipfile.ZipFile(zip_path) as zip:
- stat = Path(zip_path).stat()
- print(f"unzipping from {zip_path}", flush=True)
- zip.extractall(archdir)
diff --git a/scripts/fixGappsProp.py b/scripts/fixGappsProp.py
deleted file mode 100644
index 300b7e2..0000000
--- a/scripts/fixGappsProp.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python3
-#
-# This file is part of MagiskOnWSALocal.
-#
-# MagiskOnWSALocal is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# MagiskOnWSALocal is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with MagiskOnWSALocal. If not, see .
-#
-# Copyright (C) 2023 LSPosed Contributors
-#
-
-from __future__ import annotations
-from io import TextIOWrapper
-from typing import OrderedDict
-from pathlib import Path
-import sys
-class Prop(OrderedDict):
- def __init__(self, file: TextIOWrapper) -> None:
- super().__init__()
- for i, line in enumerate(file.read().splitlines(False)):
- if '=' in line:
- k, v = line.split('=', 1)
- self[k] = v
- else:
- self[f".{i}"] = line
-
- def __str__(self) -> str:
- return '\n'.join([v if k.startswith('.') else f"{k}={v}" for k, v in self.items()])
-
- def __iadd__(self, other: str) -> Prop:
- self[f".{len(self)}"] = other
- return self
-
-
-new_props = {
- ("product", "brand"): "google",
- ("product", "manufacturer"): "Google",
- ("build", "product"): "redfin",
- ("product", "name"): "redfin",
- ("product", "device"): "redfin",
- ("product", "model"): "Pixel 5",
- ("build", "flavor"): "redfin-user"
-}
-
-
-def description(sec: str, p: Prop) -> str:
- return f"{p[f'ro.{sec}.build.flavor']} {p[f'ro.{sec}.build.version.release_or_codename']} {p[f'ro.{sec}.build.id']} {p[f'ro.{sec}.build.version.incremental']} {p[f'ro.{sec}.build.tags']}"
-
-
-def fingerprint(sec: str, p: Prop) -> str:
- return f"""{p[f"ro.product.{sec}.brand"]}/{p[f"ro.product.{sec}.name"]}/{p[f"ro.product.{sec}.device"]}:{p[f"ro.{sec}.build.version.release"]}/{p[f"ro.{sec}.build.id"]}/{p[f"ro.{sec}.build.version.incremental"]}:{p[f"ro.{sec}.build.type"]}/{p[f"ro.{sec}.build.tags"]}"""
-
-
-def fix_prop(sec, prop):
- if not Path(prop).is_file():
- return
-
- print(f"fixing {prop}", flush=True)
- with open(prop, 'r') as f:
- p = Prop(f)
-
- p += "# extra prop added by MagiskOnWSA"
-
- for k, v in new_props.items():
- p[f"ro.{k[0]}.{k[1]}"] = v
-
- if k[0] == "build":
- p[f"ro.{sec}.{k[0]}.{k[1]}"] = v
- elif k[0] == "product":
- p[f"ro.{k[0]}.{sec}.{k[1]}"] = v
-
- p["ro.build.description"] = description(sec, p)
- p[f"ro.build.fingerprint"] = fingerprint(sec, p)
- p[f"ro.{sec}.build.description"] = description(sec, p)
- p[f"ro.{sec}.build.fingerprint"] = fingerprint(sec, p)
- p[f"ro.bootimage.build.fingerprint"] = fingerprint(sec, p)
-
- with open(prop, 'w') as f:
- f.write(str(p))
-
-
-sys_path = sys.argv[1]
-for sec, prop in {"system": sys_path+"/system/build.prop", "product": sys_path+"/product/build.prop", "system_ext": sys_path+"/system_ext/build.prop", "vendor": sys_path+"/vendor/build.prop", "odm": sys_path+"/vendor/odm/etc/build.prop"}.items():
- fix_prop(sec, prop)
diff --git a/scripts/generateGappsLink.py b/scripts/generateGappsLink.py
index f07a2b1..addaa36 100644
--- a/scripts/generateGappsLink.py
+++ b/scripts/generateGappsLink.py
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2024 LSPosed Contributors
#
from datetime import datetime
@@ -26,62 +26,54 @@ import json
import re
from pathlib import Path
+
+class BearerAuth(requests.auth.AuthBase):
+ def __init__(self, token):
+ self.token = token
+
+ def __call__(self, r):
+ r.headers["authorization"] = "Bearer " + self.token
+ return r
+
+
+github_auth = None
+if Path.cwd().joinpath('token').exists():
+ with open(Path.cwd().joinpath('token'), 'r') as token_file:
+ github_auth = BearerAuth(token_file.read())
+ print("Using token file for authentication", flush=True)
arch = sys.argv[1]
-brand = sys.argv[2]
-variant = sys.argv[3]
-arg4 = sys.argv[4]
-download_dir = Path.cwd().parent / "download" if arg4 == "" else Path(arg4)
-tempScript = sys.argv[5]
-android_api = sys.argv[6]
-file_name = sys.argv[7]
-print(f"Generating {brand} download link: arch={arch} variant={variant}", flush=True)
+arg2 = sys.argv[2]
+download_dir = Path.cwd().parent / "download" if arg2 == "" else Path(arg2)
+tempScript = sys.argv[3]
+android_api = sys.argv[4]
+file_name = sys.argv[5]
+print(f"Generating GApps download link: arch={arch}", flush=True)
abi_map = {"x64": "x86_64", "arm64": "arm64"}
android_api_map = {"30": "11.0", "32": "12.1", "33": "13.0"}
release = android_api_map[android_api]
-if brand == "OpenGApps":
- try:
- res = requests.get(f"https://api.opengapps.org/list")
- j = json.loads(res.content)
- link = {i["name"]: i for i in j["archs"][abi_map[arch]]
- ["apis"][release]["variants"]}[variant]["zip"]
- DATE = j["archs"][abi_map[arch]]["date"]
- print(f"DATE={DATE}", flush=True)
- except Exception:
- print("Failed to fetch from OpenGApps API, fallbacking to SourceForge RSS...")
- res = requests.get(
- f'https://sourceforge.net/projects/opengapps/rss?path=/{abi_map[arch]}&limit=100')
- link = re.search(f'https://.*{abi_map[arch]}/.*{release}.*{variant}.*\.zip/download', res.text).group().replace(
- '.zip/download', '.zip').replace('sourceforge.net/projects/opengapps/files', 'downloads.sourceforge.net/project/opengapps')
-elif brand == "MindTheGapps":
- res = requests.get(
- f'https://sourceforge.net/projects/wsa-mtg/rss?path=/{abi_map[arch]}&limit=100')
- matched = re.search(f'https://.*{release}.*{abi_map[arch]}.*\.zip/download', res.text)
- if matched:
- link = matched.group().replace(
- '.zip/download', '.zip').replace('sourceforge.net/projects/wsa-mtg/files', 'downloads.sourceforge.net/project/wsa-mtg')
- else:
- print(f"Failed to fetch from SourceForge RSS, fallbacking to Github API...", flush=True)
- res = requests.get(f"https://api.github.com/repos/MindTheGapps/{release}.0-{abi_map[arch]}/releases/latest")
- json_data = json.loads(res.content)
- headers = res.headers
- x_ratelimit_remaining = headers["x-ratelimit-remaining"]
- if res.status_code == 200:
- assets = json_data["assets"]
- for asset in assets:
- if re.match(f'.*{release}.*{abi_map[arch]}.*\.zip$', asset["name"]) and asset["content_type"] == "application/zip":
- link = asset["browser_download_url"]
- break
- elif res.status_code == 403 and x_ratelimit_remaining == '0':
- message = json_data["message"]
- print(f"Github API Error: {message}", flush=True)
- ratelimit_reset = headers["x-ratelimit-reset"]
- ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
- print(f"The current rate limit window resets in {ratelimit_reset}", flush=True)
- exit(1)
-
-print(f"download link: {link}", flush=True)
-
-with open(download_dir/tempScript, 'a') as f:
- f.writelines(f'{link}\n')
- f.writelines(f' dir={download_dir}\n')
- f.writelines(f' out={file_name}\n')
+res = requests.get(f"https://api.github.com/repos/LSPosed/WSA-Addon/releases/latest", auth=github_auth)
+json_data = json.loads(res.content)
+headers = res.headers
+x_ratelimit_remaining = headers["x-ratelimit-remaining"]
+if res.status_code == 200:
+ download_files = {}
+ assets = json_data["assets"]
+ for asset in assets:
+ if re.match(f'gapps.*{release}.*\.rc$', asset["name"]):
+ download_files[asset["name"]] = asset["browser_download_url"]
+ elif re.match(f'gapps.*{release}.*{abi_map[arch]}.*\.img$', asset["name"]):
+ download_files[asset["name"]] = asset["browser_download_url"]
+ with open(download_dir/tempScript, 'a') as f:
+ for key, value in download_files.items():
+ print(f"download link: {value}\npath: {download_dir / key}\n", flush=True)
+ f.writelines(value + '\n')
+ f.writelines(f' dir={download_dir}\n')
+ f.writelines(f' out={key}\n')
+elif res.status_code == 403 and x_ratelimit_remaining == '0':
+ message = json_data["message"]
+ print(f"Github API Error: {message}", flush=True)
+ ratelimit_reset = headers["x-ratelimit-reset"]
+ ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
+ print(
+ f"The current rate limit window resets in {ratelimit_reset}", flush=True)
+ exit(1)
diff --git a/scripts/generateKernelSULink.py b/scripts/generateKernelSULink.py
index 3c36bd9..2650d7f 100644
--- a/scripts/generateKernelSULink.py
+++ b/scripts/generateKernelSULink.py
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2024 LSPosed Contributors
#
from datetime import datetime
@@ -27,6 +27,7 @@ import requests
import json
import re
from pathlib import Path
+from packaging import version
class Prop(OrderedDict):
@@ -53,20 +54,34 @@ tempScript = sys.argv[3]
kernelVersion = sys.argv[4]
file_name = sys.argv[5]
abi_map = {"x64": "x86_64", "arm64": "arm64"}
-print(f"Generating KernelSU download link: arch={abi_map[arch]}, kernel version={kernelVersion}", flush=True)
-res = requests.get(f"https://api.github.com/repos/tiann/KernelSU/releases/latest")
+print(
+ f"Generating KernelSU download link: arch={abi_map[arch]}, kernel version={kernelVersion}", flush=True)
+res = requests.get(
+ f"https://api.github.com/repos/tiann/KernelSU/releases/latest")
json_data = json.loads(res.content)
headers = res.headers
x_ratelimit_remaining = headers["x-ratelimit-remaining"]
+kernel_ver = 0
if res.status_code == 200:
link = ""
assets = json_data["assets"]
for asset in assets:
- if re.match(f'kernel-WSA-{abi_map[arch]}-{kernelVersion}.*\.zip$', asset["name"]) and asset["content_type"] == "application/zip":
+ asset_name = asset["name"]
+ if re.match(f'kernel-WSA-{abi_map[arch]}-{kernelVersion}.*\.zip$', asset_name) and asset["content_type"] == "application/zip":
+ tmp_kernel_ver = re.search(
+ u'\d{1}.\d{1,}.\d{1,}.\d{1,}', asset_name.split("-")[3]).group()
+ if (kernel_ver == 0):
+ kernel_ver = tmp_kernel_ver
+ elif version.parse(kernel_ver) < version.parse(tmp_kernel_ver):
+ kernel_ver = tmp_kernel_ver
+ print(f"Kernel version: {kernel_ver}", flush=True)
+ for asset in assets:
+ if re.match(f'kernel-WSA-{abi_map[arch]}-{kernel_ver}.*\.zip$', asset["name"]) and asset["content_type"] == "application/zip":
link = asset["browser_download_url"]
break
if link == "":
- print(f"Error: No KernelSU release found for arch={abi_map[arch]}, kernel version={kernelVersion}", flush=True)
+ print(
+ f"Error: No KernelSU release found for arch={abi_map[arch]}, kernel version={kernelVersion}", flush=True)
exit(1)
release_name = json_data["name"]
with open(os.environ['WSA_WORK_ENV'], 'r') as environ_file:
@@ -79,7 +94,8 @@ elif res.status_code == 403 and x_ratelimit_remaining == '0':
print(f"Github API Error: {message}", flush=True)
ratelimit_reset = headers["x-ratelimit-reset"]
ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
- print(f"The current rate limit window resets in {ratelimit_reset}", flush=True)
+ print(
+ f"The current rate limit window resets in {ratelimit_reset}", flush=True)
exit(1)
print(f"download link: {link}", flush=True)
diff --git a/scripts/generateMagiskLink.py b/scripts/generateMagiskLink.py
index 1fbffba..2dcf14e 100644
--- a/scripts/generateMagiskLink.py
+++ b/scripts/generateMagiskLink.py
@@ -18,29 +18,73 @@
# Copyright (C) 2023 LSPosed Contributors
#
+from datetime import datetime
+import re
import sys
import json
import requests
from pathlib import Path
+
+class BearerAuth(requests.auth.AuthBase):
+ def __init__(self, token):
+ self.token = token
+
+ def __call__(self, r):
+ r.headers["authorization"] = "Bearer " + self.token
+ return r
+
+
+github_auth = None
+if Path.cwd().joinpath('token').exists():
+ with open(Path.cwd().joinpath('token'), 'r') as token_file:
+ github_auth = BearerAuth(token_file.read())
+ print("Using token file for authentication", flush=True)
+
magisk_ver = sys.argv[1]
-download_dir = Path.cwd().parent / "download" if sys.argv[2] == "" else Path(sys.argv[2])
+download_dir = Path.cwd().parent / \
+ "download" if sys.argv[2] == "" else Path(sys.argv[2])
tempScript = sys.argv[3]
-print(f"Generating Magisk download link: release type={magisk_ver}", flush=True)
+download_files = {}
+print(
+ f"Generating Magisk download link: release type={magisk_ver}", flush=True)
if not magisk_ver:
magisk_ver = "stable"
if magisk_ver == "stable" or magisk_ver == "beta" or magisk_ver == "canary" or magisk_ver == "debug":
try:
magisk_link = json.loads(requests.get(
f"https://github.com/topjohnwu/magisk-files/raw/master/{magisk_ver}.json").content)['magisk']['link']
+ download_files[f"magisk-{magisk_ver}.zip"] = magisk_link
except Exception:
print("Failed to fetch from GitHub API, fallbacking to jsdelivr...")
magisk_link = json.loads(requests.get(
f"https://fastly.jsdelivr.net/gh/topjohnwu/magisk-files@master/{magisk_ver}.json").content)['magisk']['link']
-print(f"download link: {magisk_link}", flush=True)
+ download_files[f"magisk-{magisk_ver}.zip"] = magisk_link
+res = requests.get(
+ f"https://api.github.com/repos/LSPosed/WSA-Addon/releases/latest", auth=github_auth)
+json_data = json.loads(res.content)
+headers = res.headers
+x_ratelimit_remaining = headers["x-ratelimit-remaining"]
+if res.status_code == 200:
+ assets = json_data["assets"]
+ for asset in assets:
+ if re.match(f'cust.img$', asset["name"]):
+ download_files[asset["name"]] = asset["browser_download_url"]
+ break
+elif res.status_code == 403 and x_ratelimit_remaining == '0':
+ message = json_data["message"]
+ print(f"Github API Error: {message}", flush=True)
+ ratelimit_reset = headers["x-ratelimit-reset"]
+ ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
+ print(
+ f"The current rate limit window resets in {ratelimit_reset}", flush=True)
+ exit(1)
with open(download_dir/tempScript, 'a') as f:
- f.writelines(f'{magisk_link}\n')
- f.writelines(f' dir={download_dir}\n')
- f.writelines(f' out=magisk-{magisk_ver}.zip\n')
+ for key, value in download_files.items():
+ print(
+ f"download link: {value}\npath: {download_dir / key}\n", flush=True)
+ f.writelines(value + '\n')
+ f.writelines(f' dir={download_dir}\n')
+ f.writelines(f' out={key}\n')
diff --git a/scripts/generateWSALinks.py b/scripts/generateWSALinks.py
index 5286b5e..66db1bc 100644
--- a/scripts/generateWSALinks.py
+++ b/scripts/generateWSALinks.py
@@ -15,12 +15,11 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2024 LSPosed Contributors
#
import html
import logging
-import os
import re
import sys
@@ -61,7 +60,7 @@ download_dir = Path.cwd().parent / \
"download" if sys.argv[3] == "" else Path(sys.argv[3])
ms_account_conf = download_dir/".ms_account"
tempScript = sys.argv[4]
-skip_wsa_download = sys.argv[5] == "no" if len(sys.argv) >= 6 else False
+skip_wsa_download = sys.argv[5] == "1" if len(sys.argv) >= 6 else False
cat_id = '858014f3-3934-4abe-8078-4aa193e74ca8'
user = ''
session = Session()
@@ -70,7 +69,8 @@ if ms_account_conf.is_file():
with open(ms_account_conf, "r") as f:
conf = Prop(f.read())
user = conf.get('user_code')
-print(f"Generating WSA download link: arch={arch} release_type={release_name}\n", flush=True)
+print(
+ f"Generating WSA download link: arch={arch} release_type={release_name}\n", flush=True)
with open(Path.cwd().parent / ("xml/GetCookie.xml"), "r") as f:
cookie_content = f.read().format(user)
@@ -146,8 +146,9 @@ threads = []
wsa_build_ver = 0
for filename, values in identities.items():
if re.match(f"MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle", filename):
- tmp_wsa_build_ver = re.search(u'\d{4}.\d{5}.\d{1,}.\d{1,}', filename).group()
- if(wsa_build_ver == 0):
+ tmp_wsa_build_ver = re.search(
+ u'\d{4}.\d{5}.\d{1,}.\d{1,}', filename).group()
+ if (wsa_build_ver == 0):
wsa_build_ver = tmp_wsa_build_ver
elif version.parse(wsa_build_ver) < version.parse(tmp_wsa_build_ver):
wsa_build_ver = tmp_wsa_build_ver
@@ -162,25 +163,21 @@ for filename, values in identities.items():
out_file_name = f"{values[1]}_{arch}.appx"
out_file = download_dir / out_file_name
elif not skip_wsa_download and re.match(f"MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle", filename):
- tmp_wsa_build_ver = re.search(u'\d{4}.\d{5}.\d{1,}.\d{1,}', filename).group()
- if(wsa_build_ver != tmp_wsa_build_ver):
+ tmp_wsa_build_ver = re.search(
+ u'\d{4}.\d{5}.\d{1,}.\d{1,}', filename).group()
+ if (wsa_build_ver != tmp_wsa_build_ver):
continue
version_splitted = wsa_build_ver.split(".")
major_ver = version_splitted[0]
minor_ver = version_splitted[1]
build_ver = version_splitted[2]
revision_ver = version_splitted[3]
- with open(os.environ['WSA_WORK_ENV'], 'r') as environ_file:
- env = Prop(environ_file.read())
- env.WSA_VER = wsa_build_ver
- env.WSA_MAJOR_VER = major_ver
- with open(os.environ['WSA_WORK_ENV'], 'w') as environ_file:
- environ_file.write(str(env))
out_file_name = f"wsa-{release_type}.zip"
out_file = download_dir / out_file_name
else:
continue
- th = Thread(target=send_req, args=(values[0][0], values[0][1], out_file_name))
+ th = Thread(target=send_req, args=(
+ values[0][0], values[0][1], out_file_name))
threads.append(th)
th.daemon = True
th.start()
diff --git a/scripts/getWSAMajorVersion.py b/scripts/getWSAMajorVersion.py
deleted file mode 100644
index f10ce26..0000000
--- a/scripts/getWSAMajorVersion.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/python3
-#
-# This file is part of MagiskOnWSALocal.
-#
-# MagiskOnWSALocal is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# MagiskOnWSALocal is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with MagiskOnWSALocal. If not, see .
-#
-# Copyright (C) 2023 LSPosed Contributors
-#
-
-import sys
-
-import zipfile
-from pathlib import Path
-
-arch = sys.argv[1]
-
-zip_name = ""
-wsa_zip_path= Path(sys.argv[2])
-
-with zipfile.ZipFile(wsa_zip_path) as zip:
- for f in zip.filelist:
- if arch in f.filename.lower():
- zip_name = f.filename
- break
-ver_no = zip_name.split("_")
-long_ver = ver_no[1]
-ver = long_ver.split(".")
-major_ver = ver[0]
-print(major_ver)
diff --git a/scripts/init.lsp.magisk.rc b/scripts/init.lsp.magisk.rc
new file mode 100644
index 0000000..444331e
--- /dev/null
+++ b/scripts/init.lsp.magisk.rc
@@ -0,0 +1,2 @@
+on post-fs-data
+ exec u:r:magisk:s0 0 0 -- /system/bin/sh ${MAGISKTMP}/post-fs-data.sh
diff --git a/scripts/post-fs-data.sh b/scripts/post-fs-data.sh
new file mode 100644
index 0000000..6607569
--- /dev/null
+++ b/scripts/post-fs-data.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+MAGISKTMP=/sbin
+[ -d /sbin ] || MAGISKTMP=/debug_ramdisk
+MAGISKBIN=/data/adb/magisk
+if [ ! -d /data/adb ]; then
+ mkdir -m 700 /data/adb
+ chcon u:object_r:adb_data_file:s0 /data/adb
+fi
+if [ ! -d $MAGISKBIN ]; then
+ # shellcheck disable=SC2174
+ mkdir -p -m 755 $MAGISKBIN
+ chcon u:object_r:system_file:s0 $MAGISKBIN
+fi
+ABI=$(getprop ro.product.cpu.abi)
+for file in busybox magiskpolicy magiskboot magiskinit; do
+ [ -x "$MAGISKBIN/$file" ] || {
+ unzip -d $MAGISKBIN -oj $MAGISKTMP/stub.apk "lib/$ABI/lib$file.so"
+ mv $MAGISKBIN/lib$file.so $MAGISKBIN/$file
+ chmod 755 "$MAGISKBIN/$file"
+ }
+done
+for file in util_functions.sh boot_patch.sh; do
+ [ -x "$MAGISKBIN/$file" ] || {
+ unzip -d $MAGISKBIN -oj $MAGISKTMP/stub.apk "assets/$file"
+ chmod 755 "$MAGISKBIN/$file"
+ }
+done
+for file in "$MAGISKTMP"/*; do
+ if echo "$file" | grep -Eq "lsp_.+\.img"; then
+ foldername=$(basename "$file" .img)
+ mkdir -p "$MAGISKTMP/$foldername"
+ mount -t auto -o ro,loop "$file" "$MAGISKTMP/$foldername"
+ "$MAGISKTMP/$foldername/post-fs-data.sh" &
+ fi
+done
+wait
+for file in "$MAGISKTMP"/*; do
+ if echo "$file" | grep -Eq "lsp_.+\.img"; then
+ foldername=$(basename "$file" .img)
+ umount "$MAGISKTMP/$foldername"
+ rm -rf "${MAGISKTMP:?}/${foldername:?}"
+ rm -f "$file"
+ fi
+done
diff --git a/scripts/sepolicy.rule b/scripts/sepolicy.rule
new file mode 100644
index 0000000..265b4de
--- /dev/null
+++ b/scripts/sepolicy.rule
@@ -0,0 +1,5 @@
+allow gmscore_app gmscore_app vsock_socket { create connect write read }
+allow gmscore_app device_config_runtime_native_boot_prop file read
+allow gmscore_app system_server_tmpfs dir search
+allow gmscore_app system_server_tmpfs file open
+allow gmscore_app { system_server_tmpfs media_rw_data_file } filesystem getattr
diff --git a/x64/gapps/product/etc/sysconfig/component-overrides.xml b/x64/gapps/product/etc/sysconfig/component-overrides.xml
deleted file mode 100644
index 2720650..0000000
--- a/x64/gapps/product/etc/sysconfig/component-overrides.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/x64/gapps/product/overlay/GoogleWebViewOverlay.apk b/x64/gapps/product/overlay/GoogleWebViewOverlay.apk
deleted file mode 100644
index cb6f5a3..0000000
Binary files a/x64/gapps/product/overlay/GoogleWebViewOverlay.apk and /dev/null differ
diff --git a/x64/system/priv-app/VpnDialogs/VpnDialogs.apk b/x64/system/priv-app/VpnDialogs/VpnDialogs.apk
deleted file mode 100644
index c345c99..0000000
Binary files a/x64/system/priv-app/VpnDialogs/VpnDialogs.apk and /dev/null differ