דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. WSA + crt netfree + netspark

WSA + crt netfree + netspark

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 2 כותבים 349 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • A0533057932A מנותק
    A0533057932A מנותק
    A0533057932
    כתב ב נערך לאחרונה על ידי
    #1

    כרגע פרוייקט גיטאהב הראשי https://github.com/LSPosed/MagiskOnWSALocal
    משתמש לבניית הWSA בקוד הבא

    #!/bin/bash
    #
    # 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 <https://www.gnu.org/licenses/>.
    #
    # Copyright (C) 2023 LSPosed Contributors
    #
    
    if [ ! "$BASH_VERSION" ]; then
        echo "Please do not use sh to run this script, just execute it directly" 1>&2
        exit 1
    fi
    HOST_ARCH=$(uname -m)
    if [ "$HOST_ARCH" != "x86_64" ] && [ "$HOST_ARCH" != "aarch64" ]; then
        echo "Unsupported architectures: $HOST_ARCH"
        exit 1
    fi
    cd "$(dirname "$0")" || exit 1
    # export TMPDIR=$(dirname "$PWD")/WORK_DIR_
    if [ "$TMPDIR" ] && [ ! -d "$TMPDIR" ]; then
        mkdir -p "$TMPDIR"
    fi
    WORK_DIR=$(mktemp -d -t wsa-build-XXXXXXXXXX_) || exit 1
    MOUNT_DIR="$WORK_DIR"/system
    SUDO="$(which sudo 2>/dev/null)"
    if [ -z "$SUDO" ]; then
        unset SUDO
    fi
    DOWNLOAD_DIR=../download
    DOWNLOAD_CONF_NAME=download.list
    umount_clean() {
        if [ -d "$MOUNT_DIR" ]; then
            echo "Cleanup Mount Directory"
            if [ -d "$MOUNT_DIR/vendor" ]; then
                $SUDO umount -v "$MOUNT_DIR"/vendor
            fi
            if [ -d "$MOUNT_DIR/product" ]; then
                $SUDO umount -v "$MOUNT_DIR"/product
            fi
            if [ -d "$MOUNT_DIR/system_ext" ]; then
                $SUDO umount -v "$MOUNT_DIR"/system_ext
            fi
            $SUDO umount -v "$MOUNT_DIR"
            $SUDO rm -rf "${WORK_DIR:?}"
        else
            rm -rf "${WORK_DIR:?}"
        fi
        if [ "$TMPDIR" ] && [ -d "$TMPDIR" ]; then
            echo "Cleanup Temp Directory"
            rm -rf "${TMPDIR:?}"
            unset TMPDIR
        fi
        rm -f "${DOWNLOAD_DIR:?}/$DOWNLOAD_CONF_NAME"
    }
    trap umount_clean EXIT
    OUTPUT_DIR=../output
    WSA_WORK_ENV="${WORK_DIR:?}"/ENV
    if [ -f "$WSA_WORK_ENV" ]; then rm -f "${WSA_WORK_ENV:?}"; fi
    touch "$WSA_WORK_ENV"
    export WSA_WORK_ENV
    clean_download() {
        if [ -d "$DOWNLOAD_DIR" ]; then
            echo "Cleanup Download Directory"
            if [ "$CLEAN_DOWNLOAD_WSA" ]; then
                rm -f "${WSA_ZIP_PATH:?}"
            fi
            if [ "$CLEAN_DOWNLOAD_MAGISK" ]; then
                rm -f "${MAGISK_PATH:?}"
            fi
            if [ "$CLEAN_DOWNLOAD_GAPPS" ]; then
                rm -f "${GAPPS_PATH:?}"
            fi
        fi
    }
    abort() {
        echo "Build: an error has occurred, exit"
        if [ -d "$WORK_DIR" ]; then
            echo -e "\nCleanup Work Directory"
            umount_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
    }
    
    exit_with_message() {
        echo "ERROR: $1"
        usage
        exit 1
    }
    
    ARCH_MAP=(
        "x64"
        "arm64"
    )
    
    RELEASE_TYPE_MAP=(
        "retail"
        "RP"
        "WIS"
        "WIF"
    )
    
    MAGISK_VER_MAP=(
        "stable"
        "beta"
        "canary"
        "debug"
        "release"
    )
    
    GAPPS_BRAND_MAP=(
        "OpenGApps"
        "MindTheGapps"
        "none"
    )
    
    GAPPS_VARIANT_MAP=(
        "super"
        "stock"
        "full"
        "mini"
        "micro"
        "nano"
        "pico"
        "tvstock"
        "tvmini"
    )
    
    ROOT_SOL_MAP=(
        "magisk"
        "none"
    )
    
    COMPRESS_FORMAT_MAP=(
        "7z"
        "xz"
        "zip"
    )
    
    ARR_TO_STR() {
        local arr=("$@")
        local joined
        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 "
    Usage:
        --arch              Architecture of WSA.
    
                            Possible values: $(ARR_TO_STR "${ARCH_MAP[@]}")
                            Default: $ARCH
    
        --release-type      Release type of WSA.
                            RP means Release Preview, WIS means Insider Slow, WIF means Insider Fast.
    
                            Possible values: $(ARR_TO_STR "${RELEASE_TYPE_MAP[@]}")
                            Default: $RELEASE_TYPE
    
        --magisk-ver        Magisk version.
    
                            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
    
                            Possible values: $(ARR_TO_STR "${COMPRESS_FORMAT_MAP[@]}")
    
    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
        "
    }
    
    ARGUMENT_LIST=(
        "arch:"
        "release-type:"
        "magisk-ver:"
        "gapps-brand:"
        "gapps-variant:"
        "nofix-props"
        "root-sol:"
        "compress-format:"
        "remove-amazon"
        "compress"
        "offline"
        "magisk-custom"
        "debug"
        "help"
        "skip-download-wsa"
    )
    
    default
    
    opts=$(
        getopt \
            --longoptions "$(printf "%s," "${ARGUMENT_LIST[@]}")" \
            --name "$(basename "$0")" \
            --options "" \
            -- "$@"
    ) || exit_with_message "Failed to parse options, please check your input"
    
    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
    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
            local name=$2
            shift
            local arr=("$@")
            local list_count=${#arr[@]}
            for i in "${arr[@]}"; do
                if [ "$input" == "$i" ]; then
                    echo "INFO: $name: $input"
                    break
                fi
                ((list_count--))
                if (("$list_count" <= 0)); then
                    exit_with_message "Invalid $name: $input"
                fi
            done
        fi
    }
    
    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[@]}"
    
    if [ "$DEBUG" ]; then
        set -x
    fi
    
    require_su() {
        if test "$(id -u)" != "0"; then
            if [ -z "$SUDO" ] || [ "$($SUDO id -u)" != "0" ]; then
                echo "ROOT/SUDO is required to run this script"
                abort
            fi
        fi
    }
    
    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")
    RELEASE_NAME=${RELEASE_NAME_MAP[$RELEASE_TYPE]} || abort
    
    echo -e "Build: RELEASE_TYPE=$RELEASE_NAME"
    
    WSA_ZIP_PATH=$DOWNLOAD_DIR/wsa-$RELEASE_TYPE.zip
    vclibs_PATH=$DOWNLOAD_DIR/Microsoft.VCLibs."$ARCH".14.00.Desktop.appx
    xaml_PATH=$DOWNLOAD_DIR/Microsoft.UI.Xaml_"$ARCH".appx
    MAGISK_ZIP=magisk-$MAGISK_VER.zip
    MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
    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"
            MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
            if [ ! -f "$MAGISK_PATH" ]; then
                echo -e "Custom Magisk $MAGISK_ZIP not found\nPlease put custom Magisk in $DOWNLOAD_DIR"
                abort
            fi
        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_zip_name
    if [ -z "${OFFLINE+x}" ]; then
        require_su
        if [ "${DOWN_WSA}" != "no" ]; then
            echo "Generate Download Links"
            python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
            # shellcheck disable=SC1091
            source "${WORK_DIR:?}/ENV" || abort
        else
            DOWN_WSA_MAIN_VERSION=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH")
        fi
        if [[ "$DOWN_WSA_MAIN_VERSION" -lt 2211 ]]; then
            ANDROID_API=32
            update_gapps_zip_name
        fi
        if [ -z "${CUSTOM_MAGISK+x}" ]; then
            python3 generateMagiskLink.py "$MAGISK_VER" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
        fi
        if [ "$GAPPS_BRAND" != "none" ]; then
            python3 generateGappsLink.py "$ARCH" "$GAPPS_BRAND" "$GAPPS_VARIANT" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$ANDROID_API" "$GAPPS_ZIP_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
        DOWN_WSA_MAIN_VERSION=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH")
        if [[ "$DOWN_WSA_MAIN_VERSION" -lt 2211 ]]; then
            ANDROID_API=32
            update_gapps_zip_name
        fi
        declare -A FILES_CHECK_LIST=([WSA_ZIP_PATH]="$WSA_ZIP_PATH" [xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [MAGISK_PATH]="$MAGISK_PATH")
        for i in "${FILES_CHECK_LIST[@]}"; do
            if [ ! -f "$i" ]; then
                echo "Offline mode: missing [$i]."
                OFFLINE_ERR="1"
            fi
        done
        if [ "$GAPPS_BRAND" != 'none' ]; then
            if [ ! -f "$GAPPS_PATH" ]; then
                echo "Offline mode: missing [$GAPPS_PATH]."
                OFFLINE_ERR="1"
            fi
        fi
        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"; then
            echo "Unzip WSA failed, is the download incomplete?"
            CLEAN_DOWNLOAD_WSA=1
            abort
        fi
        echo -e "Extract done\n"
        # shellcheck disable=SC1091
        source "${WORK_DIR:?}/ENV" || abort
    else
        echo "The WSA zip package does not exist, is the download incomplete?"
        exit 1
    fi
    
    echo "Extract Magisk"
    if [ -f "$MAGISK_PATH" ]; then
        MAGISK_VERSION_NAME=""
        MAGISK_VERSION_CODE=0
        if ! python3 extractMagisk.py "$ARCH" "$MAGISK_PATH" "$WORK_DIR"; then
            echo "Unzip Magisk failed, is the download incomplete?"
            CLEAN_DOWNLOAD_MAGISK=1
            abort
        fi
        # shellcheck disable=SC1091
        source "${WORK_DIR:?}/ENV" || abort
        $SUDO patchelf --replace-needed libc.so "../linker/$HOST_ARCH/libc.so" "$WORK_DIR"/magisk/magiskpolicy || abort
        $SUDO patchelf --replace-needed libm.so "../linker/$HOST_ARCH/libm.so" "$WORK_DIR"/magisk/magiskpolicy || abort
        $SUDO patchelf --replace-needed libdl.so "../linker/$HOST_ARCH/libdl.so" "$WORK_DIR"/magisk/magiskpolicy || abort
        $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
    elif [ -z "${CUSTOM_MAGISK+x}" ]; then
        echo "The Magisk zip package does not exist, is the download incomplete?"
        exit 1
    else
        echo "The Magisk zip package does not exist, rename it to magisk-debug.zip and put it in the download folder."
        exit 1
    fi
    echo -e "done\n"
    
    if [ "$GAPPS_BRAND" != 'none' ]; then
        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
                    echo "Unzip OpenGApps failed, is the download incomplete?"
                    CLEAN_DOWNLOAD_GAPPS=1
                    abort
                fi
            else
                if ! unzip "$GAPPS_PATH" "system/*" -x "system/addon.d/*" "system/system_ext/priv-app/SetupWizard/*" -d "$WORK_DIR"/gapps; then
                    echo "Unzip MindTheGapps failed, package is corrupted?"
                    CLEAN_DOWNLOAD_GAPPS=1
                    abort
                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
            echo "The $GAPPS_BRAND zip package does not exist."
            abort
        fi
        echo -e "Extract done\n"
    fi
    
    echo "Expand images"
    if [ ! -f /etc/mtab ]; then $SUDO ln -s /proc/self/mounts /etc/mtab; fi
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
    SYSTEM_EXT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system_ext.img | cut -f1) + 20000))
    if [ -d "$WORK_DIR"/gapps/system_ext ]; then
        SYSTEM_EXT_SIZE=$(( SYSTEM_EXT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
    fi
    resize2fs "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$SYSTEM_EXT_SIZE"s || abort
    
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
    PRODUCT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/product.img | cut -f1) + 20000))
    if [ -d "$WORK_DIR"/gapps/product ]; then
        PRODUCT_SIZE=$(( PRODUCT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
    fi
    resize2fs "$WORK_DIR"/wsa/"$ARCH"/product.img "$PRODUCT_SIZE"s || abort
    
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
    SYSTEM_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system.img | cut -f1) + 20000))
    if [ -d "$WORK_DIR"/gapps ]; then
        SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps | cut -f1) - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
        if [ -d "$WORK_DIR"/gapps/system_ext ]; then
            SYSTEM_SIZE=$(( SYSTEM_SIZE - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
        fi
    fi
    if [ -d "$WORK_DIR"/magisk ]; then
        SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/magisk/magisk | cut -f1) ))
    fi
    if [ -f "$MAGISK_PATH" ]; then
        SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1) ))
    fi
    if [ -d "../$ARCH/system" ]; then
        SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1) ))
    fi
    resize2fs "$WORK_DIR"/wsa/"$ARCH"/system.img "$SYSTEM_SIZE"s || abort
    
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
    VENDOR_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/vendor.img | cut -f1) + 20000))
    resize2fs "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$VENDOR_SIZE"s || abort
    echo -e "Expand images done\n"
    
    echo "Mount images"
    $SUDO mkdir "$MOUNT_DIR" || abort
    $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/system.img "$MOUNT_DIR" || abort
    $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$MOUNT_DIR"/vendor || abort
    $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/product.img "$MOUNT_DIR"/product || abort
    $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$MOUNT_DIR"/system_ext || abort
    echo -e "done\n"
    
    if [ "$REMOVE_AMAZON" ]; then
        echo "Remove Amazon Appstore"
        find "${MOUNT_DIR:?}"/product/{etc/permissions,etc/sysconfig,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | $SUDO xargs rm -rf
        find "${MOUNT_DIR:?}"/system_ext/{etc/*permissions,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | $SUDO xargs rm -rf
        echo -e "done\n"
    fi
    
    echo "Add device administration features"
    $SUDO sed -i -e '/cts/a \ \ \ \ <feature name="android.software.device_admin" />' -e '/print/i \ \ \ \ <feature name="android.software.managed_users" />' "$MOUNT_DIR"/vendor/etc/permissions/windows.permissions.xml
    $SUDO setfattr -n security.selinux -v "u:object_r:vendor_configs_file:s0" "$MOUNT_DIR"/vendor/etc/permissions/windows.permissions.xml || abort
    echo -e "done\n"
    
    if [ "$ROOT_SOL" = 'magisk' ] || [ "$ROOT_SOL" = '' ]; then
        echo "Integrate Magisk"
        $SUDO mkdir "$MOUNT_DIR"/sbin
        $SUDO setfattr -n security.selinux -v "u:object_r:rootfs:s0" "$MOUNT_DIR"/sbin || abort
        $SUDO chown root:root "$MOUNT_DIR"/sbin
        $SUDO chmod 0700 "$MOUNT_DIR"/sbin
        $SUDO cp "$WORK_DIR"/magisk/magisk/* "$MOUNT_DIR"/sbin/
        $SUDO cp "$MAGISK_PATH" "$MOUNT_DIR"/sbin/magisk.apk
        $SUDO tee -a "$MOUNT_DIR"/sbin/loadpolicy.sh <<EOF >/dev/null
    #!/system/bin/sh
    mkdir -p /data/adb/magisk
    cp /sbin/* /data/adb/magisk/
    sync
    chmod -R 755 /data/adb/magisk
    restorecon -R /data/adb/magisk
    for module in \$(ls /data/adb/modules); do
        if ! [ -f "/data/adb/modules/\$module/disable" ] && [ -f "/data/adb/modules/\$module/sepolicy.rule" ]; then
            /sbin/magiskpolicy --live --apply "/data/adb/modules/\$module/sepolicy.rule"
        fi
    done
    EOF
    
        $SUDO find "$MOUNT_DIR"/sbin -type f -exec chmod 0755 {} \;
        $SUDO find "$MOUNT_DIR"/sbin -type f -exec chown root:root {} \;
        $SUDO find "$MOUNT_DIR"/sbin -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
    
        TMP_PATH=$(Gen_Rand_Str 8)
        echo "/dev/$TMP_PATH(/.*)?    u:object_r:magisk_file:s0" | $SUDO tee -a "$MOUNT_DIR"/vendor/etc/selinux/vendor_file_contexts
        echo '/data/adb/magisk(/.*)?   u:object_r:magisk_file:s0' | $SUDO tee -a "$MOUNT_DIR"/vendor/etc/selinux/vendor_file_contexts
        $SUDO "$WORK_DIR"/magisk/magiskpolicy --load "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --save "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --magisk "allow * magisk_file lnk_file *" || abort
        LOAD_POLICY_SVC_NAME=$(Gen_Rand_Str 12)
        PFD_SVC_NAME=$(Gen_Rand_Str 12)
        LS_SVC_NAME=$(Gen_Rand_Str 12)
        $SUDO tee -a "$MOUNT_DIR"/system/etc/init/hw/init.rc <<EOF >/dev/null
    on post-fs-data
        start adbd
        mkdir /dev/$TMP_PATH
        mount tmpfs tmpfs /dev/$TMP_PATH mode=0755
        copy /sbin/magisk64 /dev/$TMP_PATH/magisk64
        chmod 0755 /dev/$TMP_PATH/magisk64
        symlink ./magisk64 /dev/$TMP_PATH/magisk
        symlink ./magisk64 /dev/$TMP_PATH/su
        symlink ./magisk64 /dev/$TMP_PATH/resetprop
        copy /sbin/magisk32 /dev/$TMP_PATH/magisk32
        chmod 0755 /dev/$TMP_PATH/magisk32
        copy /sbin/magiskinit /dev/$TMP_PATH/magiskinit
        chmod 0755 /dev/$TMP_PATH/magiskinit
        copy /sbin/magiskpolicy /dev/$TMP_PATH/magiskpolicy
        chmod 0755 /dev/$TMP_PATH/magiskpolicy
        mkdir /dev/$TMP_PATH/.magisk 700
        mkdir /dev/$TMP_PATH/.magisk/mirror 700
        mkdir /dev/$TMP_PATH/.magisk/block 700
        copy /sbin/magisk.apk /dev/$TMP_PATH/stub.apk
        chmod 0644 /dev/$TMP_PATH/stub.apk
        rm /dev/.magisk_unblock
        exec_start $LOAD_POLICY_SVC_NAME
        start $PFD_SVC_NAME
        wait /dev/.magisk_unblock 40
        rm /dev/.magisk_unblock
    
    service $LOAD_POLICY_SVC_NAME /system/bin/sh /sbin/loadpolicy.sh
        user root
        seclabel u:r:magisk:s0
        oneshot
    
    service $PFD_SVC_NAME /dev/$TMP_PATH/magisk --post-fs-data
        user root
        seclabel u:r:magisk:s0
        oneshot
    
    service $LS_SVC_NAME /dev/$TMP_PATH/magisk --service
        class late_start
        user root
        seclabel u:r:magisk:s0
        oneshot
    
    on property:sys.boot_completed=1
        mkdir /data/adb/magisk 755
        copy /sbin/magisk.apk /data/adb/magisk/magisk.apk
        exec /dev/$TMP_PATH/magisk --boot-complete
    
    on property:init.svc.zygote=restarting
        exec /dev/$TMP_PATH/magisk --zygote-restart
    
    on property:init.svc.zygote=stopped
        exec /dev/$TMP_PATH/magisk --zygote-restart
    
    EOF
        echo -e "Integrate Magisk done\n"
    fi
    
    cp "$WORK_DIR/wsa/$ARCH/resources.pri" "$WORK_DIR"/wsa/pri/en-us.pri \
    && cp "$WORK_DIR/wsa/$ARCH/AppxManifest.xml" "$WORK_DIR"/wsa/xml/en-us.xml && {
        echo "Merge Language Resources"
        tee "$WORK_DIR"/wsa/priconfig.xml <<EOF >/dev/null
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <resources targetOsVersion="10.0.0" majorVersion="1">
    <index root="\" startIndexAt="\">
        <indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/>
        <indexer-config type="PRI"/>
    </index>
    </resources>
    EOF
        if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then
            ../wine/"$HOST_ARCH"/makepri.exe new /pr "$(wslpath -w "$WORK_DIR"/wsa/pri)" /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf "$(wslpath -w "$WORK_DIR"/wsa/priconfig.xml)" /of "$(wslpath -w "$WORK_DIR"/wsa/"$ARCH"/resources.pri)" /o
        elif which wine64 > /dev/null; then
            wine64 ../wine/"$HOST_ARCH"/makepri.exe new /pr "$WORK_DIR"/wsa/pri /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf "$WORK_DIR"/wsa/priconfig.xml /of "$WORK_DIR"/wsa/"$ARCH"/resources.pri /o
        else
            res_merge_failed=1
        fi
        [ -z "$res_merge_failed" ] && sed -i -zE "s/<Resources.*Resources>/<Resources>\n$(cat "$WORK_DIR"/wsa/xml/* | grep -Po '<Resource [^>]*/>' | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g' | sed 's/\//\\\//g')\n<\/Resources>/g" "$WORK_DIR"/wsa/"$ARCH"/AppxManifest.xml && \
        echo -e "Merge Language Resources done\n"
    } && [ -n "$res_merge_failed" ] && echo -e "Merge Language Resources failed\n" && unset res_merge_failed
    
    echo "Add extra packages"
    $SUDO cp -r ../"$ARCH"/system/* "$MOUNT_DIR" || abort
    find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type d -exec chmod 0755 {} \;
    find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type f -exec chmod 0644 {} \;
    find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec chown root:root {} \;
    find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/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 | cut -d/ -f5-)"
        for file in $file_list; do
            $SUDO chown root:root "$WORK_DIR/gapps/${file}"
            $SUDO chmod 0644 "$WORK_DIR/gapps/${file}"
        done
    
        if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
            find "$WORK_DIR"/gapps/ -maxdepth 1 -mindepth 1 -type d -not -path '*product' -exec $SUDO cp --preserve=all -r {} "$MOUNT_DIR"/system \; || abort
        elif [ "$GAPPS_BRAND" = "MindTheGapps" ]; then
            $SUDO cp --preserve=all -r "$WORK_DIR"/gapps/system_ext/* "$MOUNT_DIR"/system_ext/ || abort
            if [ -e "$MOUNT_DIR"/system_ext/priv-app/SetupWizard ]; then
                rm -rf "${MOUNT_DIR:?}/system_ext/priv-app/Provision"
            fi
        fi
        $SUDO cp --preserve=all -r "$WORK_DIR"/gapps/product/* "$MOUNT_DIR"/product || abort
    
        find "$WORK_DIR"/gapps/product/overlay -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/overlay/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:vendor_overlay_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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/etc/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
        else
            find "$WORK_DIR"/gapps/product/app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/app/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 "$MOUNT_DIR"/product/etc/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/app/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 "$MOUNT_DIR"/product/etc/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/system_ext/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" "$MOUNT_DIR"/product/lib || abort
            find "$WORK_DIR"/gapps/product/lib/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/system_ext/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 "$MOUNT_DIR"/system_ext/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 "$MOUNT_DIR"/system_ext/priv-app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
        fi
    
        $SUDO "$WORK_DIR"/magisk/magiskpolicy --load "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --save "$MOUNT_DIR"/vendor/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" || 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 "$MOUNT_DIR" || abort
            echo -e "done\n"
        fi
    fi
    
    echo "Umount images"
    $SUDO find "$MOUNT_DIR" -exec touch -ht 200901010000.00 {} \;
    $SUDO umount -v "$MOUNT_DIR"/vendor
    $SUDO umount -v "$MOUNT_DIR"/product
    $SUDO umount -v "$MOUNT_DIR"/system_ext
    $SUDO umount -v "$MOUNT_DIR"
    echo -e "done\n"
    
    echo "Shrink images"
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
    resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
    resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
    resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
    e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
    resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
    echo -e "Shrink images done\n"
    
    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
    cp "$vclibs_PATH" "$xaml_PATH" "$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"
    
    if [[ "$ROOT_SOL" = "none" ]]; then
        name1=""
    elif [ "$ROOT_SOL" = "" ] || [ "$ROOT_SOL" = "magisk" ]; then
        name1="-with-magisk-$MAGISK_VERSION_NAME($MAGISK_VERSION_CODE)-$MAGISK_VER"
    else
        name1="-with-$ROOT_SOL-$MAGISK_VER"
    fi
    if [ "$GAPPS_BRAND" = "none" ]; 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
    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:?}"
    fi
    if [ ! -d "$OUTPUT_DIR" ]; then
        mkdir -p "$OUTPUT_DIR"
    fi
    OUTPUT_PATH="${OUTPUT_DIR:?}/$artifact_name"
    if [ "$COMPRESS_OUTPUT" ] || [ -n "$COMPRESS_FORMAT" ]; 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"
            if [ "$FILE_EXT" = ".xz" ]; then
                FILE_EXT=".tar$FILE_EXT"
            fi
            OUTPUT_PATH="$OUTPUT_PATH$FILE_EXT"
        fi
        rm -f "${OUTPUT_PATH:?}" || abort
        if [ "$COMPRESS_FORMAT" = "7z" ]; then
            echo "Compressing with 7z"
            7z a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
        elif [ "$COMPRESS_FORMAT" = "xz" ]; then
            echo "Compressing with tar xz"
            if ! (tar -cP -I 'xz -9 -T0' -f "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name"); then
                echo "Out of memory? Trying again with single threads..."
                tar -cPJvf "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
            fi
        elif [ "$COMPRESS_FORMAT" = "zip" ]; then
            7z -tzip a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
        fi
    else
        rm -rf "${OUTPUT_PATH:?}" || abort
        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"
    
    
    תגובה 1 תגובה אחרונה
    0
    • A0533057932A מנותק
      A0533057932A מנותק
      A0533057932
      כתב ב נערך לאחרונה על ידי
      #2

      ואילו אני בקוד הזה

      #!/bin/bash
      #
      # 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 <https://www.gnu.org/licenses/>.
      #
      # Copyright (C) 2023 LSPosed Contributors
      #
      
      if [ ! "$BASH_VERSION" ]; then
          echo "Please do not use sh to run this script, just execute it directly" 1>&2
          exit 1
      fi
      HOST_ARCH=$(uname -m)
      if [ "$HOST_ARCH" != "x86_64" ] && [ "$HOST_ARCH" != "aarch64" ]; then
          echo "Unsupported architectures: $HOST_ARCH"
          exit 1
      fi
      cd "$(dirname "$0")" || exit 1
      # export TMPDIR=$(dirname "$PWD")/WORK_DIR_
      if [ "$TMPDIR" ] && [ ! -d "$TMPDIR" ]; then
          mkdir -p "$TMPDIR"
      fi
      WORK_DIR=$(mktemp -d -t wsa-build-XXXXXXXXXX_) || exit 1
      MOUNT_DIR="$WORK_DIR"/system
      SUDO="$(which sudo 2>/dev/null)"
      if [ -z "$SUDO" ]; then
          unset SUDO
      fi
      DOWNLOAD_DIR=../download
      DOWNLOAD_CONF_NAME=download.list
      umount_clean() {
          if [ -d "$MOUNT_DIR" ]; then
              echo "Cleanup Mount Directory"
              if [ -d "$MOUNT_DIR/vendor" ]; then
                  $SUDO umount -v "$MOUNT_DIR"/vendor
              fi
              if [ -d "$MOUNT_DIR/product" ]; then
                  $SUDO umount -v "$MOUNT_DIR"/product
              fi
              if [ -d "$MOUNT_DIR/system_ext" ]; then
                  $SUDO umount -v "$MOUNT_DIR"/system_ext
              fi
              $SUDO umount -v "$MOUNT_DIR"
              $SUDO rm -rf "${WORK_DIR:?}"
          else
              rm -rf "${WORK_DIR:?}"
          fi
          if [ "$TMPDIR" ] && [ -d "$TMPDIR" ]; then
              echo "Cleanup Temp Directory"
              rm -rf "${TMPDIR:?}"
              unset TMPDIR
          fi
          rm -f "${DOWNLOAD_DIR:?}/$DOWNLOAD_CONF_NAME"
      }
      trap umount_clean EXIT
      OUTPUT_DIR=../output
      WSA_WORK_ENV="${WORK_DIR:?}"/ENV
      if [ -f "$WSA_WORK_ENV" ]; then rm -f "${WSA_WORK_ENV:?}"; fi
      touch "$WSA_WORK_ENV"
      export WSA_WORK_ENV
      clean_download() {
          if [ -d "$DOWNLOAD_DIR" ]; then
              echo "Cleanup Download Directory"
              if [ "$CLEAN_DOWNLOAD_WSA" ]; then
                  rm -f "${WSA_ZIP_PATH:?}"
              fi
              if [ "$CLEAN_DOWNLOAD_MAGISK" ]; then
                  rm -f "${MAGISK_PATH:?}"
              fi
              if [ "$CLEAN_DOWNLOAD_GAPPS" ]; then
                  rm -f "${GAPPS_PATH:?}"
              fi
          fi
      }
      abort() {
          echo "Build: an error has occurred, exit"
          if [ -d "$WORK_DIR" ]; then
              echo -e "\nCleanup Work Directory"
              umount_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
      }
      
      exit_with_message() {
          echo "ERROR: $1"
          usage
          exit 1
      }
      
      ARCH_MAP=(
          "x64"
          "arm64"
      )
      
      RELEASE_TYPE_MAP=(
          "retail"
          "RP"
          "WIS"
          "WIF"
      )
      
      MAGISK_VER_MAP=(
          "stable"
          "beta"
          "canary"
          "debug"
          "release"
      )
      
      GAPPS_BRAND_MAP=(
          "OpenGApps"
          "MindTheGapps"
          "none"
      )
      
      GAPPS_VARIANT_MAP=(
          "super"
          "stock"
          "full"
          "mini"
          "micro"
          "nano"
          "pico"
          "tvstock"
          "tvmini"
      )
      
      ROOT_SOL_MAP=(
          "magisk"
          "none"
      )
      
      COMPRESS_FORMAT_MAP=(
          "7z"
          "xz"
          "zip"
      )
      
      ARR_TO_STR() {
          local arr=("$@")
          local joined
          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 "
      Usage:
          --arch              Architecture of WSA.
      
                              Possible values: $(ARR_TO_STR "${ARCH_MAP[@]}")
                              Default: $ARCH
      
          --release-type      Release type of WSA.
                              RP means Release Preview, WIS means Insider Slow, WIF means Insider Fast.
      
                              Possible values: $(ARR_TO_STR "${RELEASE_TYPE_MAP[@]}")
                              Default: $RELEASE_TYPE
      
          --magisk-ver        Magisk version.
      
                              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
      
                              Possible values: $(ARR_TO_STR "${COMPRESS_FORMAT_MAP[@]}")
      
      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
          "
      }
      
      ARGUMENT_LIST=(
          "arch:"
          "release-type:"
          "magisk-ver:"
          "gapps-brand:"
          "gapps-variant:"
          "nofix-props"
          "root-sol:"
          "compress-format:"
          "remove-amazon"
          "compress"
          "offline"
          "magisk-custom"
          "debug"
          "help"
          "skip-download-wsa"
      )
      
      default
      
      opts=$(
          getopt \
              --longoptions "$(printf "%s," "${ARGUMENT_LIST[@]}")" \
              --name "$(basename "$0")" \
              --options "" \
              -- "$@"
      ) || exit_with_message "Failed to parse options, please check your input"
      
      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
      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
              local name=$2
              shift
              local arr=("$@")
              local list_count=${#arr[@]}
              for i in "${arr[@]}"; do
                  if [ "$input" == "$i" ]; then
                      echo "INFO: $name: $input"
                      break
                  fi
                  ((list_count--))
                  if (("$list_count" <= 0)); then
                      exit_with_message "Invalid $name: $input"
                  fi
              done
          fi
      }
      
      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[@]}"
      
      if [ "$DEBUG" ]; then
          set -x
      fi
      
      require_su() {
          if test "$(id -u)" != "0"; then
              if [ -z "$SUDO" ] || [ "$($SUDO id -u)" != "0" ]; then
                  echo "ROOT/SUDO is required to run this script"
                  abort
              fi
          fi
      }
      
      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")
      RELEASE_NAME=${RELEASE_NAME_MAP[$RELEASE_TYPE]} || abort
      
      echo -e "Build: RELEASE_TYPE=$RELEASE_NAME"
      
      WSA_ZIP_PATH=$DOWNLOAD_DIR/wsa-$RELEASE_TYPE.zip
      vclibs_PATH=$DOWNLOAD_DIR/Microsoft.VCLibs."$ARCH".14.00.Desktop.appx
      xaml_PATH=$DOWNLOAD_DIR/Microsoft.UI.Xaml_"$ARCH".appx
      MAGISK_ZIP=magisk-$MAGISK_VER.zip
      MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
      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"
              MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
              if [ ! -f "$MAGISK_PATH" ]; then
                  echo -e "Custom Magisk $MAGISK_ZIP not found\nPlease put custom Magisk in $DOWNLOAD_DIR"
                  abort
              fi
          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_zip_name
      if [ -z "${OFFLINE+x}" ]; then
          require_su
          if [ "${DOWN_WSA}" != "no" ]; then
              echo "Generate Download Links"
              python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
              # shellcheck disable=SC1091
              source "${WORK_DIR:?}/ENV" || abort
          else
              DOWN_WSA_MAIN_VERSION=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH")
          fi
          if [[ "$DOWN_WSA_MAIN_VERSION" -lt 2211 ]]; then
              ANDROID_API=32
              update_gapps_zip_name
          fi
          if [ -z "${CUSTOM_MAGISK+x}" ]; then
              python3 generateMagiskLink.py "$MAGISK_VER" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
          fi
          if [ "$GAPPS_BRAND" != "none" ]; then
              python3 generateGappsLink.py "$ARCH" "$GAPPS_BRAND" "$GAPPS_VARIANT" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$ANDROID_API" "$GAPPS_ZIP_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
          DOWN_WSA_MAIN_VERSION=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH")
          if [[ "$DOWN_WSA_MAIN_VERSION" -lt 2211 ]]; then
              ANDROID_API=32
              update_gapps_zip_name
          fi
          declare -A FILES_CHECK_LIST=([WSA_ZIP_PATH]="$WSA_ZIP_PATH" [xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [MAGISK_PATH]="$MAGISK_PATH")
          for i in "${FILES_CHECK_LIST[@]}"; do
              if [ ! -f "$i" ]; then
                  echo "Offline mode: missing [$i]."
                  OFFLINE_ERR="1"
              fi
          done
          if [ "$GAPPS_BRAND" != 'none' ]; then
              if [ ! -f "$GAPPS_PATH" ]; then
                  echo "Offline mode: missing [$GAPPS_PATH]."
                  OFFLINE_ERR="1"
              fi
          fi
          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"; then
              echo "Unzip WSA failed, is the download incomplete?"
              CLEAN_DOWNLOAD_WSA=1
              abort
          fi
          echo -e "Extract done\n"
          # shellcheck disable=SC1091
          source "${WORK_DIR:?}/ENV" || abort
      else
          echo "The WSA zip package does not exist, is the download incomplete?"
          exit 1
      fi
      
      echo "Extract Magisk"
      if [ -f "$MAGISK_PATH" ]; then
          MAGISK_VERSION_NAME=""
          MAGISK_VERSION_CODE=0
          if ! python3 extractMagisk.py "$ARCH" "$MAGISK_PATH" "$WORK_DIR"; then
              echo "Unzip Magisk failed, is the download incomplete?"
              CLEAN_DOWNLOAD_MAGISK=1
              abort
          fi
          # shellcheck disable=SC1091
          source "${WORK_DIR:?}/ENV" || abort
          $SUDO patchelf --replace-needed libc.so "../linker/$HOST_ARCH/libc.so" "$WORK_DIR"/magisk/magiskpolicy || abort
          $SUDO patchelf --replace-needed libm.so "../linker/$HOST_ARCH/libm.so" "$WORK_DIR"/magisk/magiskpolicy || abort
          $SUDO patchelf --replace-needed libdl.so "../linker/$HOST_ARCH/libdl.so" "$WORK_DIR"/magisk/magiskpolicy || abort
          $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
      elif [ -z "${CUSTOM_MAGISK+x}" ]; then
          echo "The Magisk zip package does not exist, is the download incomplete?"
          exit 1
      else
          echo "The Magisk zip package does not exist, rename it to magisk-debug.zip and put it in the download folder."
          exit 1
      fi
      echo -e "done\n"
      
      if [ "$GAPPS_BRAND" != 'none' ]; then
          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
                      echo "Unzip OpenGApps failed, is the download incomplete?"
                      CLEAN_DOWNLOAD_GAPPS=1
                      abort
                  fi
              else
                  if ! unzip "$GAPPS_PATH" "system/*" -x "system/addon.d/*" "system/system_ext/priv-app/SetupWizard/*" -d "$WORK_DIR"/gapps; then
                      echo "Unzip MindTheGapps failed, package is corrupted?"
                      CLEAN_DOWNLOAD_GAPPS=1
                      abort
                  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
              echo "The $GAPPS_BRAND zip package does not exist."
              abort
          fi
          echo -e "Extract done\n"
      fi
      
      echo "Expand images"
      if [ ! -f /etc/mtab ]; then $SUDO ln -s /proc/self/mounts /etc/mtab; fi
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
      SYSTEM_EXT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system_ext.img | cut -f1) + 20000))
      if [ -d "$WORK_DIR"/gapps/system_ext ]; then
          SYSTEM_EXT_SIZE=$(( SYSTEM_EXT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
      fi
      resize2fs "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$SYSTEM_EXT_SIZE"s || abort
      
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
      PRODUCT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/product.img | cut -f1) + 20000))
      if [ -d "$WORK_DIR"/gapps/product ]; then
          PRODUCT_SIZE=$(( PRODUCT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
      fi
      resize2fs "$WORK_DIR"/wsa/"$ARCH"/product.img "$PRODUCT_SIZE"s || abort
      
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
      SYSTEM_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system.img | cut -f1) + 20000))
      if [ -d "$WORK_DIR"/gapps ]; then
          SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps | cut -f1) - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
          if [ -d "$WORK_DIR"/gapps/system_ext ]; then
              SYSTEM_SIZE=$(( SYSTEM_SIZE - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
          fi
      fi
      if [ -d "$WORK_DIR"/magisk ]; then
          SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/magisk/magisk | cut -f1) ))
      fi
      if [ -f "$MAGISK_PATH" ]; then
          SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1) ))
      fi
      if [ -d "../$ARCH/system" ]; then
          SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1) ))
      fi
      resize2fs "$WORK_DIR"/wsa/"$ARCH"/system.img "$SYSTEM_SIZE"s || abort
      
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
      VENDOR_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/vendor.img | cut -f1) + 20000))
      resize2fs "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$VENDOR_SIZE"s || abort
      echo -e "Expand images done\n"
      
      echo "Mount images"
      $SUDO mkdir "$MOUNT_DIR" || abort
      $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/system.img "$MOUNT_DIR" || abort
      $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$MOUNT_DIR"/vendor || abort
      $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/product.img "$MOUNT_DIR"/product || abort
      $SUDO mount -vo loop "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$MOUNT_DIR"/system_ext || abort
      echo -e "done\n"
      
      if [ "$REMOVE_AMAZON" ]; then
          echo "Remove Amazon Appstore"
          find "${MOUNT_DIR:?}"/product/{etc/permissions,etc/sysconfig,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | $SUDO xargs rm -rf
          find "${MOUNT_DIR:?}"/system_ext/{etc/*permissions,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | $SUDO xargs rm -rf
          echo -e "done\n"
      fi
      
      echo "Add device administration features"
      $SUDO sed -i -e '/cts/a \ \ \ \ <feature name="android.software.device_admin" />' -e '/print/i \ \ \ \ <feature name="android.software.managed_users" />' "$MOUNT_DIR"/vendor/etc/permissions/windows.permissions.xml
      $SUDO setfattr -n security.selinux -v "u:object_r:vendor_configs_file:s0" "$MOUNT_DIR"/vendor/etc/permissions/windows.permissions.xml || abort
      echo -e "done\n"
      
      if [ "$ROOT_SOL" = 'magisk' ] || [ "$ROOT_SOL" = '' ]; then
          echo "Integrate Magisk"
          $SUDO mkdir "$MOUNT_DIR"/sbin
          $SUDO setfattr -n security.selinux -v "u:object_r:rootfs:s0" "$MOUNT_DIR"/sbin || abort
          $SUDO chown root:root "$MOUNT_DIR"/sbin
          $SUDO chmod 0700 "$MOUNT_DIR"/sbin
          $SUDO cp "$WORK_DIR"/magisk/magisk/* "$MOUNT_DIR"/sbin/
          $SUDO cp "$MAGISK_PATH" "$MOUNT_DIR"/sbin/magisk.apk
          $SUDO tee -a "$MOUNT_DIR"/sbin/loadpolicy.sh <<EOF >/dev/null
      #!/system/bin/sh
      mkdir -p /data/adb/magisk
      cp /sbin/* /data/adb/magisk/
      sync
      chmod -R 755 /data/adb/magisk
      restorecon -R /data/adb/magisk
      for module in \$(ls /data/adb/modules); do
          if ! [ -f "/data/adb/modules/\$module/disable" ] && [ -f "/data/adb/modules/\$module/sepolicy.rule" ]; then
              /sbin/magiskpolicy --live --apply "/data/adb/modules/\$module/sepolicy.rule"
          fi
      done
      EOF
      
          $SUDO find "$MOUNT_DIR"/sbin -type f -exec chmod 0755 {} \;
          $SUDO find "$MOUNT_DIR"/sbin -type f -exec chown root:root {} \;
          $SUDO find "$MOUNT_DIR"/sbin -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
      
          TMP_PATH=$(Gen_Rand_Str 8)
          echo "/dev/$TMP_PATH(/.*)?    u:object_r:magisk_file:s0" | $SUDO tee -a "$MOUNT_DIR"/vendor/etc/selinux/vendor_file_contexts
          echo '/data/adb/magisk(/.*)?   u:object_r:magisk_file:s0' | $SUDO tee -a "$MOUNT_DIR"/vendor/etc/selinux/vendor_file_contexts
          $SUDO "$WORK_DIR"/magisk/magiskpolicy --load "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --save "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --magisk "allow * magisk_file lnk_file *" || abort
          LOAD_POLICY_SVC_NAME=$(Gen_Rand_Str 12)
          PFD_SVC_NAME=$(Gen_Rand_Str 12)
          LS_SVC_NAME=$(Gen_Rand_Str 12)
          $SUDO tee -a "$MOUNT_DIR"/system/etc/init/hw/init.rc <<EOF >/dev/null
      on post-fs-data
          start adbd
          mkdir /dev/$TMP_PATH
          mount tmpfs tmpfs /dev/$TMP_PATH mode=0755
          copy /sbin/magisk64 /dev/$TMP_PATH/magisk64
          chmod 0755 /dev/$TMP_PATH/magisk64
          symlink ./magisk64 /dev/$TMP_PATH/magisk
          symlink ./magisk64 /dev/$TMP_PATH/su
          symlink ./magisk64 /dev/$TMP_PATH/resetprop
          copy /sbin/magisk32 /dev/$TMP_PATH/magisk32
          chmod 0755 /dev/$TMP_PATH/magisk32
          copy /sbin/magiskinit /dev/$TMP_PATH/magiskinit
          chmod 0755 /dev/$TMP_PATH/magiskinit
          copy /sbin/magiskpolicy /dev/$TMP_PATH/magiskpolicy
          chmod 0755 /dev/$TMP_PATH/magiskpolicy
          mkdir /dev/$TMP_PATH/.magisk 700
          mkdir /dev/$TMP_PATH/.magisk/mirror 700
          mkdir /dev/$TMP_PATH/.magisk/block 700
          copy /sbin/magisk.apk /dev/$TMP_PATH/stub.apk
          chmod 0644 /dev/$TMP_PATH/stub.apk
          rm /dev/.magisk_unblock
          exec_start $LOAD_POLICY_SVC_NAME
          start $PFD_SVC_NAME
          wait /dev/.magisk_unblock 40
          rm /dev/.magisk_unblock
      
      service $LOAD_POLICY_SVC_NAME /system/bin/sh /sbin/loadpolicy.sh
          user root
          seclabel u:r:magisk:s0
          oneshot
      
      service $PFD_SVC_NAME /dev/$TMP_PATH/magisk --post-fs-data
          user root
          seclabel u:r:magisk:s0
          oneshot
      
      service $LS_SVC_NAME /dev/$TMP_PATH/magisk --service
          class late_start
          user root
          seclabel u:r:magisk:s0
          oneshot
      
      on property:sys.boot_completed=1
          mkdir /data/adb/magisk 755
          copy /sbin/magisk.apk /data/adb/magisk/magisk.apk
          exec /dev/$TMP_PATH/magisk --boot-complete
      
      on property:init.svc.zygote=restarting
          exec /dev/$TMP_PATH/magisk --zygote-restart
      
      on property:init.svc.zygote=stopped
          exec /dev/$TMP_PATH/magisk --zygote-restart
      
      EOF
          echo -e "Integrate Magisk done\n"
      fi
      
      cp "$WORK_DIR/wsa/$ARCH/resources.pri" "$WORK_DIR"/wsa/pri/en-us.pri \
      && cp "$WORK_DIR/wsa/$ARCH/AppxManifest.xml" "$WORK_DIR"/wsa/xml/en-us.xml && {
          echo "Merge Language Resources"
          tee "$WORK_DIR"/wsa/priconfig.xml <<EOF >/dev/null
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <resources targetOsVersion="10.0.0" majorVersion="1">
      <index root="\" startIndexAt="\">
          <indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/>
          <indexer-config type="PRI"/>
      </index>
      </resources>
      EOF
          if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then
              ../wine/"$HOST_ARCH"/makepri.exe new /pr "$(wslpath -w "$WORK_DIR"/wsa/pri)" /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf "$(wslpath -w "$WORK_DIR"/wsa/priconfig.xml)" /of "$(wslpath -w "$WORK_DIR"/wsa/"$ARCH"/resources.pri)" /o
          elif which wine64 > /dev/null; then
              wine64 ../wine/"$HOST_ARCH"/makepri.exe new /pr "$WORK_DIR"/wsa/pri /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf "$WORK_DIR"/wsa/priconfig.xml /of "$WORK_DIR"/wsa/"$ARCH"/resources.pri /o
          else
              res_merge_failed=1
          fi
          [ -z "$res_merge_failed" ] && sed -i -zE "s/<Resources.*Resources>/<Resources>\n$(cat "$WORK_DIR"/wsa/xml/* | grep -Po '<Resource [^>]*/>' | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g' | sed 's/\//\\\//g')\n<\/Resources>/g" "$WORK_DIR"/wsa/"$ARCH"/AppxManifest.xml && \
          echo -e "Merge Language Resources done\n"
      } && [ -n "$res_merge_failed" ] && echo -e "Merge Language Resources failed\n" && unset res_merge_failed
      
      echo "Add extra packages and Netpree and Netspark security certificates"
      $SUDO cp -r ../"$ARCH"/system/* "$MOUNT_DIR" || abort
      find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -type d -exec chmod 0755 {} \;
      find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -type f -exec chmod 0644 {} \;
      find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -exec chown root:root {} \;
      find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
      find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type d -exec chmod 0755 {} \;
      find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type f -exec chmod 0644 {} \;
      find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec chown root:root {} \;
      find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
      echo -e "Add extra packages and Netpree and Netspark security certificates 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 | cut -d/ -f5-)"
          for file in $file_list; do
              $SUDO chown root:root "$WORK_DIR/gapps/${file}"
              $SUDO chmod 0644 "$WORK_DIR/gapps/${file}"
          done
      
          if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
              find "$WORK_DIR"/gapps/ -maxdepth 1 -mindepth 1 -type d -not -path '*product' -exec $SUDO cp --preserve=all -r {} "$MOUNT_DIR"/system \; || abort
          elif [ "$GAPPS_BRAND" = "MindTheGapps" ]; then
              $SUDO cp --preserve=all -r "$WORK_DIR"/gapps/system_ext/* "$MOUNT_DIR"/system_ext/ || abort
              if [ -e "$MOUNT_DIR"/system_ext/priv-app/SetupWizard ]; then
                  rm -rf "${MOUNT_DIR:?}/system_ext/priv-app/Provision"
              fi
          fi
          $SUDO cp --preserve=all -r "$WORK_DIR"/gapps/product/* "$MOUNT_DIR"/product || abort
      
          find "$WORK_DIR"/gapps/product/overlay -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/overlay/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:vendor_overlay_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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/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 "$MOUNT_DIR"/system/etc/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
          else
              find "$WORK_DIR"/gapps/product/app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/app/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 "$MOUNT_DIR"/product/etc/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/app/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 "$MOUNT_DIR"/product/etc/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/system_ext/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" "$MOUNT_DIR"/product/lib || abort
              find "$WORK_DIR"/gapps/product/lib/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/product/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 "$MOUNT_DIR"/system_ext/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 "$MOUNT_DIR"/system_ext/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 "$MOUNT_DIR"/system_ext/priv-app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
          fi
      
          $SUDO "$WORK_DIR"/magisk/magiskpolicy --load "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --save "$MOUNT_DIR"/vendor/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" || 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 "$MOUNT_DIR" || abort
              echo -e "done\n"
          fi
      fi
      
      echo "Umount images"
      $SUDO find "$MOUNT_DIR" -exec touch -ht 200901010000.00 {} \;
      $SUDO umount -v "$MOUNT_DIR"/vendor
      $SUDO umount -v "$MOUNT_DIR"/product
      $SUDO umount -v "$MOUNT_DIR"/system_ext
      $SUDO umount -v "$MOUNT_DIR"
      echo -e "done\n"
      
      echo "Shrink images"
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
      resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
      resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
      resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
      e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
      resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
      echo -e "Shrink images done\n"
      
      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
      cp "$vclibs_PATH" "$xaml_PATH" "$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"
      
      if [[ "$ROOT_SOL" = "none" ]]; then
          name1=""
      elif [ "$ROOT_SOL" = "" ] || [ "$ROOT_SOL" = "magisk" ]; then
          name1="-with-magisk-$MAGISK_VERSION_NAME($MAGISK_VERSION_CODE)-$MAGISK_VER"
      else
          name1="-with-$ROOT_SOL-$MAGISK_VER"
      fi
      if [ "$GAPPS_BRAND" = "none" ]; 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
      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:?}"
      fi
      if [ ! -d "$OUTPUT_DIR" ]; then
          mkdir -p "$OUTPUT_DIR"
      fi
      OUTPUT_PATH="${OUTPUT_DIR:?}/$artifact_name"
      if [ "$COMPRESS_OUTPUT" ] || [ -n "$COMPRESS_FORMAT" ]; 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"
              if [ "$FILE_EXT" = ".xz" ]; then
                  FILE_EXT=".tar$FILE_EXT"
              fi
              OUTPUT_PATH="$OUTPUT_PATH$FILE_EXT"
          fi
          rm -f "${OUTPUT_PATH:?}" || abort
          if [ "$COMPRESS_FORMAT" = "7z" ]; then
              echo "Compressing with 7z"
              7z a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
          elif [ "$COMPRESS_FORMAT" = "xz" ]; then
              echo "Compressing with tar xz"
              if ! (tar -cP -I 'xz -9 -T0' -f "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name"); then
                  echo "Out of memory? Trying again with single threads..."
                  tar -cPJvf "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
              fi
          elif [ "$COMPRESS_FORMAT" = "zip" ]; then
              7z -tzip a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
          fi
      else
          rm -rf "${OUTPUT_PATH:?}" || abort
          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"
      
      
      תגובה 1 תגובה אחרונה
      0
      • A0533057932A מנותק
        A0533057932A מנותק
        A0533057932
        כתב ב נערך לאחרונה על ידי
        #3

        ההבדל הוא בקטע הזה

        echo "Add extra packages"
        $SUDO cp -r ../"$ARCH"/system/* "$MOUNT_DIR" || abort
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type d -exec chmod 0755 {} \;
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type f -exec chmod 0644 {} \;
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec chown root:root {} \;
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
        echo -e "Add extra packages done\n"
        

        מול הקטע שלי

        echo "Add extra packages and Netpree and Netspark security certificates"
        $SUDO cp -r ../"$ARCH"/system/* "$MOUNT_DIR" || abort
        find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -type d -exec chmod 0755 {} \;
        find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -type f -exec chmod 0644 {} \;
        find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -exec chown root:root {} \;
        find ../"$ARCH"/system/system/etc/security/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/security/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type d -exec chmod 0755 {} \;
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type f -exec chmod 0644 {} \;
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec chown root:root {} \;
        find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
        echo -e "Add extra packages and Netpree and Netspark security certificates done\n"
        
        תגובה 1 תגובה אחרונה
        0
        • A0533057932A מנותק
          A0533057932A מנותק
          A0533057932
          כתב ב נערך לאחרונה על ידי
          #4

          הבעיה היא כזאת
          כאשר אני מנסה להכין WSA עדכני (גרסה 2301.40000.7.0) אני נתקל בשגיאה הבאה

          Add extra packages and Netpree and Netspark security certificates
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/39698488.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/3f66ddee.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/42afec87.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/482e0622.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/4a3b190e.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/4eba579e.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/6207c6f5.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/66bbb532.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/820d5f23.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/85c0c4be.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/a4f6f3c0.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/b0396035.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/ea335731.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/f9b4d31c.0': No space left on device
          cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/fbb5e364.0': No space left on device
          Build: an error has occurred, exit
          
          תגובה 1 תגובה אחרונה
          0
          • A0533057932A מנותק
            A0533057932A מנותק
            A0533057932
            כתב ב נערך לאחרונה על ידי
            #5

            וליתר דיוק
            הפלט המלא

            COMMAND_LINE=--arch x64 --release-type RP --magisk-ver stable --gapps-brand MindTheGapps --gapps-variant pico  --root-sol magisk --compress    --compress-format 7z
            INFO: Architecture: x64
            INFO: Release Type: RP
            INFO: Magisk Version: stable
            INFO: GApps Brand: MindTheGapps
            INFO: GApps Variant: pico
            INFO: Root Solution: magisk
            INFO: Compress Format: 7z
            Build: RELEASE_TYPE=Release Preview
            [sudo] password for ubuntu: 
            Generate Download Links
            Generating WSA download link: arch=x64 release_type=Release Preview
            WSA Version=2301.40000.7.0
            
            download link: http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/82207876-51a4-4581-80d3-09369370aadc?P1=1677842691&P2=404&P3=2&P4=lRP2M6xtpgHGrQR59WQHp2tQ61w%2f2u%2fpapNvLDHH88fTdYhwq0WrWd8k%2b3VCOAAgIlfUdL72wvlBOFnJhVSOpw%3d%3d to /home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
            download link: http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/f347c6de-90ec-413b-897d-20b1194934a7?P1=1677870835&P2=404&P3=2&P4=WhQl72DgL3qom0YdlFqHd%2bmMxE6pxJvLgQHOEKMw2ylbXdJBwmsbTJUyqfryVEKzu9MKfIM54WZvNDuhijNSpA%3d%3d to /home/ubuntu/WSA/download/wsa-RP.zip
            Generating Magisk download link: release type=stable
            download link: https://cdn.jsdelivr.net/gh/topjohnwu/magisk-files@25.2/app-release.apk
            Generating MindTheGapps download link: arch=x64 variant=pico
            download link: https://downloads.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            Download Artifacts
            
            03/03 11:13:48 [NOTICE] Downloading 5 item(s)
            [DL:13MiB][#72ada4 0B/0B][#9348e0 1.7MiB/5.0MiB(33%)][#abed69 23MiB/1.3GiB(1%)][#6b6d6a 9.9MiB
            03/03 11:13:52 [NOTICE] Download complete: /home/ubuntu/WSA/download/magisk-stable.zip
            [DL:18MiB][#72ada4 0B/0B][#9348e0 3.5MiB/5.0MiB(69%)][#abed69 51MiB/1.3GiB(3%)][#66e792 0B/0B]
            03/03 11:13:52 [NOTICE] CUID#7 - Redirecting to https://download.microsoft.com/download/4/7/c/47c6134b-d61f-4024-83bd-b9c9ea951c25/appx/Microsoft.VCLibs.x64.14.00.Desktop.appx
            [DL:7.6MiB][#72ada4 0B/0B][#9348e0 3.6MiB/5.0MiB(72%)][#abed69 54MiB/1.3GiB(3%)][#66e792 0B/0B
            03/03 11:13:57 [NOTICE] CUID#11 - Redirecting to https://netix.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            
            03/03 11:13:57 [NOTICE] Download complete: /home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
            03/03 11:13:58 [NOTICE] CUID#53 - Redirecting to https://deac-ams.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            
            03/03 11:13:58 [NOTICE] Download complete: /home/ubuntu/WSA/download/Microsoft.VCLibs.x64.14.00.Desktop.appx
            [DL:41MiB][#abed69 417MiB/1.3GiB(29%)][#66e792 9.9MiB/188MiB(5%)]                             
            03/03 11:14:00 [NOTICE] CUID#54 - Redirecting to https://netix.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            [DL:73MiB][#abed69 693MiB/1.3GiB(48%)][#66e792 29MiB/188MiB(15%)]                             
            03/03 11:14:02 [NOTICE] CUID#56 - Redirecting to https://deac-ams.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            [DL:189MiB][#abed69 1.0GiB/1.3GiB(78%)][#66e792 54MiB/188MiB(28%)]                            
            03/03 11:14:04 [NOTICE] CUID#58 - Redirecting to https://netix.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            [DL:196MiB][#abed69 1.3GiB/1.3GiB(94%)][#66e792 61MiB/188MiB(32%)]                            
            03/03 11:14:05 [NOTICE] Download complete: /home/ubuntu/WSA/download/wsa-RP.zip
            [#66e792 79MiB/188MiB(42%) CN:6 DL:10MiB ETA:10s]                                             
            03/03 11:14:06 [NOTICE] CUID#55 - Redirecting to https://netix.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            [#66e792 102MiB/188MiB(54%) CN:5 DL:10MiB ETA:8s]                                             
            03/03 11:14:08 [NOTICE] CUID#57 - Redirecting to https://netcologne.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            [#66e792 122MiB/188MiB(64%) CN:5 DL:11MiB ETA:5s]                                             
            03/03 11:14:10 [NOTICE] CUID#59 - Redirecting to https://kumisystems.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
            [#66e792 185MiB/188MiB(98%) CN:1 DL:1.4MiB ETA:1s]                                            
            03/03 11:14:26 [NOTICE] Download complete: /home/ubuntu/WSA/download/MindTheGapps-x64-13.0.zip
            
            Download Results:
            gid   |stat|avg speed  |path/URI
            ======+====+===========+=======================================================
            6b6d6a|OK  |   3.3MiB/s|/home/ubuntu/WSA/download/magisk-stable.zip
            9348e0|OK  |   569KiB/s|/home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
            72ada4|OK  |   8.2MiB/s|/home/ubuntu/WSA/download/Microsoft.VCLibs.x64.14.00.Desktop.appx
            abed69|OK  |    87MiB/s|/home/ubuntu/WSA/download/wsa-RP.zip
            66e792|OK  |   6.6MiB/s|/home/ubuntu/WSA/download/MindTheGapps-x64-13.0.zip
            
            Status Legend:
            (OK):download completed.
            Extract WSA
            unzipping to /tmp/wsa-build-eT6Xhc6kvo_/wsa
            unzipping from /tmp/wsa-build-eT6Xhc6kvo_/wsa/WsaPackage_2301.40000.7.0_x64_Release-Nightly.msix
            Extract done
            
            Extract Magisk
            Magisk version: 25.2 (25200)
            done
            
            Extract MindTheGapps
            Archive:  ../download/MindTheGapps-x64-13.0.zip
            signed by SignApk
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/app/PrebuiltExchange3Google/PrebuiltExchange3Google.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/default-permissions/default-permissions-google.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/default-permissions/default-permissions-mtg.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/permissions/com.google.android.dialer.support.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/permissions/privapp-permissions-google-product.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/security/fsverity/gms_fsverity_cert.der  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/sysconfig/d2d_cable_migration_feature.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/sysconfig/google-hiddenapi-package-allowlist.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/sysconfig/google.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/etc/sysconfig/google_build.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/framework/com.google.android.dialer.support.jar  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/lib/libjni_latinimegoogle.so  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/lib64/libjni_latinimegoogle.so  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/overlay/GmsOverlay.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/overlay/GmsSettingsProviderOverlay.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/priv-app/AndroidAutoStub/AndroidAutoStub.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/priv-app/GmsCore/GmsCore.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/priv-app/GooglePartnerSetup/GooglePartnerSetup.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/priv-app/GoogleRestore/GoogleRestore.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/priv-app/Phonesky/Phonesky.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/product/priv-app/Velvet/Velvet.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/system_ext/etc/permissions/privapp-permissions-google-system-ext.xml  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/system_ext/priv-app/GoogleFeedback/GoogleFeedback.apk  
              inflating: /tmp/wsa-build-eT6Xhc6kvo_/gapps/system/system_ext/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk  
            Extract done
            
            Expand images
            system_ext: 99/128 files (1.0% non-contiguous), 46211/46350 blocks
            resize2fs 1.46.5 (30-Dec-2021)
            Resizing the filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/system_ext.img to 114561 (4k) blocks.
            The filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/system_ext.img is now 114561 (4k) blocks long.
            
            product: 132/144 files (0.0% non-contiguous), 75781/76009 blocks
            resize2fs 1.46.5 (30-Dec-2021)
            Resizing the filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/product.img to 192739 (4k) blocks.
            The filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/product.img is now 192739 (4k) blocks long.
            
            /: 2799/2816 files (0.4% non-contiguous), 227336/242592 blocks
            resize2fs 1.46.5 (30-Dec-2021)
            Resizing the filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/system.img to 259452 (4k) blocks.
            The filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/system.img is now 259452 (4k) blocks long.
            
            vendor: 1096/1120 files (0.5% non-contiguous), 61176/61364 blocks
            resize2fs 1.46.5 (30-Dec-2021)
            Resizing the filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/vendor.img to 64964 (4k) blocks.
            The filesystem on /tmp/wsa-build-eT6Xhc6kvo_/wsa/x64/vendor.img is now 64964 (4k) blocks long.
            
            Expand images done
            
            Mount images
            mount: /dev/loop0 mounted on /tmp/wsa-build-eT6Xhc6kvo_/system.
            mount: /dev/loop1 mounted on /tmp/wsa-build-eT6Xhc6kvo_/system/vendor.
            mount: /dev/loop2 mounted on /tmp/wsa-build-eT6Xhc6kvo_/system/product.
            mount: /dev/loop3 mounted on /tmp/wsa-build-eT6Xhc6kvo_/system/system_ext.
            done
            
            Add device administration features
            done
            
            Integrate Magisk
            /dev/ratkssal(/.*)?    u:object_r:magisk_file:s0
            /data/adb/magisk(/.*)?   u:object_r:magisk_file:s0
            Integrate Magisk done
            
            Merge Language Resources
            0048:err:explorer:initialize_display_settings Failed to query current display settings for L"\\\\.\\DISPLAY1".
            0024:fixme:nls:RtlSetThreadPreferredUILanguages 256, 0000000000000000, 0000000000000000
            0024:fixme:heap:RtlSetHeapInformation 0000000000D40000 0 000000000021E420 4 stub
            0024:fixme:heap:RtlSetHeapInformation 0000000000D40000 0 000000000021E420 4 stub
            Index Pass Completed.
            AlternateForm Qualifiers: LIGHTUNPLATED,UNPLATED
            Language Qualifiers: EN-US,EN-GB,AF-ZA,AR-SA,AZ-LATN-AZ,BG-BG,BS-LATN-BA,CA-ES,CS-CZ,CY-GB,DA-DK,DE-DE,EL-GR,ES-ES,ES-MX,ET-EE,EU-ES,FA-IR,FI-FI,FR-CA,FR-FR,GL-ES,HE-IL,HI-IN,HR-HR,HU-HU,ID-ID,IS-IS,IT-IT,JA-JP,KA-GE,KK-KZ,KO-KR,LT-LT,LV-LV,MS-MY,NB-NO,NL-NL,NN-NO,PL-PL,PT-BR,PT-PT,QPS-PLOC,QPS-PLOCA,QPS-PLOCM,RO-RO,RU-RU,SK-SK,SL-SI,SQ-AL,SR-CYRL-RS,SR-LATN-RS,SV-SE,TH-TH,TR-TR,UK-UA,VI-VN,ZH-CN,ZH-TW
            Scale Qualifiers: 200,400,150,125,100
            TargetSize Qualifiers: 256,16,20,24,30,32,36,40,48,60,64,72,80,96
            
            Finished building
            Version: 1.0
            Resource Map Name: MicrosoftCorporationII.WindowsSubsystemForAndroid
            Named Resources: 289
            Resource Candidates: 12915
            Successfully Completed
            Merge Language Resources done
            
            Add extra packages and Netpree and Netspark security certificates
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/39698488.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/3f66ddee.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/42afec87.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/482e0622.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/4a3b190e.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/4eba579e.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/6207c6f5.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/66bbb532.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/820d5f23.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/85c0c4be.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/a4f6f3c0.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/b0396035.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/ea335731.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/f9b4d31c.0': No space left on device
            cp: cannot create regular file '/tmp/wsa-build-eT6Xhc6kvo_/system/system/etc/security/cacerts/fbb5e364.0': No space left on device
            Build: an error has occurred, exit
            
            Cleanup Work Directory
            Cleanup Mount Directory
            umount: /tmp/wsa-build-eT6Xhc6kvo_/system/vendor unmounted
            umount: /tmp/wsa-build-eT6Xhc6kvo_/system/product unmounted
            umount: /tmp/wsa-build-eT6Xhc6kvo_/system/system_ext unmounted
            umount: /tmp/wsa-build-eT6Xhc6kvo_/system unmounted
            Cleanup Download Directory
            
            תגובה 1 תגובה אחרונה
            0
            • A0533057932A מנותק
              A0533057932A מנותק
              A0533057932
              כתב ב נערך לאחרונה על ידי
              #6

              ניסיתי לפתור זאת כך

              echo "Expand images"
              
              if [ ! -f /etc/mtab ]; then $SUDO ln -s /proc/self/mounts /etc/mtab; fi
              
              e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
              
              SYSTEM_EXT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system_ext.img | cut -f1) + 20000))
              
              if [ -d "$WORK_DIR"/gapps/system_ext ]; then
                  SYSTEM_EXT_SIZE=$(( SYSTEM_EXT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
              fi
              
              # add 10 MB to SYSTEM_EXT_SIZE
              SYSTEM_EXT_SIZE=$(( SYSTEM_EXT_SIZE + 20480 ))
              
              resize2fs "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$SYSTEM_EXT_SIZE"s || abort
              
              e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
              
              PRODUCT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/product.img | cut -f1) + 20000))
              
              if [ -d "$WORK_DIR"/gapps/product ]; then
                  PRODUCT_SIZE=$(( PRODUCT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
              fi
              
              resize2fs "$WORK_DIR"/wsa/"$ARCH"/product.img "$PRODUCT_SIZE"s || abort
              
              e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
              
              SYSTEM_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system.img | cut -f1) + 20000))
              
              if [ -d "$WORK_DIR"/gapps ]; then
                  SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps | cut -f1) - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
              
                  if [ -d "$WORK_DIR"/gapps/system_ext ]; then
                      SYSTEM_SIZE=$(( SYSTEM_SIZE - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
                  fi
              fi
              
              if [ -d "$WORK_DIR"/magisk ]; then
                  SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/magisk/magisk | cut -f1) ))
              fi
              
              if [ -f "$MAGISK_PATH" ]; then
                  SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1) ))
              fi
              
              if [ -d "../$ARCH/system" ]; then
                  SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1) ))
              fi
              
              resize2fs "$WORK_DIR"/wsa/"$ARCH"/system.img "$SYSTEM_SIZE"s || abort
              
              e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
              
              VENDOR_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/vendor.img | cut -f1) + 20000))
              
              resize2fs "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$VENDOR_SIZE"s || abort
              
              echo -e "Expand images done\n"
              

              אך ללא תועלת

              תגובה 1 תגובה אחרונה
              0
              • A0533057932A מנותק
                A0533057932A מנותק
                A0533057932
                כתב ב נערך לאחרונה על ידי
                #7

                @sivan22 האם יש לך רעיון לפתרון?
                כמדומני שאת השינוי שעשיתי לקחת ממך בזמנו

                תגובה 1 תגובה אחרונה
                0
                • A0533057932A מנותק
                  A0533057932A מנותק
                  A0533057932
                  כתב ב נערך לאחרונה על ידי
                  #8

                  עדכון כרגע כל ניסיון ליצור WSA מסתיים בשגיאה

                  COMMAND_LINE=--arch x64 --release-type retail --magisk-ver stable --gapps-brand MindTheGapps --gapps-variant pico  --root-sol magisk --compress    --compress-format 7z
                  INFO: Architecture: x64
                  INFO: Release Type: retail
                  INFO: Magisk Version: stable
                  INFO: GApps Brand: MindTheGapps
                  INFO: GApps Variant: pico
                  INFO: Root Solution: magisk
                  INFO: Compress Format: 7z
                  Build: RELEASE_TYPE=Retail
                  [sudo] password for ubuntu: 
                  Generate Download Links
                  Generating WSA download link: arch=x64 release_type=Retail
                  WSA Version=2301.40000.7.0
                  
                  download link: http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/f347c6de-90ec-413b-897d-20b1194934a7?P1=1677872694&P2=404&P3=2&P4=a81KLLNcJW5vCe0yr7ppDn3KOPFatWaxNZBaZ%2fX0YaQa1AYsAK9H9%2foud3sTMeuXpiGlUOqRQNI5ePtOlhq1Iw%3d%3d to /home/ubuntu/WSA/download/wsa-retail.zip
                  download link: http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/82207876-51a4-4581-80d3-09369370aadc?P1=1677844424&P2=404&P3=2&P4=DwlSQbyHVQLqrTgsCXBcsiqP7JG5h2ZgxyO0z9rTyj0H2lssK38P5zjJ1DmMhLDXA%2fdG65SOdOsbLHVS47SC9w%3d%3d to /home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
                  Generating Magisk download link: release type=stable
                  download link: https://cdn.jsdelivr.net/gh/topjohnwu/magisk-files@25.2/app-release.apk
                  Generating MindTheGapps download link: arch=x64 variant=pico
                  download link: https://downloads.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
                  Download Artifacts
                  
                  03/03 11:41:55 [NOTICE] Downloading 5 item(s)
                  
                  03/03 11:41:55 [NOTICE] GID#5ed1ba03b583b719 - Download has already completed: /home/ubuntu/WSA/download/magisk-stable.zip
                  
                  03/03 11:41:55 [NOTICE] Download complete: /home/ubuntu/WSA/download/magisk-stable.zip
                  
                  03/03 11:41:55 [NOTICE] GID#f5108eba06dff514 - Download has already completed: /home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
                  
                  03/03 11:41:55 [NOTICE] Download complete: /home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
                  
                  03/03 11:41:55 [NOTICE] GID#255d98e911099ff0 - Download has already completed: /home/ubuntu/WSA/download/wsa-retail.zip
                  
                  03/03 11:41:55 [NOTICE] Download complete: /home/ubuntu/WSA/download/wsa-retail.zip
                  
                  03/03 11:41:55 [NOTICE] CUID#7 - Redirecting to https://download.microsoft.com/download/4/7/c/47c6134b-d61f-4024-83bd-b9c9ea951c25/appx/Microsoft.VCLibs.x64.14.00.Desktop.appx
                  
                  03/03 11:41:55 [NOTICE] GID#f8e8ef5761d7b315 - Download has already completed: /home/ubuntu/WSA/download/Microsoft.VCLibs.x64.14.00.Desktop.appx
                  
                  03/03 11:41:55 [NOTICE] Download complete: /home/ubuntu/WSA/download/Microsoft.VCLibs.x64.14.00.Desktop.appx
                  
                  03/03 11:41:55 [NOTICE] CUID#11 - Redirecting to https://altushost-swe.dl.sourceforge.net/project/wsa-mtg/x86_64/20230201/MindTheGapps-13.0.0-x86_64-20230201.zip
                  
                  03/03 11:41:55 [NOTICE] GID#8164b0bb85c94851 - Download has already completed: /home/ubuntu/WSA/download/MindTheGapps-x64-13.0.zip
                  
                  03/03 11:41:55 [NOTICE] Download complete: /home/ubuntu/WSA/download/MindTheGapps-x64-13.0.zip
                  
                  Download Results:
                  gid   |stat|avg speed  |path/URI
                  ======+====+===========+=======================================================
                  5ed1ba|OK  |       0B/s|/home/ubuntu/WSA/download/magisk-stable.zip
                  f5108e|OK  |       0B/s|/home/ubuntu/WSA/download/Microsoft.UI.Xaml_x64.appx
                  255d98|OK  |       0B/s|/home/ubuntu/WSA/download/wsa-retail.zip
                  f8e8ef|OK  |       0B/s|/home/ubuntu/WSA/download/Microsoft.VCLibs.x64.14.00.Desktop.appx
                  8164b0|OK  |       0B/s|/home/ubuntu/WSA/download/MindTheGapps-x64-13.0.zip
                  
                  Status Legend:
                  (OK):download completed.
                  Extract WSA
                  unzipping to /tmp/wsa-build-Yi6tGzG6Dj_/wsa
                  unzipping from /tmp/wsa-build-Yi6tGzG6Dj_/wsa/WsaPackage_2301.40000.7.0_x64_Release-Nightly.msix
                  Extract done
                  
                  Extract Magisk
                  Magisk version: 25.2 (25200)
                  done
                  
                  Extract MindTheGapps
                  Archive:  ../download/MindTheGapps-x64-13.0.zip
                  signed by SignApk
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/app/PrebuiltExchange3Google/PrebuiltExchange3Google.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/default-permissions/default-permissions-google.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/default-permissions/default-permissions-mtg.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/permissions/com.google.android.dialer.support.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/permissions/privapp-permissions-google-product.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/security/fsverity/gms_fsverity_cert.der  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/sysconfig/d2d_cable_migration_feature.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/sysconfig/google-hiddenapi-package-allowlist.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/sysconfig/google.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/etc/sysconfig/google_build.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/framework/com.google.android.dialer.support.jar  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/lib/libjni_latinimegoogle.so  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/lib64/libjni_latinimegoogle.so  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/overlay/GmsOverlay.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/overlay/GmsSettingsProviderOverlay.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/priv-app/AndroidAutoStub/AndroidAutoStub.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/priv-app/GmsCore/GmsCore.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/priv-app/GooglePartnerSetup/GooglePartnerSetup.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/priv-app/GoogleRestore/GoogleRestore.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/priv-app/Phonesky/Phonesky.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/product/priv-app/Velvet/Velvet.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/system_ext/etc/permissions/privapp-permissions-google-system-ext.xml  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/system_ext/priv-app/GoogleFeedback/GoogleFeedback.apk  
                    inflating: /tmp/wsa-build-Yi6tGzG6Dj_/gapps/system/system_ext/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk  
                  Extract done
                  
                  Expand images
                  system_ext: 99/128 files (1.0% non-contiguous), 46211/46350 blocks
                  resize2fs 1.46.5 (30-Dec-2021)
                  Resizing the filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/system_ext.img to 114561 (4k) blocks.
                  The filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/system_ext.img is now 114561 (4k) blocks long.
                  
                  product: 132/144 files (0.0% non-contiguous), 75781/76009 blocks
                  resize2fs 1.46.5 (30-Dec-2021)
                  Resizing the filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/product.img to 192739 (4k) blocks.
                  The filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/product.img is now 192739 (4k) blocks long.
                  
                  /: 2799/2816 files (0.4% non-contiguous), 227336/242592 blocks
                  resize2fs 1.46.5 (30-Dec-2021)
                  Resizing the filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/system.img to 259452 (4k) blocks.
                  The filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/system.img is now 259452 (4k) blocks long.
                  
                  vendor: 1096/1120 files (0.5% non-contiguous), 61176/61364 blocks
                  resize2fs 1.46.5 (30-Dec-2021)
                  Resizing the filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/vendor.img to 64964 (4k) blocks.
                  The filesystem on /tmp/wsa-build-Yi6tGzG6Dj_/wsa/x64/vendor.img is now 64964 (4k) blocks long.
                  
                  Expand images done
                  
                  Mount images
                  mount: /dev/loop0 mounted on /tmp/wsa-build-Yi6tGzG6Dj_/system.
                  mount: /dev/loop1 mounted on /tmp/wsa-build-Yi6tGzG6Dj_/system/vendor.
                  mount: /dev/loop2 mounted on /tmp/wsa-build-Yi6tGzG6Dj_/system/product.
                  mount: /dev/loop3 mounted on /tmp/wsa-build-Yi6tGzG6Dj_/system/system_ext.
                  done
                  
                  Add device administration features
                  done
                  
                  Integrate Magisk
                  /dev/wexxlnmk(/.*)?    u:object_r:magisk_file:s0
                  /data/adb/magisk(/.*)?   u:object_r:magisk_file:s0
                  Integrate Magisk done
                  
                  Merge Language Resources
                  0050:err:explorer:initialize_display_settings Failed to query current display settings for L"\\\\.\\DISPLAY1".
                  0024:fixme:nls:RtlSetThreadPreferredUILanguages 256, 0000000000000000, 0000000000000000
                  0024:fixme:heap:RtlSetHeapInformation 0000000000D40000 0 000000000021E420 4 stub
                  0024:fixme:heap:RtlSetHeapInformation 0000000000D40000 0 000000000021E420 4 stub
                  Index Pass Completed.
                  AlternateForm Qualifiers: LIGHTUNPLATED,UNPLATED
                  Language Qualifiers: EN-US,EN-GB,AF-ZA,AR-SA,AZ-LATN-AZ,BG-BG,BS-LATN-BA,CA-ES,CS-CZ,CY-GB,DA-DK,DE-DE,EL-GR,ES-ES,ES-MX,ET-EE,EU-ES,FA-IR,FI-FI,FR-CA,FR-FR,GL-ES,HE-IL,HI-IN,HR-HR,HU-HU,ID-ID,IS-IS,IT-IT,JA-JP,KA-GE,KK-KZ,KO-KR,LT-LT,LV-LV,MS-MY,NB-NO,NL-NL,NN-NO,PL-PL,PT-BR,PT-PT,QPS-PLOC,QPS-PLOCA,QPS-PLOCM,RO-RO,RU-RU,SK-SK,SL-SI,SQ-AL,SR-CYRL-RS,SR-LATN-RS,SV-SE,TH-TH,TR-TR,UK-UA,VI-VN,ZH-CN,ZH-TW
                  Scale Qualifiers: 200,400,150,125,100
                  TargetSize Qualifiers: 256,16,20,24,30,32,36,40,48,60,64,72,80,96
                  
                  Finished building
                  Version: 1.0
                  Resource Map Name: MicrosoftCorporationII.WindowsSubsystemForAndroid
                  Named Resources: 289
                  Resource Candidates: 12915
                  Successfully Completed
                  Merge Language Resources done
                  
                  Add extra packages and Netpree and Netspark security certificates
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/39698488.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/3f66ddee.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/42afec87.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/482e0622.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/4a3b190e.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/4eba579e.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/6207c6f5.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/66bbb532.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/820d5f23.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/85c0c4be.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/a4f6f3c0.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/b0396035.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/ea335731.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/f9b4d31c.0': No space left on device
                  cp: cannot create regular file '/tmp/wsa-build-Yi6tGzG6Dj_/system/system/etc/security/cacerts/fbb5e364.0': No space left on device
                  Build: an error has occurred, exit
                  
                  Cleanup Work Directory
                  Cleanup Mount Directory
                  umount: /tmp/wsa-build-Yi6tGzG6Dj_/system/vendor unmounted
                  umount: /tmp/wsa-build-Yi6tGzG6Dj_/system/product unmounted
                  umount: /tmp/wsa-build-Yi6tGzG6Dj_/system/system_ext unmounted
                  umount: /tmp/wsa-build-Yi6tGzG6Dj_/system unmounted
                  Cleanup Download Directory
                  

                  עקב כך שהגרסה היא כבר הגרסה הרגילה ולא תצוגה מקדימה

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לA0533057932 ב נערך לאחרונה על ידי dovid
                    #9

                    @A0533057932
                    יש לך צורת ביטוי מעניינת...
                    אני רואה בפלט שגיאה פשוטה של חוסר מקום בדיסק.
                    אין שום קשר לתעודות אבטחה, במקרה שמה אתה מעתיק את קבצי הCA וזה נכשל מחוסר מקום בדיסק...

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    A0533057932A 2 תגובות תגובה אחרונה
                    1
                    • A0533057932A מנותק
                      A0533057932A מנותק
                      A0533057932
                      השיב לdovid ב נערך לאחרונה על ידי A0533057932
                      #10

                      @dovid אני יודע בדיוק מה השגיאה
                      אבל הבעיה היא שהקוד אמור לחשבן את הגודל ולהגדיל את המחיצה בהתאם
                      כמו כן ניסיתי למחוק את הקובץ
                      VpnDialogs
                      ועדין השגיאה נשארה אותו דבר בדיוק
                      כל ה15 לא עברו
                      9c97ba2d-1c95-4712-aa6c-1b83901bfefc-image.png
                      למרות שזה היה אמור להעביר לפחות 13 מתוכם אם זה באמת היה שגיאה של מקום פשוטה

                      תגובה 1 תגובה אחרונה
                      0
                      • A0533057932A מנותק
                        A0533057932A מנותק
                        A0533057932
                        השיב לdovid ב נערך לאחרונה על ידי
                        #11
                        פוסט זה נמחק!
                        תגובה 1 תגובה אחרונה
                        0
                        • A0533057932A מנותק
                          A0533057932A מנותק
                          A0533057932
                          כתב ב נערך לאחרונה על ידי A0533057932
                          #12

                          נראה שהצלחתי לתקן
                          ע"י הגדלה שרירותית של המחיצה בצורה הבאה

                          echo "Expand images"
                          if [ ! -f /etc/mtab ]; then $SUDO ln -s /proc/self/mounts /etc/mtab; fi
                          e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
                          SYSTEM_EXT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system_ext.img | cut -f1) + 20000))
                          if [ -d "$WORK_DIR"/gapps/system_ext ]; then
                              SYSTEM_EXT_SIZE=$(( SYSTEM_EXT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
                          fi
                          resize2fs "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$SYSTEM_EXT_SIZE"s || abort
                          
                          e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
                          PRODUCT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/product.img | cut -f1) + 20000))
                          if [ -d "$WORK_DIR"/gapps/product ]; then
                              PRODUCT_SIZE=$(( PRODUCT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
                          fi
                          resize2fs "$WORK_DIR"/wsa/"$ARCH"/product.img "$PRODUCT_SIZE"s || abort
                          
                          e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
                          SYSTEM_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system.img | cut -f1) + 90000))
                          if [ -d "$WORK_DIR"/gapps ]; then
                              SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps | cut -f1) - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
                              if [ -d "$WORK_DIR"/gapps/system_ext ]; then
                                  SYSTEM_SIZE=$(( SYSTEM_SIZE - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
                              fi
                          fi
                          if [ -d "$WORK_DIR"/magisk ]; then
                              SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/magisk/magisk | cut -f1) ))
                          fi
                          if [ -f "$MAGISK_PATH" ]; then
                              SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1) ))
                          fi
                          if [ -d "../$ARCH/system" ]; then
                              SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1) ))
                          fi
                          resize2fs "$WORK_DIR"/wsa/"$ARCH"/system.img "$SYSTEM_SIZE"s || abort
                          
                          e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
                          VENDOR_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/vendor.img | cut -f1) + 20000))
                          resize2fs "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$VENDOR_SIZE"s || abort
                          echo -e "Expand images done\n"
                          

                          עדין אני לא מבין מדוע הקוד לא בודק את גוגל התיקיה ומוסיף בהתאם כמו שהוא אמור לעשות
                          אבל עצם הבעיה נפתרה

                          תגובה 1 תגובה אחרונה
                          0

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

                          • התחברו או הירשמו כדי לחפש.
                          • פוסט ראשון
                            פוסט אחרון
                          0
                          • דף הבית
                          • קטגוריות
                          • פוסטים אחרונים
                          • משתמשים
                          • חיפוש
                          • חוקי הפורום