2022-08-29 16:29:54 +08:00
#!/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/>.
#
2023-01-11 17:05:56 +08:00
# Copyright (C) 2023 LSPosed Contributors
2022-08-29 16:29:54 +08:00
#
2022-09-04 00:43:31 +08:00
if [ ! " $BASH_VERSION " ] ; then
2022-08-29 16:29:54 +08:00
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
2022-09-10 14:58:18 +08:00
# export TMPDIR=$(dirname "$PWD")/WORK_DIR_
2022-09-07 19:53:36 +08:00
if [ " $TMPDIR " ] && [ ! -d " $TMPDIR " ] ; then
mkdir -p " $TMPDIR "
fi
2022-08-29 16:29:54 +08:00
WORK_DIR = $( mktemp -d -t wsa-build-XXXXXXXXXX_) || exit 1
2023-05-13 20:45:09 +08:00
# lowerdir
ROOT_MNT_RO = " $WORK_DIR /erofs "
VENDOR_MNT_RO = " $ROOT_MNT_RO /vendor "
PRODUCT_MNT_RO = " $ROOT_MNT_RO /product "
SYSTEM_EXT_MNT_RO = " $ROOT_MNT_RO /system_ext "
2023-05-26 21:55:30 +08:00
# upperdir
ROOT_MNT_RW = " $WORK_DIR /upper "
VENDOR_MNT_RW = " $ROOT_MNT_RW /vendor "
PRODUCT_MNT_RW = " $ROOT_MNT_RW /product "
SYSTEM_EXT_MNT_RW = " $ROOT_MNT_RW /system_ext "
SYSTEM_MNT_RW = " $ROOT_MNT_RW /system "
2023-05-13 20:45:09 +08:00
# merged
ROOT_MNT = " $WORK_DIR /system_root_merged "
2023-03-18 13:56:49 +08:00
SYSTEM_MNT = " $ROOT_MNT /system "
VENDOR_MNT = " $ROOT_MNT /vendor "
PRODUCT_MNT = " $ROOT_MNT /product "
SYSTEM_EXT_MNT = " $ROOT_MNT /system_ext "
2023-05-13 20:45:09 +08:00
declare -A LOWER_PARTITION = ( [ "zsystem" ] = " $ROOT_MNT_RO " [ "vendor" ] = " $VENDOR_MNT_RO " [ "product" ] = " $PRODUCT_MNT_RO " [ "system_ext" ] = " $SYSTEM_EXT_MNT_RO " )
2023-05-26 21:55:30 +08:00
declare -A UPPER_PARTITION = ( [ "zsystem" ] = " $SYSTEM_MNT_RW " [ "vendor" ] = " $VENDOR_MNT_RW " [ "product" ] = " $PRODUCT_MNT_RW " [ "system_ext" ] = " $SYSTEM_EXT_MNT_RW " )
2023-05-13 20:45:09 +08:00
declare -A MERGED_PARTITION = ( [ "zsystem" ] = " $ROOT_MNT " [ "vendor" ] = " $VENDOR_MNT " [ "product" ] = " $PRODUCT_MNT " [ "system_ext" ] = " $SYSTEM_EXT_MNT " )
2023-01-03 18:04:05 +08:00
DOWNLOAD_DIR = ../download
DOWNLOAD_CONF_NAME = download.list
2023-05-12 00:07:27 +08:00
PYTHON_VENV_DIR = " $( dirname " $PWD " ) /python3-env "
2023-05-24 18:09:59 +08:00
EROFS_USE_FUSE = 1
2022-09-04 00:43:31 +08:00
umount_clean( ) {
2023-05-13 20:45:09 +08:00
if [ -d " $ROOT_MNT " ] || [ -d " $ROOT_MNT_RO " ] ; then
2023-01-03 16:47:58 +08:00
echo "Cleanup Mount Directory"
2023-05-13 20:45:09 +08:00
for PART in " ${ LOWER_PARTITION [@] } " ; do
2023-05-24 18:09:59 +08:00
sudo umount -v " $PART "
2023-05-13 20:45:09 +08:00
done
2023-05-26 21:55:30 +08:00
for PART in " ${ UPPER_PARTITION [@] } " ; do
sudo rm -rf " ${ PART : ? } "
done
2023-05-13 20:45:09 +08:00
for PART in " ${ MERGED_PARTITION [@] } " ; do
2023-05-24 18:09:59 +08:00
sudo umount -v " $PART "
2023-05-13 20:45:09 +08:00
done
2023-04-18 17:11:37 +08:00
sudo rm -rf " ${ WORK_DIR : ? } "
2022-08-30 23:47:09 +08:00
else
rm -rf " ${ WORK_DIR : ? } "
2022-08-29 16:29:54 +08:00
fi
2022-09-07 19:53:36 +08:00
if [ " $TMPDIR " ] && [ -d " $TMPDIR " ] ; then
2023-01-11 17:12:20 +09:00
echo "Cleanup Temp Directory"
2022-09-07 19:53:36 +08:00
rm -rf " ${ TMPDIR : ? } "
unset TMPDIR
fi
2023-01-03 18:04:05 +08:00
rm -f " ${ DOWNLOAD_DIR : ? } / $DOWNLOAD_CONF_NAME "
2023-05-26 20:23:22 +08:00
if [ " $( python3 -c 'import sys ; print( 1 if sys.prefix != sys.base_prefix else 0 )' ) " = "1" ] ; then
2023-05-12 00:07:27 +08:00
echo "deactivate python3 venv"
deactivate
fi
2022-08-29 16:29:54 +08:00
}
2023-01-03 16:47:58 +08:00
trap umount_clean EXIT
OUTPUT_DIR = ../output
2023-03-18 13:56:49 +08:00
WSA_WORK_ENV = " ${ WORK_DIR : ? } /ENV "
2023-01-03 16:47:58 +08:00
if [ -f " $WSA_WORK_ENV " ] ; then rm -f " ${ WSA_WORK_ENV : ? } " ; fi
touch " $WSA_WORK_ENV "
export WSA_WORK_ENV
2022-09-04 00:43:31 +08:00
clean_download( ) {
2022-08-29 16:29:54 +08:00
if [ -d " $DOWNLOAD_DIR " ] ; then
echo "Cleanup Download Directory"
2022-08-30 21:59:26 +08:00
if [ " $CLEAN_DOWNLOAD_WSA " ] ; then
2022-08-29 16:29:54 +08:00
rm -f " ${ WSA_ZIP_PATH : ? } "
fi
2022-08-30 21:59:26 +08:00
if [ " $CLEAN_DOWNLOAD_MAGISK " ] ; then
2022-08-29 16:29:54 +08:00
rm -f " ${ MAGISK_PATH : ? } "
fi
2022-08-30 21:59:26 +08:00
if [ " $CLEAN_DOWNLOAD_GAPPS " ] ; then
2022-08-29 16:29:54 +08:00
rm -f " ${ GAPPS_PATH : ? } "
fi
2023-03-08 22:40:19 +08:00
if [ " $CLEAN_DOWNLOAD_KERNELSU " ] ; then
rm -f " ${ KERNELSU_PATH : ? } "
rm -f " ${ KERNELSU_INFO : ? } "
fi
2022-08-29 16:29:54 +08:00
fi
}
abort( ) {
2023-05-16 07:46:43 +08:00
[ " $1 " ] && echo -e " ERROR: $1 "
2022-08-29 16:29:54 +08:00
echo "Build: an error has occurred, exit"
if [ -d " $WORK_DIR " ] ; then
2023-01-11 17:12:20 +09:00
echo -e "\nCleanup Work Directory"
2022-08-29 16:29:54 +08:00
umount_clean
fi
clean_download
exit 1
}
trap abort INT TERM
2022-12-08 16:06:23 +08:00
Gen_Rand_Str( ) {
2023-01-11 14:06:49 +05:30
head /dev/urandom | tr -dc '[:lower:]' | head -c" $1 "
2022-08-29 16:29:54 +08:00
}
2022-09-04 00:43:31 +08:00
default( ) {
2022-08-30 21:59:26 +08:00
ARCH = x64
RELEASE_TYPE = retail
MAGISK_VER = stable
2022-09-10 15:02:46 +08:00
GAPPS_BRAND = MindTheGapps
2022-08-30 21:59:26 +08:00
GAPPS_VARIANT = pico
ROOT_SOL = magisk
}
2022-09-04 00:43:31 +08:00
exit_with_message( ) {
2022-08-31 00:50:21 +08:00
echo " ERROR: $1 "
usage
2022-09-03 12:24:28 +08:00
exit 1
2022-08-31 00:50:21 +08:00
}
2023-03-18 13:56:49 +08:00
resize_img( ) {
2023-05-13 20:45:09 +08:00
sudo e2fsck -pf " $1 " || return 1
2023-03-18 13:56:49 +08:00
if [ " $2 " ] ; then
2023-05-13 20:45:09 +08:00
sudo resize2fs " $1 " " $2 " || return 1
2023-03-18 13:56:49 +08:00
else
2023-05-13 20:45:09 +08:00
sudo resize2fs -M " $1 " || return 1
2023-03-18 13:56:49 +08:00
fi
return 0
}
2023-05-13 20:45:09 +08:00
vhdx_to_raw_img( ) {
2023-03-18 18:49:31 +08:00
qemu-img convert -q -f vhdx -O raw " $1 " " $2 " || return 1
2023-05-13 20:45:09 +08:00
rm -f " $1 " || return 1
}
2023-05-26 21:55:30 +08:00
mk_overlayfs( ) { # label lowerdir upperdir merged
local context own
local workdir = " $WORK_DIR /worker/ $1 "
local lowerdir = " $2 "
local upperdir = " $3 "
local merged = " $4 "
echo " mk_overlayfs: label $1
2023-05-13 20:45:09 +08:00
lowerdir = $lowerdir
upperdir = $upperdir
workdir = $workdir
merged = $merged "
sudo mkdir -p -m 755 " $workdir " " $upperdir " " $merged "
2023-05-26 21:55:30 +08:00
case " $1 " in
2023-05-13 20:45:09 +08:00
vendor)
context = "u:object_r:vendor_file:s0"
own = "0:2000"
; ;
system)
context = "u:object_r:rootfs:s0"
own = "0:0"
; ;
*)
context = "u:object_r:system_file:s0"
own = "0:0"
; ;
esac
sudo chown -R " $own " " $upperdir " " $workdir " " $merged "
sudo setfattr -n security.selinux -v " $context " " $upperdir "
sudo setfattr -n security.selinux -v " $context " " $workdir "
sudo setfattr -n security.selinux -v " $context " " $merged "
2023-05-26 01:26:17 +08:00
sudo mount -vt overlay overlay -olowerdir= " $lowerdir " ,upperdir= " $upperdir " ,workdir= " $workdir " " $merged "
2023-05-13 20:45:09 +08:00
}
2023-05-26 21:55:30 +08:00
mk_erofs_umount( ) { # dir imgpath upperdir
2023-05-24 18:09:59 +08:00
sudo " ../bin/ $HOST_ARCH /mkfs.erofs " -zlz4hc -T1230768000 --chunksize= 4096 --exclude-regex= "lost+found" " $2 " .erofs " $1 " || abort " Failed to make erofs image from $1 "
2023-05-13 20:45:09 +08:00
sudo umount -v " $1 "
sudo rm -f " $2 "
sudo mv " $2 " .erofs " $2 "
2023-05-26 21:55:30 +08:00
if [ " $3 " ] ; then
sudo rm -rf " $3 "
fi
2023-05-13 20:45:09 +08:00
}
ro_ext4_img_to_rw( ) {
2023-05-14 00:33:09 +08:00
resize_img " $1 " " $(( $( du --apparent-size -sB512 " $1 " | cut -f1) * 2 )) " s || return 1
e2fsck -fp -E unshare_blocks " $1 " || return 1
resize_img " $1 " || return 1
2023-03-18 13:56:49 +08:00
return 0
}
2023-05-24 18:09:59 +08:00
mount_erofs( ) {
if [ " $EROFS_USE_FUSE " ] ; then
sudo " ../bin/ $HOST_ARCH /fuse.erofs " " $1 " " $2 " || return 1
else
sudo mount -v -t erofs -o ro,loop " $1 " " $2 " || return 1
fi
}
2023-03-29 18:50:56 +08:00
# workaround for Debian
2023-03-29 20:11:29 +08:00
# In Debian /usr/sbin is not in PATH and some utilities in there are in use
2023-03-29 20:08:32 +08:00
[ -d /usr/sbin ] && export PATH = " /usr/sbin: $PATH "
2023-03-29 18:50:56 +08:00
# In Debian /etc/mtab is not exist
2023-03-18 13:56:49 +08:00
[ -f /etc/mtab ] || ln -s /proc/self/mounts /etc/mtab
2022-09-04 00:32:32 +08:00
ARCH_MAP = (
"x64"
"arm64"
)
RELEASE_TYPE_MAP = (
"retail"
"RP"
"WIS"
"WIF"
)
MAGISK_VER_MAP = (
"stable"
"beta"
"canary"
"debug"
2022-10-26 22:14:59 +08:00
"release"
2022-09-04 00:32:32 +08:00
)
GAPPS_BRAND_MAP = (
"OpenGApps"
"MindTheGapps"
"none"
)
GAPPS_VARIANT_MAP = (
"super"
"stock"
"full"
"mini"
"micro"
"nano"
"pico"
"tvstock"
"tvmini"
)
ROOT_SOL_MAP = (
"magisk"
2023-03-08 22:40:19 +08:00
"kernelsu"
2022-09-04 00:32:32 +08:00
"none"
)
2022-10-22 01:03:02 +08:00
COMPRESS_FORMAT_MAP = (
"7z"
2022-10-22 18:30:46 +08:00
"zip"
2022-10-22 01:03:02 +08:00
)
2022-09-04 00:43:31 +08:00
ARR_TO_STR( ) {
2022-09-04 00:32:32 +08:00
local arr = ( " $@ " )
local joined
2022-09-04 00:43:31 +08:00
printf -v joined "%s, " " ${ arr [@] } "
2022-09-04 00:32:32 +08:00
echo " ${ joined %, } "
}
2022-11-15 10:07:29 +09:00
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"
2022-09-04 00:43:31 +08:00
usage( ) {
2022-08-30 21:59:26 +08:00
default
2022-11-15 10:07:29 +09:00
echo -e "
Usage:
2022-12-09 18:10:28 +08:00
--arch Architecture of WSA.
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ ARCH_MAP [@] } " )
Default: $ARCH
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
--release-type Release type of WSA.
RP means Release Preview, WIS means Insider Slow, WIF means Insider Fast.
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ RELEASE_TYPE_MAP [@] } " )
Default: $RELEASE_TYPE
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
--magisk-ver Magisk version.
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ MAGISK_VER_MAP [@] } " )
Default: $MAGISK_VER
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
--gapps-brand GApps brand.
\" none\" for no integration of GApps
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ GAPPS_BRAND_MAP [@] } " )
Default: $GAPPS_BRAND
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
--gapps-variant GApps variant.
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ GAPPS_VARIANT_MAP [@] } " )
Default: $GAPPS_VARIANT
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
--root-sol Root solution.
\" none\" means no root.
2022-09-04 00:32:32 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ ROOT_SOL_MAP [@] } " )
Default: $ROOT_SOL
2022-09-04 00:32:32 +08:00
2022-10-22 01:03:02 +08:00
--compress-format
2022-12-09 18:10:28 +08:00
Compress format of output file.
If this option is not specified and --compress is not specified, the generated file will not be compressed
2022-10-22 01:03:02 +08:00
2022-12-09 18:10:28 +08:00
Possible values: $( ARR_TO_STR " ${ COMPRESS_FORMAT_MAP [@] } " )
2022-10-22 01:03:02 +08:00
2022-09-04 00:32:32 +08:00
Additional Options:
2022-12-09 18:10:28 +08:00
--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
2022-09-04 00:32:32 +08:00
2022-09-04 00:43:31 +08:00
Example:
2022-09-04 00:32:32 +08:00
./build.sh --release-type RP --magisk-ver beta --gapps-variant pico --remove-amazon
2022-11-15 09:10:25 +08:00
./build.sh --arch arm64 --release-type WIF --gapps-brand OpenGApps --nofix-props
./build.sh --release-type WIS --gapps-brand none
2022-09-04 00:32:32 +08:00
./build.sh --offline --gapps-variant pico --magisk-custom
2022-08-29 16:29:54 +08:00
"
}
ARGUMENT_LIST = (
2022-09-04 00:43:31 +08:00
"arch:"
"release-type:"
"magisk-ver:"
"gapps-brand:"
"gapps-variant:"
2022-11-15 10:07:29 +09:00
"nofix-props"
2022-09-04 00:43:31 +08:00
"root-sol:"
2022-10-22 01:03:02 +08:00
"compress-format:"
2022-09-04 00:43:31 +08:00
"remove-amazon"
"compress"
"offline"
"magisk-custom"
"debug"
"help"
2022-12-09 18:10:28 +08:00
"skip-download-wsa"
2022-08-29 16:29:54 +08:00
)
2022-08-30 21:59:26 +08:00
default
2022-09-04 00:43:31 +08:00
opts = $(
getopt \
--longoptions " $( printf "%s," " ${ ARGUMENT_LIST [@] } " ) " \
--name " $( basename " $0 " ) " \
--options "" \
-- " $@ "
2022-09-01 10:55:19 +08:00
) || exit_with_message "Failed to parse options, please check your input"
2022-08-29 16:29:54 +08:00
eval set --" $opts "
while [ [ $# -gt 0 ] ] ; do
case " $1 " in
2022-12-09 18:10:28 +08:00
--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; ;
2022-08-29 16:29:54 +08:00
esac
done
2022-11-11 15:40:54 +08:00
if [ " $CUSTOM_MAGISK " ] ; then
if [ -z " $MAGISK_VER " ] ; then
MAGISK_VER = $CUSTOM_MAGISK
fi
fi
2022-09-04 00:43:31 +08:00
check_list( ) {
2022-08-30 23:47:09 +08:00
local input = $1
2022-10-22 01:03:02 +08:00
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
2022-08-30 23:47:09 +08:00
}
2022-08-29 16:29:54 +08:00
2022-08-30 23:47:09 +08:00
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 [@] } "
2022-10-22 01:03:02 +08:00
check_list " $COMPRESS_FORMAT " "Compress Format" " ${ COMPRESS_FORMAT_MAP [@] } "
2022-08-30 23:47:09 +08:00
if [ " $DEBUG " ] ; then
set -x
fi
2022-09-17 21:23:18 +08:00
require_su( ) {
2023-01-02 17:39:29 +08:00
if test " $( id -u) " != "0" ; then
2023-04-18 17:11:37 +08:00
if [ " $( sudo id -u) " != "0" ] ; then
2023-05-26 16:12:04 +08:00
abort "sudo is required to run this script"
2022-09-23 16:31:12 +08:00
fi
2022-09-17 21:23:18 +08:00
fi
}
2023-05-12 00:07:27 +08:00
# shellcheck disable=SC1091
[ -f " $PYTHON_VENV_DIR /bin/activate " ] && {
source " $PYTHON_VENV_DIR /bin/activate " || abort "Failed to activate virtual environment, please re-run install_deps.sh"
}
2022-08-30 23:47:09 +08:00
declare -A RELEASE_NAME_MAP = ( [ "retail" ] = "Retail" [ "RP" ] = "Release Preview" [ "WIS" ] = "Insider Slow" [ "WIF" ] = "Insider Fast" )
2022-12-08 16:06:23 +08:00
declare -A ANDROID_API_MAP = ( [ "30" ] = "11.0" [ "32" ] = "12.1" [ "33" ] = "13.0" )
2022-08-30 23:47:09 +08:00
RELEASE_NAME = ${ RELEASE_NAME_MAP [ $RELEASE_TYPE ] } || abort
2022-09-23 16:31:12 +08:00
echo -e " Build: RELEASE_TYPE= $RELEASE_NAME "
2022-08-31 01:10:20 +08:00
2022-11-23 16:10:41 +08:00
WSA_ZIP_PATH = $DOWNLOAD_DIR /wsa-$RELEASE_TYPE .zip
2023-04-11 00:43:27 +08:00
vclibs_PATH = " $DOWNLOAD_DIR /Microsoft.VCLibs.140.00_ $ARCH .appx "
UWPVCLibs_PATH = " $DOWNLOAD_DIR /Microsoft.VCLibs.140.00.UWPDesktop_ $ARCH .appx "
xaml_PATH = " $DOWNLOAD_DIR /Microsoft.UI.Xaml.2.8_ $ARCH .appx "
2022-10-26 22:14:59 +08:00
MAGISK_ZIP = magisk-$MAGISK_VER .zip
MAGISK_PATH = $DOWNLOAD_DIR /$MAGISK_ZIP
2023-03-18 13:56:49 +08:00
if [ " $CUSTOM_MAGISK " ] ; then
2022-08-31 01:10:20 +08:00
if [ ! -f " $MAGISK_PATH " ] ; then
2022-10-26 22:14:59 +08:00
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
2023-05-16 07:46:43 +08:00
abort " Custom Magisk $MAGISK_ZIP not found\nPlease put custom Magisk in $DOWNLOAD_DIR "
2022-10-26 22:14:59 +08:00
fi
2022-08-31 01:10:20 +08:00
fi
fi
2023-01-11 17:05:56 +08:00
ANDROID_API = 33
2022-12-08 16:06:23 +08:00
update_gapps_zip_name( ) {
if [ " $GAPPS_BRAND " = "OpenGApps" ] ; then
ANDROID_API = 30
2023-03-18 13:56:49 +08:00
GAPPS_ZIP_NAME = $GAPPS_BRAND -$ARCH -${ ANDROID_API_MAP [ $ANDROID_API ] } -$GAPPS_VARIANT .zip
2022-12-08 16:06:23 +08:00
else
2023-03-18 13:56:49 +08:00
GAPPS_ZIP_NAME = $GAPPS_BRAND -$ARCH -${ ANDROID_API_MAP [ $ANDROID_API ] } .zip
2022-12-08 16:06:23 +08:00
fi
GAPPS_PATH = $DOWNLOAD_DIR /$GAPPS_ZIP_NAME
}
2023-05-14 00:33:09 +08:00
WSA_MAIN_VER = 0
2023-04-12 02:43:07 +08:00
update_ksu_zip_name( ) {
2023-05-16 07:46:43 +08:00
KERNEL_VER = "5.10.117.2"
if [ " $WSA_MAIN_VER " -ge "2303" ] ; then
2023-04-12 02:43:07 +08:00
KERNEL_VER = "5.15.78.1"
2023-05-16 07:46:43 +08:00
fi
if [ " $WSA_MAIN_VER " -ge "2304" ] ; then
2023-05-16 07:36:37 +09:00
KERNEL_VER = "5.15.94.1"
2023-04-12 02:43:07 +08:00
fi
KERNELSU_ZIP_NAME = kernelsu-$ARCH -$KERNEL_VER .zip
KERNELSU_PATH = $DOWNLOAD_DIR /$KERNELSU_ZIP_NAME
KERNELSU_INFO = " $KERNELSU_PATH .info "
}
2023-03-18 13:56:49 +08:00
if [ -z ${ OFFLINE +x } ] ; then
2022-09-17 21:23:18 +08:00
require_su
2023-03-18 13:56:49 +08:00
if [ " $DOWN_WSA " != "no" ] ; then
2022-12-09 18:10:28 +08:00
echo "Generate Download Links"
python3 generateWSALinks.py " $ARCH " " $RELEASE_TYPE " " $DOWNLOAD_DIR " " $DOWNLOAD_CONF_NAME " || abort
2023-03-18 13:56:49 +08:00
# shellcheck disable=SC1090
source " $WSA_WORK_ENV " || abort
2022-12-09 18:10:28 +08:00
else
2023-05-14 00:33:09 +08:00
WSA_MAIN_VER = $( python3 getWSAMainVersion.py " $ARCH " " $WSA_ZIP_PATH " )
2022-12-09 18:10:28 +08:00
fi
2023-05-14 00:33:09 +08:00
if [ [ " $WSA_MAIN_VER " -lt 2211 ] ] ; then
2023-01-11 17:05:56 +08:00
ANDROID_API = 32
2023-04-12 02:43:07 +08:00
fi
2023-03-08 22:40:19 +08:00
if [ " $ROOT_SOL " = "magisk" ] || [ " $GAPPS_BRAND " != "none" ] ; then
2023-03-18 13:56:49 +08:00
if [ -z ${ CUSTOM_MAGISK +x } ] ; then
2023-03-08 22:40:19 +08:00
python3 generateMagiskLink.py " $MAGISK_VER " " $DOWNLOAD_DIR " " $DOWNLOAD_CONF_NAME " || abort
fi
fi
if [ " $ROOT_SOL " = "kernelsu" ] ; then
2023-05-16 07:46:43 +08:00
update_ksu_zip_name
2023-03-08 22:40:19 +08:00
python3 generateKernelSULink.py " $ARCH " " $DOWNLOAD_DIR " " $DOWNLOAD_CONF_NAME " " $KERNEL_VER " " $KERNELSU_ZIP_NAME " || abort
2023-03-18 13:56:49 +08:00
# shellcheck disable=SC1090
source " $WSA_WORK_ENV " || abort
2023-03-08 22:40:19 +08:00
# shellcheck disable=SC2153
2023-03-18 13:56:49 +08:00
echo " KERNELSU_VER= $KERNELSU_VER " >" $KERNELSU_INFO "
2022-08-29 16:29:54 +08:00
fi
2022-09-10 15:40:21 +09:00
if [ " $GAPPS_BRAND " != "none" ] ; then
2023-05-16 15:06:20 +08:00
update_gapps_zip_name
2022-12-08 16:06:23 +08:00
python3 generateGappsLink.py " $ARCH " " $GAPPS_BRAND " " $GAPPS_VARIANT " " $DOWNLOAD_DIR " " $DOWNLOAD_CONF_NAME " " $ANDROID_API " " $GAPPS_ZIP_NAME " || abort
2022-08-29 16:29:54 +08:00
fi
echo "Download Artifacts"
2023-03-18 13:56:49 +08:00
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
2022-08-29 16:29:54 +08:00
echo "We have encountered an error while downloading files."
exit 1
fi
2023-01-11 17:05:56 +08:00
else # Offline mode
2023-05-14 00:33:09 +08:00
WSA_MAIN_VER = $( python3 getWSAMainVersion.py " $ARCH " " $WSA_ZIP_PATH " )
if [ [ " $WSA_MAIN_VER " -lt 2211 ] ] ; then
2023-01-11 17:05:56 +08:00
ANDROID_API = 32
2023-04-12 02:43:07 +08:00
fi
2023-04-11 00:43:27 +08:00
declare -A FILES_CHECK_LIST = ( [ WSA_ZIP_PATH] = " $WSA_ZIP_PATH " [ xaml_PATH] = " $xaml_PATH " [ vclibs_PATH] = " $vclibs_PATH " [ UWPVCLibs_PATH] = " $UWPVCLibs_PATH " )
2023-03-08 22:40:19 +08:00
if [ " $GAPPS_BRAND " != "none" ] || [ " $ROOT_SOL " = "magisk" ] ; then
FILES_CHECK_LIST += ( [ "MAGISK_PATH" ] = " $MAGISK_PATH " )
fi
if [ " $ROOT_SOL " = "kernelsu" ] ; then
2023-05-16 07:46:43 +08:00
update_ksu_zip_name
2023-03-08 22:40:19 +08:00
FILES_CHECK_LIST += ( [ "KERNELSU_PATH" ] = " $KERNELSU_PATH " )
fi
if [ " $GAPPS_BRAND " != 'none' ] ; then
2023-05-16 07:46:43 +08:00
update_gapps_zip_name
2023-03-08 22:40:19 +08:00
FILES_CHECK_LIST += ( [ "GAPPS_PATH" ] = " $GAPPS_PATH " )
fi
2022-08-30 21:59:26 +08:00
for i in " ${ FILES_CHECK_LIST [@] } " ; do
if [ ! -f " $i " ] ; then
echo " Offline mode: missing [ $i ]. "
OFFLINE_ERR = "1"
fi
done
if [ " $OFFLINE_ERR " ] ; then
2022-08-29 18:51:16 +08:00
echo "Offline mode: Some files are missing, please disable offline mode."
2022-08-29 16:29:54 +08:00
exit 1
fi
2022-09-17 21:23:18 +08:00
require_su
2022-08-29 16:29:54 +08:00
fi
echo "Extract WSA"
if [ -f " $WSA_ZIP_PATH " ] ; then
2023-03-18 13:56:49 +08:00
if ! python3 extractWSA.py " $ARCH " " $WSA_ZIP_PATH " " $WORK_DIR " " $WSA_WORK_ENV " ; then
2022-08-29 16:29:54 +08:00
CLEAN_DOWNLOAD_WSA = 1
2023-05-16 07:46:43 +08:00
abort "Unzip WSA failed, is the download incomplete?"
2022-08-29 16:29:54 +08:00
fi
echo -e "Extract done\n"
2023-03-18 13:56:49 +08:00
# shellcheck disable=SC1090
source " $WSA_WORK_ENV " || abort
2022-08-29 16:29:54 +08:00
else
echo "The WSA zip package does not exist, is the download incomplete?"
exit 1
fi
2023-03-08 22:40:19 +08:00
if [ " $GAPPS_BRAND " != "none" ] || [ " $ROOT_SOL " = "magisk" ] ; then
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
CLEAN_DOWNLOAD_MAGISK = 1
2023-05-16 07:46:43 +08:00
abort "Unzip Magisk failed, is the download incomplete?"
2023-03-08 22:40:19 +08:00
fi
2023-03-18 13:56:49 +08:00
# shellcheck disable=SC1090
source " $WSA_WORK_ENV " || abort
2023-05-15 02:24:01 +08:00
if [ " $MAGISK_VERSION_CODE " -lt 26000 ] && [ " $MAGISK_VER " != "stable" ] && [ -z ${ CUSTOM_MAGISK +x } ] ; then
2023-05-16 07:46:43 +08:00
abort "Please install Magisk 26.0+"
2023-03-08 22:40:19 +08:00
fi
2023-04-18 17:11:37 +08:00
sudo chmod +x " ../linker/ $HOST_ARCH /linker64 " || abort
sudo patchelf --set-interpreter " ../linker/ $HOST_ARCH /linker64 " " $WORK_DIR /magisk/magiskpolicy " || abort
2023-03-18 13:56:49 +08:00
chmod +x " $WORK_DIR /magisk/magiskpolicy " || abort
2023-03-08 22:40:19 +08:00
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
2022-08-29 16:29:54 +08:00
fi
2023-03-08 22:40:19 +08:00
echo -e "done\n"
fi
if [ " $ROOT_SOL " = "kernelsu" ] ; then
2023-05-16 07:46:43 +08:00
update_ksu_zip_name
2023-03-08 22:40:19 +08:00
echo "Extract KernelSU"
# shellcheck disable=SC1090
source " ${ KERNELSU_INFO : ? } " || abort
2023-03-18 13:56:49 +08:00
if ! unzip " $KERNELSU_PATH " -d " $WORK_DIR /kernelsu " ; then
2023-03-08 22:40:19 +08:00
CLEAN_DOWNLOAD_KERNELSU = 1
2023-05-16 07:46:43 +08:00
abort "Unzip KernelSU failed, package is corrupted?"
2023-03-04 03:14:45 +08:00
fi
2023-03-08 22:40:19 +08:00
if [ " $ARCH " = "x64" ] ; then
2023-03-18 13:56:49 +08:00
mv " $WORK_DIR /kernelsu/bzImage " " $WORK_DIR /kernelsu/kernel "
2023-03-08 22:40:19 +08:00
elif [ " $ARCH " = "arm64" ] ; then
2023-03-18 13:56:49 +08:00
mv " $WORK_DIR /kernelsu/Image " " $WORK_DIR /kernelsu/kernel "
2023-03-08 22:40:19 +08:00
fi
echo -e "done\n"
2022-08-29 16:29:54 +08:00
fi
2022-09-03 23:44:52 +08:00
if [ " $GAPPS_BRAND " != 'none' ] ; then
2023-05-16 07:46:43 +08:00
update_gapps_zip_name
2022-09-22 19:37:17 +08:00
echo " Extract $GAPPS_BRAND "
2023-03-18 13:56:49 +08:00
mkdir -p " $WORK_DIR /gapps " || abort
2022-08-29 16:29:54 +08:00
if [ -f " $GAPPS_PATH " ] ; then
if [ " $GAPPS_BRAND " = "OpenGApps" ] ; then
2023-03-18 13:56:49 +08:00
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
2022-08-29 16:29:54 +08:00
CLEAN_DOWNLOAD_GAPPS = 1
2023-05-16 07:46:43 +08:00
abort "Unzip OpenGApps failed, is the download incomplete?"
2022-08-29 16:29:54 +08:00
fi
else
2023-03-18 13:56:49 +08:00
if ! unzip " $GAPPS_PATH " "system/*" -x "system/addon.d/*" "system/system_ext/priv-app/SetupWizard/*" -d " $WORK_DIR /gapps " ; then
2022-12-08 20:06:42 +08:00
CLEAN_DOWNLOAD_GAPPS = 1
2023-05-16 07:46:43 +08:00
abort "Unzip MindTheGapps failed, package is corrupted?"
2022-08-29 16:29:54 +08:00
fi
2023-03-18 13:56:49 +08:00
mv " $WORK_DIR /gapps/system/ " * " $WORK_DIR /gapps " || abort
rm -rf " ${ WORK_DIR : ? } /gapps/system " || abort
2022-08-29 16:29:54 +08:00
fi
2023-03-18 13:56:49 +08:00
cp -r " ../ $ARCH /gapps/ " * " $WORK_DIR /gapps " || abort
2022-08-29 16:29:54 +08:00
else
2023-05-16 07:46:43 +08:00
abort " The $GAPPS_BRAND zip package does not exist. "
2022-08-29 16:29:54 +08:00
fi
echo -e "Extract done\n"
fi
2023-05-14 00:33:09 +08:00
if [ [ " $WSA_MAIN_VER " -ge 2302 ] ] ; then
2023-05-13 20:45:09 +08:00
echo "Convert vhdx to RAW image"
vhdx_to_raw_img " $WORK_DIR /wsa/ $ARCH /system_ext.vhdx " " $WORK_DIR /wsa/ $ARCH /system_ext.img " || abort
vhdx_to_raw_img " $WORK_DIR /wsa/ $ARCH /product.vhdx " " $WORK_DIR /wsa/ $ARCH /product.img " || abort
vhdx_to_raw_img " $WORK_DIR /wsa/ $ARCH /system.vhdx " " $WORK_DIR /wsa/ $ARCH /system.img " || abort
vhdx_to_raw_img " $WORK_DIR /wsa/ $ARCH /vendor.vhdx " " $WORK_DIR /wsa/ $ARCH /vendor.img " || abort
echo -e "Convert vhdx to RAW image done\n"
2022-08-29 16:29:54 +08:00
fi
2023-05-24 18:09:59 +08:00
2023-05-14 00:33:09 +08:00
if [ [ " $WSA_MAIN_VER " -ge 2304 ] ] ; then
2023-05-13 20:45:09 +08:00
echo "Mount images"
sudo mkdir -p -m 755 " $ROOT_MNT_RO " || abort
sudo chown "0:0" " $ROOT_MNT_RO " || abort
sudo setfattr -n security.selinux -v "u:object_r:rootfs:s0" " $ROOT_MNT_RO " || abort
2023-05-24 18:09:59 +08:00
mount_erofs " $WORK_DIR /wsa/ $ARCH /system.img " " $ROOT_MNT_RO " || abort
mount_erofs " $WORK_DIR /wsa/ $ARCH /vendor.img " " $VENDOR_MNT_RO " || abort
mount_erofs " $WORK_DIR /wsa/ $ARCH /product.img " " $PRODUCT_MNT_RO " || abort
mount_erofs " $WORK_DIR /wsa/ $ARCH /system_ext.img " " $SYSTEM_EXT_MNT_RO " || abort
2023-05-13 20:45:09 +08:00
echo -e "done\n"
echo "Create overlayfs for EROFS"
2023-05-26 21:55:30 +08:00
mk_overlayfs system " $ROOT_MNT_RO " " $SYSTEM_MNT_RW " " $ROOT_MNT " || abort
mk_overlayfs vendor " $VENDOR_MNT_RO " " $VENDOR_MNT_RW " " $VENDOR_MNT " || abort
mk_overlayfs product " $PRODUCT_MNT_RO " " $PRODUCT_MNT_RW " " $PRODUCT_MNT " || abort
mk_overlayfs system_ext " $SYSTEM_EXT_MNT_RO " " $SYSTEM_EXT_MNT_RW " " $SYSTEM_EXT_MNT " || abort
2023-05-13 20:45:09 +08:00
echo -e "Create overlayfs for EROFS done\n"
2023-05-14 00:33:09 +08:00
elif [ [ " $WSA_MAIN_VER " -ge 2302 ] ] ; then
2023-05-13 20:45:09 +08:00
echo "Remove read-only flag for read-only EXT4 image"
2023-05-14 00:33:09 +08:00
ro_ext4_img_to_rw " $WORK_DIR /wsa/ $ARCH /system_ext.img " || abort
ro_ext4_img_to_rw " $WORK_DIR /wsa/ $ARCH /product.img " || abort
ro_ext4_img_to_rw " $WORK_DIR /wsa/ $ARCH /system.img " || abort
ro_ext4_img_to_rw " $WORK_DIR /wsa/ $ARCH /vendor.img " || abort
echo -e "Remove read-only flag for read-only EXT4 image done\n"
2022-08-29 16:29:54 +08:00
fi
2023-05-14 00:33:09 +08:00
if [ [ " $WSA_MAIN_VER " -lt 2304 ] ] ; then
2023-05-13 20:45:09 +08:00
echo "Calculate the required space"
EXTRA_SIZE = 10240
2023-03-18 13:56:49 +08:00
2023-05-13 20:45:09 +08:00
SYSTEM_EXT_NEED_SIZE = $EXTRA_SIZE
if [ -d " $WORK_DIR /gapps/system_ext " ] ; then
SYSTEM_EXT_NEED_SIZE = $(( SYSTEM_EXT_NEED_SIZE + $( du --apparent-size -sB512 " $WORK_DIR /gapps/system_ext " | cut -f1) ))
2023-03-18 13:56:49 +08:00
fi
2023-05-13 20:45:09 +08:00
PRODUCT_NEED_SIZE = $EXTRA_SIZE
if [ -d " $WORK_DIR /gapps/product " ] ; then
PRODUCT_NEED_SIZE = $(( PRODUCT_NEED_SIZE + $( du --apparent-size -sB512 " $WORK_DIR /gapps/product " | cut -f1) ))
fi
2023-03-18 13:56:49 +08:00
2023-05-13 20:45:09 +08:00
SYSTEM_NEED_SIZE = $EXTRA_SIZE
if [ -d " $WORK_DIR /gapps " ] ; then
SYSTEM_NEED_SIZE = $(( SYSTEM_NEED_SIZE + $( du --apparent-size -sB512 " $WORK_DIR /gapps " | cut -f1) - PRODUCT_NEED_SIZE - SYSTEM_EXT_NEED_SIZE))
fi
if [ " $ROOT_SOL " = "magisk" ] ; then
if [ -d " $WORK_DIR /magisk " ] ; then
MAGISK_SIZE = $( du --apparent-size -sB512 " $WORK_DIR /magisk/magisk " | cut -f1)
SYSTEM_NEED_SIZE = $(( SYSTEM_NEED_SIZE + MAGISK_SIZE))
fi
if [ -f " $MAGISK_PATH " ] ; then
MAGISK_APK_SIZE = $( du --apparent-size -sB512 " $MAGISK_PATH " | cut -f1)
SYSTEM_NEED_SIZE = $(( SYSTEM_NEED_SIZE + MAGISK_APK_SIZE))
fi
fi
if [ -d " ../ $ARCH /system " ] ; then
SYSTEM_NEED_SIZE = $(( SYSTEM_NEED_SIZE + $( du --apparent-size -sB512 " ../ $ARCH /system " | cut -f1) ))
fi
VENDOR_NEED_SIZE = $EXTRA_SIZE
echo -e "done\n"
echo "Expand images"
SYSTEM_EXT_IMG_SIZE = $( du --apparent-size -sB512 " $WORK_DIR /wsa/ $ARCH /system_ext.img " | cut -f1)
PRODUCT_IMG_SIZE = $( du --apparent-size -sB512 " $WORK_DIR /wsa/ $ARCH /product.img " | cut -f1)
SYSTEM_IMG_SIZE = $( du --apparent-size -sB512 " $WORK_DIR /wsa/ $ARCH /system.img " | cut -f1)
VENDOR_IMG_SIZE = $( du --apparent-size -sB512 " $WORK_DIR /wsa/ $ARCH /vendor.img " | cut -f1)
SYSTEM_EXT_TARGET_SIZE = $(( SYSTEM_EXT_NEED_SIZE * 2 + SYSTEM_EXT_IMG_SIZE))
PRODUCT_TAGET_SIZE = $(( PRODUCT_NEED_SIZE * 2 + PRODUCT_IMG_SIZE))
SYSTEM_TAGET_SIZE = $(( SYSTEM_IMG_SIZE * 2 ))
VENDOR_TAGET_SIZE = $(( VENDOR_NEED_SIZE * 2 + VENDOR_IMG_SIZE))
resize_img " $WORK_DIR /wsa/ $ARCH /system_ext.img " " $SYSTEM_EXT_TARGET_SIZE " s || abort
resize_img " $WORK_DIR /wsa/ $ARCH /product.img " " $PRODUCT_TAGET_SIZE " s || abort
resize_img " $WORK_DIR /wsa/ $ARCH /system.img " " $SYSTEM_TAGET_SIZE " s || abort
resize_img " $WORK_DIR /wsa/ $ARCH /vendor.img " " $VENDOR_TAGET_SIZE " s || abort
echo -e "Expand images done\n"
echo "Mount images"
sudo mkdir " $ROOT_MNT " || abort
sudo mount -vo loop " $WORK_DIR /wsa/ $ARCH /system.img " " $ROOT_MNT " || abort
sudo mount -vo loop " $WORK_DIR /wsa/ $ARCH /vendor.img " " $VENDOR_MNT " || abort
sudo mount -vo loop " $WORK_DIR /wsa/ $ARCH /product.img " " $PRODUCT_MNT " || abort
sudo mount -vo loop " $WORK_DIR /wsa/ $ARCH /system_ext.img " " $SYSTEM_EXT_MNT " || abort
echo -e "done\n"
2022-08-29 16:29:54 +08:00
fi
2022-08-30 21:59:26 +08:00
if [ " $REMOVE_AMAZON " ] ; then
2022-09-04 23:44:31 +09:00
echo "Remove Amazon Appstore"
2023-04-18 17:11:37 +08:00
find " ${ PRODUCT_MNT : ? } " /{ etc/permissions,etc/sysconfig,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | sudo xargs rm -rf
find " ${ SYSTEM_EXT_MNT : ? } " /{ etc/*permissions,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | sudo xargs rm -rf
2023-05-16 07:36:37 +09:00
rm -f " $WORK_DIR /wsa/ $ARCH /apex/mado_release.apex "
2023-06-02 17:56:23 +09:00
find " ${ PRODUCT_MNT : ? } " /{ apex,etc/*permissions} 2>/dev/null | grep -e mado | sudo xargs rm -rf
2022-08-29 16:29:54 +08:00
echo -e "done\n"
fi
2022-10-02 20:31:42 +09:00
echo "Add device administration features"
2023-04-18 17:11:37 +08:00
sudo sed -i -e '/cts/a \ \ \ \ <feature name="android.software.device_admin" />' -e '/print/i \ \ \ \ <feature name="android.software.managed_users" />' " $VENDOR_MNT /etc/permissions/windows.permissions.xml "
sudo setfattr -n security.selinux -v "u:object_r:vendor_configs_file:s0" " $VENDOR_MNT /etc/permissions/windows.permissions.xml " || abort
2022-10-02 20:31:42 +09:00
echo -e "done\n"
2023-03-08 22:40:19 +08:00
if [ " $ROOT_SOL " = 'magisk' ] ; then
2022-08-29 16:29:54 +08:00
echo "Integrate Magisk"
2023-05-14 00:33:09 +08:00
sudo cp " $WORK_DIR /magisk/magisk/ " * " $ROOT_MNT /debug_ramdisk/ "
2023-05-15 02:07:45 +08:00
sudo cp " $MAGISK_PATH " " $ROOT_MNT /debug_ramdisk/stub.apk " || abort
2023-05-16 06:48:30 +08:00
sudo tee -a " $ROOT_MNT /debug_ramdisk/loadpolicy.sh " <<EOF >/dev/null || abort
2022-08-29 16:29:54 +08:00
#!/system/bin/sh
2023-05-16 06:48:30 +08:00
MAGISKTMP = /debug_ramdisk
export MAGISKTMP
2022-08-29 16:29:54 +08:00
mkdir -p /data/adb/magisk
2023-05-16 06:48:30 +08:00
cp \$ MAGISKTMP/* /data/adb/magisk/
2022-10-28 12:38:23 +08:00
sync
2022-08-29 16:29:54 +08:00
chmod -R 755 /data/adb/magisk
restorecon -R /data/adb/magisk
2023-05-15 02:07:45 +08:00
MAKEDEV = 1 \$ MAGISKTMP/magisk --preinit-device 2>& 1
RULESCMD = ""
for r in \$ MAGISKTMP/.magisk/preinit/*/sepolicy.rule; do
[ -f "\$r" ] || continue
RULESCMD = "\$RULESCMD --apply \$r"
2022-08-29 16:29:54 +08:00
done
2023-05-16 06:48:30 +08:00
\$ MAGISKTMP/magiskpolicy --live \$ RULESCMD 2>& 1
2022-08-29 16:29:54 +08:00
EOF
2023-05-15 02:07:45 +08:00
sudo find " $ROOT_MNT /debug_ramdisk " -type f -exec chmod 0711 { } \;
2023-05-14 00:33:09 +08:00
sudo find " $ROOT_MNT /debug_ramdisk " -type f -exec chown root:root { } \;
2023-05-15 02:07:45 +08:00
sudo find " $ROOT_MNT /debug_ramdisk " -type f -exec setfattr -n security.selinux -v "u:object_r:magisk_file:s0" { } \; || abort
echo "/debug_ramdisk(/.*)? u:object_r:magisk_file:s0" | sudo tee -a " $VENDOR_MNT /etc/selinux/vendor_file_contexts "
2023-04-18 17:11:37 +08:00
echo '/data/adb/magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a " $VENDOR_MNT /etc/selinux/vendor_file_contexts "
sudo LD_LIBRARY_PATH = " ../linker/ $HOST_ARCH " " $WORK_DIR /magisk/magiskpolicy " --load " $VENDOR_MNT /etc/selinux/precompiled_sepolicy " --save " $VENDOR_MNT /etc/selinux/precompiled_sepolicy " --magisk || abort
2023-05-23 22:34:39 +08:00
NEW_INITRC_DIR = $SYSTEM_MNT /etc/init/hw
2023-04-18 17:11:37 +08:00
sudo tee -a " $SYSTEM_MNT /etc/init/hw/init.rc " <<EOF >/dev/null
2022-08-29 16:29:54 +08:00
on post-fs-data
2023-05-16 06:48:30 +08:00
mkdir /dev/debug_ramdisk_mirror
mount none /debug_ramdisk /dev/debug_ramdisk_mirror bind
mount none none /dev/debug_ramdisk_mirror private
2023-05-15 02:07:45 +08:00
mount tmpfs magisk /debug_ramdisk mode = 0755
2023-05-16 06:48:30 +08:00
copy /dev/debug_ramdisk_mirror/magisk64 /debug_ramdisk/magisk64
2023-06-03 01:19:51 +08:00
chmod 0755 /debug_ramdisk/magisk64
2023-05-15 02:07:45 +08:00
symlink ./magisk64 /debug_ramdisk/magisk
symlink ./magisk64 /debug_ramdisk/su
symlink ./magisk64 /debug_ramdisk/resetprop
2023-05-16 06:48:30 +08:00
start adbd
copy /dev/debug_ramdisk_mirror/magisk32 /debug_ramdisk/magisk32
2023-06-03 01:19:51 +08:00
chmod 0755 /debug_ramdisk/magisk32
2023-05-16 06:48:30 +08:00
copy /dev/debug_ramdisk_mirror/magiskinit /debug_ramdisk/magiskinit
2023-06-03 01:19:51 +08:00
chmod 0750 /debug_ramdisk/magiskinit
2023-05-16 06:48:30 +08:00
copy /dev/debug_ramdisk_mirror/magiskpolicy /debug_ramdisk/magiskpolicy
2023-06-03 01:19:51 +08:00
chmod 0755 /debug_ramdisk/magiskpolicy
2023-05-16 06:48:30 +08:00
mkdir /debug_ramdisk/.magisk
2023-05-15 02:07:45 +08:00
mkdir /debug_ramdisk/.magisk/mirror 0
mkdir /debug_ramdisk/.magisk/block 0
mkdir /debug_ramdisk/.magisk/worker 0
2023-05-16 06:48:30 +08:00
copy /dev/debug_ramdisk_mirror/stub.apk /debug_ramdisk/stub.apk
2023-05-15 02:07:45 +08:00
chmod 0644 /debug_ramdisk/stub.apk
2023-05-16 06:48:30 +08:00
copy /dev/debug_ramdisk_mirror/loadpolicy.sh /debug_ramdisk/loadpolicy.sh
2023-06-03 01:19:51 +08:00
chmod 0755 /debug_ramdisk/loadpolicy.sh
2023-05-16 06:48:30 +08:00
umount /dev/debug_ramdisk_mirror
rmdir /dev/debug_ramdisk_mirror
exec u:r:magisk:s0 0 0 -- /system/bin/sh /debug_ramdisk/loadpolicy.sh
2023-05-16 00:17:04 +08:00
exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --post-fs-data
2022-08-29 16:29:54 +08:00
2023-05-16 00:17:04 +08:00
on property:vold.decrypt= trigger_restart_framework
exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --service
2022-08-29 16:29:54 +08:00
2023-05-16 00:17:04 +08:00
on nonencrypted
exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --service
2022-08-29 16:29:54 +08:00
on property:sys.boot_completed= 1
2023-05-16 00:17:04 +08:00
exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --boot-complete
2022-12-11 18:52:14 +08:00
on property:init.svc.zygote= stopped
2023-05-16 00:17:04 +08:00
exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --zygote-restart
2022-08-29 16:29:54 +08:00
EOF
2023-05-23 22:34:39 +08:00
for i in " $NEW_INITRC_DIR " /*; do
if [ [ " $i " = ~ init.zygote.+\. rc ] ] ; then
echo " Inject zygote restart $i "
sudo awk -i inplace '{if($0 ~ /service zygote /){print $0;print " exec u:r:magisk:s0 0 0 -- /debug_ramdisk/magisk --zygote-restart";a="";next}} 1' " $i "
2023-06-03 01:19:51 +08:00
sudo setfattr -n security.selinux -v "u:object_r:system_file:s0" " $i " || abort
2023-05-23 22:34:39 +08:00
fi
done
2022-09-04 00:43:31 +08:00
echo -e "Integrate Magisk done\n"
2023-03-08 22:40:19 +08:00
elif [ " $ROOT_SOL " = "kernelsu" ] ; then
echo "Integrate KernelSU"
mv " $WORK_DIR /wsa/ $ARCH /Tools/kernel " " $WORK_DIR /wsa/ $ARCH /Tools/kernel_origin "
2023-03-18 13:56:49 +08:00
cp " $WORK_DIR /kernelsu/kernel " " $WORK_DIR /wsa/ $ARCH /Tools/kernel "
2023-03-08 22:40:19 +08:00
echo -e "Integrate KernelSU done\n"
2022-08-29 16:29:54 +08:00
fi
2023-05-16 02:24:04 +08:00
echo "Add extra packages"
sudo cp -r " ../ $ARCH /system/ " * " $SYSTEM_MNT " || abort
find " ../ $ARCH /system/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /priv-app/placeholder " -type d -exec chmod 0755 { } \;
find " ../ $ARCH /system/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /priv-app/placeholder " -type f -exec chmod 0644 { } \;
find " ../ $ARCH /system/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /priv-app/placeholder " -exec chown root:root { } \;
find " ../ $ARCH /system/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /priv-app/placeholder " -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
echo -e "Add extra packages done\n"
2022-09-03 23:44:52 +08:00
if [ " $GAPPS_BRAND " != 'none' ] ; then
2022-09-22 19:37:17 +08:00
echo " Integrate $GAPPS_BRAND "
2023-04-18 17:11:37 +08:00
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 { } \;
2022-08-29 16:29:54 +08:00
file_list = " $( find " $WORK_DIR /gapps/ " -mindepth 1 -type f | cut -d/ -f5-) "
for file in $file_list ; do
2023-04-18 17:11:37 +08:00
sudo chown root:root " $WORK_DIR /gapps/ ${ file } "
sudo chmod 0644 " $WORK_DIR /gapps/ ${ file } "
2022-08-29 16:29:54 +08:00
done
if [ " $GAPPS_BRAND " = "OpenGApps" ] ; then
2023-05-13 20:45:09 +08:00
find " $WORK_DIR /gapps/ " -maxdepth 1 -mindepth 1 -type d -exec sudo cp --preserve= all -r { } " $SYSTEM_MNT " \; || abort
2022-08-29 16:29:54 +08:00
elif [ " $GAPPS_BRAND " = "MindTheGapps" ] ; then
2023-04-18 17:11:37 +08:00
sudo cp --preserve= all -r " $WORK_DIR /gapps/system_ext/ " * " $SYSTEM_EXT_MNT / " || abort
2023-03-18 13:56:49 +08:00
if [ -e " $SYSTEM_EXT_MNT /priv-app/SetupWizard " ] ; then
rm -rf " ${ SYSTEM_EXT_MNT : ? } /priv-app/Provision "
2022-08-29 16:29:54 +08:00
fi
fi
2023-04-18 17:11:37 +08:00
sudo cp --preserve= all -r " $WORK_DIR /gapps/product/ " * " $PRODUCT_MNT " || abort
2022-08-29 16:29:54 +08:00
2023-06-03 01:19:51 +08:00
find " $WORK_DIR /gapps/product/overlay " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /overlay/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
2023-05-13 20:45:09 +08:00
find " $WORK_DIR /gapps/product/etc/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /etc/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/etc/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /etc/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
2022-08-29 16:29:54 +08:00
if [ " $GAPPS_BRAND " = "OpenGApps" ] ; then
2023-04-18 17:11:37 +08:00
find " $WORK_DIR /gapps/app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /app/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/framework/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /framework/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /priv-app/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /app/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/framework/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /framework/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /priv-app/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/etc/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /etc/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/etc/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_MNT /etc/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
2022-08-29 16:29:54 +08:00
else
2023-06-03 01:19:51 +08:00
sudo setfattr -n security.selinux -v "u:object_r:system_file:s0" " $PRODUCT_MNT /framework " || abort
2023-04-18 17:11:37 +08:00
find " $WORK_DIR /gapps/product/app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /app/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /priv-app/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/framework/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /framework/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /app/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /priv-app/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/framework/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /framework/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/system_ext/etc/permissions/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_EXT_MNT /etc/permissions/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
sudo setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" " $PRODUCT_MNT /lib " || abort
find " $WORK_DIR /gapps/product/lib/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /lib/placeholder " -exec setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" { } \; || abort
find " $WORK_DIR /gapps/product/lib64/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $PRODUCT_MNT /lib64/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" { } \; || abort
find " $WORK_DIR /gapps/system_ext/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_EXT_MNT /priv-app/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/system_ext/etc/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_EXT_MNT /etc/placeholder " -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
find " $WORK_DIR /gapps/system_ext/priv-app/ " -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find " $SYSTEM_EXT_MNT /priv-app/placeholder " -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" { } \; || abort
fi
2023-05-15 21:52:17 +08:00
sudo LD_LIBRARY_PATH = " ../linker/ $HOST_ARCH " " $WORK_DIR /magisk/magiskpolicy " --load " $VENDOR_MNT /etc/selinux/precompiled_sepolicy " --save " $VENDOR_MNT /etc/selinux/precompiled_sepolicy " "allow gmscore_app gmscore_app vsock_socket { create connect write read }" "allow gmscore_app device_config_runtime_native_boot_prop file read" "allow gmscore_app system_server_tmpfs dir search" "allow gmscore_app system_server_tmpfs file open" "allow gmscore_app system_server_tmpfs filesystem getattr" "allow gmscore_app gpu_device dir search" "allow gmscore_app media_rw_data_file filesystem getattr" || abort
2022-09-22 19:37:17 +08:00
echo -e " Integrate $GAPPS_BRAND done\n "
2022-08-29 16:29:54 +08:00
fi
2022-09-03 23:44:52 +08:00
if [ " $GAPPS_BRAND " != 'none' ] ; then
2022-11-15 10:07:29 +09:00
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 "
2023-04-18 17:11:37 +08:00
sudo python3 fixGappsProp.py " $ROOT_MNT " || abort
2022-11-15 10:07:29 +09:00
echo -e "done\n"
fi
2022-08-29 16:29:54 +08:00
fi
2023-05-14 00:33:09 +08:00
if [ [ " $WSA_MAIN_VER " -ge 2304 ] ] ; then
2023-05-13 20:45:09 +08:00
echo "Create EROFS images"
2023-05-26 21:55:30 +08:00
mk_erofs_umount " $VENDOR_MNT " " $WORK_DIR /wsa/ $ARCH /vendor.img " " $VENDOR_MNT_RW " || abort
mk_erofs_umount " $PRODUCT_MNT " " $WORK_DIR /wsa/ $ARCH /product.img " " $PRODUCT_MNT_RW " || abort
mk_erofs_umount " $SYSTEM_EXT_MNT " " $WORK_DIR /wsa/ $ARCH /system_ext.img " " $SYSTEM_EXT_MNT_RW " || abort
2023-05-13 20:45:09 +08:00
mk_erofs_umount " $ROOT_MNT " " $WORK_DIR /wsa/ $ARCH /system.img " || abort
echo -e "Create EROFS images done\n"
echo "Umount images"
sudo umount -v " $VENDOR_MNT_RO "
sudo umount -v " $PRODUCT_MNT_RO "
sudo umount -v " $SYSTEM_EXT_MNT_RO "
sudo umount -v " $ROOT_MNT_RO "
echo -e "done\n"
else
echo "Umount images"
sudo find " $ROOT_MNT " -exec touch -ht 200901010000.00 { } \;
sudo umount -v " $VENDOR_MNT "
sudo umount -v " $PRODUCT_MNT "
sudo umount -v " $SYSTEM_EXT_MNT "
sudo umount -v " $ROOT_MNT "
echo -e "done\n"
echo "Shrink images"
resize_img " $WORK_DIR /wsa/ $ARCH /system.img " || abort
resize_img " $WORK_DIR /wsa/ $ARCH /vendor.img " || abort
resize_img " $WORK_DIR /wsa/ $ARCH /product.img " || abort
resize_img " $WORK_DIR /wsa/ $ARCH /system_ext.img " || abort
echo -e "Shrink images done\n"
fi
2022-08-29 16:29:54 +08:00
2023-05-14 00:33:09 +08:00
if [ [ " $WSA_MAIN_VER " -ge 2302 ] ] ; then
2023-03-18 13:56:49 +08:00
echo "Convert images to vhdx"
2023-03-18 18:49:31 +08:00
qemu-img convert -q -f raw -o subformat = fixed -O vhdx " $WORK_DIR /wsa/ $ARCH /system_ext.img " " $WORK_DIR /wsa/ $ARCH /system_ext.vhdx " || abort
qemu-img convert -q -f raw -o subformat = fixed -O vhdx " $WORK_DIR /wsa/ $ARCH /product.img " " $WORK_DIR /wsa/ $ARCH /product.vhdx " || abort
qemu-img convert -q -f raw -o subformat = fixed -O vhdx " $WORK_DIR /wsa/ $ARCH /system.img " " $WORK_DIR /wsa/ $ARCH /system.vhdx " || abort
qemu-img convert -q -f raw -o subformat = fixed -O vhdx " $WORK_DIR /wsa/ $ARCH /vendor.img " " $WORK_DIR /wsa/ $ARCH /vendor.vhdx " || abort
2023-03-18 13:56:49 +08:00
rm -f " $WORK_DIR /wsa/ $ARCH / " *.img || abort
echo -e "Convert images to vhdx done\n"
fi
2022-08-29 16:29:54 +08:00
echo "Remove signature and add scripts"
2023-04-18 17:11:37 +08:00
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
2023-03-18 13:56:49 +08:00
cp " $vclibs_PATH " " $xaml_PATH " " $WORK_DIR /wsa/ $ARCH " || abort
2023-04-11 00:43:27 +08:00
cp " $UWPVCLibs_PATH " " $xaml_PATH " " $WORK_DIR /wsa/ $ARCH " || abort
2023-03-18 17:49:49 +08:00
cp " ../bin/ $ARCH /makepri.exe " " $WORK_DIR /wsa/ $ARCH " || abort
cp "../xml/priconfig.xml" " $WORK_DIR /wsa/ $ARCH /xml/ " || abort
cp ../installer/MakePri.ps1 " $WORK_DIR /wsa/ $ARCH " || abort
2023-03-18 13:56:49 +08:00
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
2022-08-29 16:29:54 +08:00
echo -e "Remove signature and add scripts done\n"
echo "Generate info"
if [ [ " $ROOT_SOL " = "none" ] ] ; then
name1 = ""
2023-03-08 22:40:19 +08:00
elif [ " $ROOT_SOL " = "magisk" ] ; then
2022-12-11 22:57:45 +08:00
name1 = " -with-magisk- $MAGISK_VERSION_NAME ( $MAGISK_VERSION_CODE )- $MAGISK_VER "
2023-03-08 22:40:19 +08:00
elif [ " $ROOT_SOL " = "kernelsu" ] ; then
name1 = " -with- $ROOT_SOL - $KERNELSU_VER "
2022-08-29 16:29:54 +08:00
fi
2022-09-03 23:44:52 +08:00
if [ " $GAPPS_BRAND " = "none" ] ; then
2022-08-29 16:29:54 +08:00
name2 = "-NoGApps"
else
if [ " $GAPPS_BRAND " = "OpenGApps" ] ; then
2023-03-18 13:56:49 +08:00
name2 = -$GAPPS_BRAND -${ ANDROID_API_MAP [ $ANDROID_API ] } -${ GAPPS_VARIANT }
2022-08-29 16:29:54 +08:00
else
2023-03-18 13:56:49 +08:00
name2 = -$GAPPS_BRAND -${ ANDROID_API_MAP [ $ANDROID_API ] }
2022-08-29 16:29:54 +08:00
fi
2023-01-29 03:47:34 +08:00
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
\0 33[ 0m"
2022-08-29 16:29:54 +08:00
fi
fi
2023-03-18 13:56:49 +08:00
artifact_name = WSA_${ WSA_VER } _${ ARCH } _${ WSA_REL } ${ name1 } ${ name2 }
2022-12-09 21:36:59 +09:00
if [ " $NOFIX_PROPS " = "yes" ] ; then
artifact_name += "-NoFixProps"
fi
if [ " $REMOVE_AMAZON " = "yes" ] ; then
artifact_name += "-RemovedAmazon"
fi
2022-08-29 16:29:54 +08:00
echo " $artifact_name "
echo -e "\nFinishing building...."
if [ -f " $OUTPUT_DIR " ] ; then
2023-04-18 17:11:37 +08:00
sudo rm -rf ${ OUTPUT_DIR : ? }
2022-08-29 16:29:54 +08:00
fi
if [ ! -d " $OUTPUT_DIR " ] ; then
mkdir -p " $OUTPUT_DIR "
fi
2022-10-22 18:32:39 +08:00
OUTPUT_PATH = " ${ OUTPUT_DIR : ? } / $artifact_name "
2022-10-22 01:03:02 +08:00
if [ " $COMPRESS_OUTPUT " ] || [ -n " $COMPRESS_FORMAT " ] ; then
2022-09-23 16:31:12 +08:00
mv " $WORK_DIR /wsa/ $ARCH " " $WORK_DIR /wsa/ $artifact_name "
2022-10-22 18:30:46 +08:00
if [ -z " $COMPRESS_FORMAT " ] ; then
COMPRESS_FORMAT = "7z"
fi
if [ -n " $COMPRESS_FORMAT " ] ; then
FILE_EXT = " . $COMPRESS_FORMAT "
2022-10-22 18:57:06 +08:00
OUTPUT_PATH = " $OUTPUT_PATH $FILE_EXT "
2022-10-22 18:30:46 +08:00
fi
2022-10-22 18:57:06 +08:00
rm -f " ${ OUTPUT_PATH : ? } " || abort
2022-10-22 01:03:02 +08:00
if [ " $COMPRESS_FORMAT " = "7z" ] ; then
echo "Compressing with 7z"
2022-10-22 18:57:06 +08:00
7z a " ${ OUTPUT_PATH : ? } " " $WORK_DIR /wsa/ $artifact_name " || abort
2022-10-22 18:30:46 +08:00
elif [ " $COMPRESS_FORMAT " = "zip" ] ; then
2023-03-18 13:56:49 +08:00
echo "Compressing with zip"
7z -tzip a " $OUTPUT_PATH " " $WORK_DIR /wsa/ $artifact_name " || abort
2022-10-22 01:03:02 +08:00
fi
2022-08-30 21:59:26 +08:00
else
2022-10-22 18:32:39 +08:00
rm -rf " ${ OUTPUT_PATH : ? } " || abort
2023-03-18 13:56:49 +08:00
cp -r " $WORK_DIR /wsa/ $ARCH " " $OUTPUT_PATH " || abort
2022-08-29 16:29:54 +08:00
fi
echo -e "done\n"
echo "Cleanup Work Directory"
2023-04-18 17:11:37 +08:00
sudo rm -rf " ${ WORK_DIR : ? } "
2022-08-29 16:29:54 +08:00
echo "done"