-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathgen.sh
More file actions
executable file
·253 lines (200 loc) · 7.71 KB
/
Copy pathgen.sh
File metadata and controls
executable file
·253 lines (200 loc) · 7.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#!/bin/bash
export PATH=$(pwd)/bin:$(pwd)/bin/apktool:$PATH
BASEROMZIP=$1
PORTROMZIP=$2
VERSION=$3
UPSTREAMURL="https://github.com/OneUI-S20Fe/"
# Function to check if a package is installed
check_packages() {
for pkg in "$@"; do
if dpkg -l "$pkg" 2>/dev/null | grep -q '^ii'; then
echo "Package $pkg is installed."
else
echo "Package $pkg is not installed. Installing $pkg."
sudo apt update
sudo apt install "$pkg"
fi
done
}
#Function to hopefully auto patch apks
patch_apk() {
local APKNAME=$1
local EXTENSION="${APKNAME##*.}"
local APK_NAME_NO_EXT="${APKNAME%.*}"
local REPO="${UPSTREAMURL}${APK_NAME_NO_EXT}.${EXTENSION}.git"
local COMMITHASH=$2
local LOCALPATH=$(sudo find mounts -type f -iname $APKNAME -printf "%h\n")
local FULL_PATH="$LOCALPATH/$APKNAME"
mkdir workingdir
echo $REPO
cp $FULL_PATH workingdir/
cd workingdir
java -jar ../bin/apktool/apktool.jar d $APKNAME
cd "${APKNAME}.out"
git init
git add *
git commit -m "initial dummy commit" > /dev/null 2>&1
git fetch $REPO master
git cherry-pick -X theirs $COMMITHASH
java -jar ../../bin/apktool/apktool.jar b
sudo cp dist/$APKNAME ../../${FULL_PATH}
cd ../../
rm -rf workingdir
}
# Function to extract ROM
extract_rom() {
local ROMZIP=$1
local DEST_DIR=$2
local UNPACK_DIR="unpack"
mkdir -p unpack/ap
unzip -j "$ROMZIP" "*AP*tar.md5" -d "$UNPACK_DIR"
mv unpack/AP*.tar.md5 unpack/AP.tar
tar -xvf $UNPACK_DIR/AP.tar --directory="unpack/ap" --wildcards 'super.img.lz4'
rm -rf "unpack/AP.tar"
cd unpack/ap
lz4 -d super.img.lz4
simg2img super.img super.raw
rm -rf super.img
lpunpack super.raw
cd -
mv "unpack"/ap/*.img "$DEST_DIR"
rm -rf unpack
}
getprop() {
local stock_file="mounts/vendor_stock/build.prop"
local port_file="mounts/system/system/build.prop"
local system_stock_file="mounts/system_stock/system/build.prop"
local property=$1
local device_type=$2
local file_path=""
if [ "$device_type" == "system" ]; then
file_path="$port_file"
elif [ "$device_type" == "vendor" ]; then
file_path="$stock_file"
elif [ "$device_type" == "system_stock" ]; then
file_path="$system_stock_file"
else
echo "Invalid device type: $device_type"
return 1
fi
# Get the property value
local value=$(sudo grep "$property" "$file_path" | cut -d '=' -f2)
# Return the value
echo "$value"
}
replace_props() {
local OLDTEXT="$2"
local NEWTEXT="$1"
echo "OLDTEXT: $OLDTEXT"
echo "NEWTEXT: $NEWTEXT"
if [ "$OLDTEXT" != "$NEWTEXT" ]; then
sudo find mounts/vendor_stock mounts/system mounts/odm mounts/product -type f -name "*.prop" -exec sed -i "s|$OLDTEXT|$NEWTEXT|g" {} +
fi
}
#check_packages "git" "openjdk-19-jdk" "android-sdk-libsparse-utils" "erofs-utils"
# Extract Base ROM
#extract_rom "$BASEROMZIP" "stock"
# Extract Ported ROM
extract_rom "$PORTROMZIP" "port"
####################### MOUNTING PART ##########################
#####################################
#detect fs type here
FSTYPE=
######################################
e2fsck -f stock/vendor.img >/dev/null 2>&1
resize2fs stock/vendor.img 2g 2>/dev/null
e2fsck -f port/product.img >/dev/null 2>&1
resize2fs port/product.img 2g 2>/dev/null
e2fsck -f port/system.img 2>/dev/null
resize2fs port/system.img 10g 2>/dev/null
sudo mount -o rw port/system.img mounts/system 2>/dev/null
sudo mount -o rw port/vendor.img mounts/vendor 2>/dev/null
sudo mount -o rw stock/vendor.img mounts/vendor_stock 2>/dev/null
sudo mount -o rw stock/system.img mounts/system_stock 2>/dev/null
sudo mount -o rw port/product.img mounts/product 2>/dev/null
sudo mount -o rw port/odm.img mounts/odm 2>/dev/null
# ############ PATCHING PART ######################################
sudo cp -r patches/fstab.qcom.vendor mounts/vendor_stock/etc/fstab.qcom
sudo cp -r patches/manifest.xml mounts/vendor_stock/etc/vintf/
patch_apk "services.jar" "9645ea3"
#read target device and port device from build props
TARGET_DEVICE=$(getprop ro.product.vendor.model vendor)
TARGET_NAME=$(getprop ro.product.vendor.name vendor)
PORT_DEVICE=$(getprop ro.product.system.model system)
PORT_NAME=$(getprop ro.product.system.name system)
TARGET_QB_ID=$(getprop ro.system.qb.id system_stock)
PORT_QB_ID=$(getprop ro.system.qb.id system)
TARGET_FINGEPRINT=$(getprop ro.system.build.fingerprint system_stock)
PORT_FINGEPRINT=$(getprop ro.system.build.fingerprint system)
TARGET_INCREMENTAL=$(getprop ro.system.build.version.incremental system_stock)
PORT_INCREMENTAL=$(getprop ro.system.build.version.incremental system)
TARGET_DISPLAY_ID=$(getprop ro.build.display.id system_stock)
PORT_DISPLAY_ID=$(getprop ro.build.display.id system)
TARGET_DESCRIPTION=$(getorop ro.build.description system_stock)
PORT_DESCRIPTION=$(getorop ro.build.description system)
TARGET_CHANGELIST=$(getprop ro.build.changelist system_stock)
PORT_CHANGELIST=$(getprop ro.build.changelist system)
TARGET_PROPS=($TARGET_DEVICE $TARGET_NAME $TARGET_QB_ID $TARGET_FINGEPRINT $TARGET_INCREMENTAL $TARGET_DISPLAY_ID $TARGET_DESCRIPTION $TARGET_CHANGELIST)
PORT_PROPS=($PORT_DEVICE $PORT_NAME $PORT_QB_ID $PORT_FINGEPRINT $PORT_INCREMENTAL $PORT_DISPLAY_ID $PORT_DESCRIPTION $PORT_CHANGELIST)
# Check if the arrays have the same length
if [ ${#TARGET_PROPS[@]} -ne ${#PORT_PROPS[@]} ]; then
echo "Error: Arrays have different lengths."
exit 1
fi
echo "replacing props"
# Loop over the indices of the arrays
for ((i = 0; i < ${#TARGET_PROPS[@]}; i++)); do
replace_props "${TARGET_PROPS[i]}" "${PORT_PROPS[i]}"
done
#check for vndk30
FILE_TO_CHECK=mounts/system/system/system_ext/apex/com.android.vndk.v30.apex
# Check if the file exists
if [ -e "$FILE_TO_CHECK" ]; then
true
else
echo "Error: File $FILE_TO_CHECK not found."
# Add your logic here for when the file doesn't exist
# mount stock system and copy file
sudo cp mounts/system_stock/system/system_ext/apex/com.android.vndk.v30.apex $FILE_TO_CHECK
fi
sudo rm -rf mounts/system/system/system_ext/etc/selinux
# ########## CREATE EROFS IMAGES ################
# sudo mkfs.erofs -zlz4hc --file-contexts=mounts/system/system/etc/selinux/plat_file_contexts --ignore-mtime system.img mounts/system/
# sudo mkfs.erofs -zlz4hc --ignore-mtime product.img mounts/product/
# sudo mkfs.erofs -zlz4hc --file-contexts=mounts/vendor/etc/selinux/vendor_file_contexts --ignore-mtime vendor.img mounts/vendor/
# sudo mkfs.erofs -zlz4hc --ignore-mtime odm.img mounts/odm/
# ######### CREATE SUPER IMAGE ##################
# lpmake --metadata-size 65536\
# --device-size=10292822016\
# --metadata-slots=2\
# --group=qti_dynamic_partitions:10288627712\
# --partition=system:none:4364660736:qti_dynamic_partitions\
# --partition=vendor:none:1992294400:qti_dynamic_partitions\
# --partition=product:none:565809152:qti_dynamic_partitions\
# --partition=odm:none:4349952:qti_dynamic_partitions\
# --image=odm=./odm.img\
# --image=product=./product.img\
# --image=system=./system.img\
# --image=vendor=./vendor.img\
# --output ./super.img
# ################ COPY TOGETHER INSTALLER ZIP ################
# mv super.img updatezip/
# cp rom/boot.img updatezip/
# ###################### ZIP THE ZIP #############################
# cd updatezip
# zip -r ../SealRom-R8Q-$VERSION.zip *
# cd ..
# ################# CLEANUP AND UNMOUNT #######################
#sudo umount -f mounts/system
#sudo umount -f mounts/vendor
#sudo umount -f mounts/product
#sudo umount -f mounts/odm
# rm -rf port/*
#rm -rf stock/*
# rm -rf system.img
# rm -rf product.img
# rm -rf vendor.img
# rm -rf odm.img
rm -rf unpack
# rm -rf updatezip/*.img
# fi