blob: 542b1f80d867f80c0fd67dcdc0788c7702977869 [file] [log] [blame]
Max Weninger8b6ff482020-03-29 17:01:11 +02001#!/system/bin/sh
2#
3# ADDOND_VERSION=2
4#
5# /system/addon.d/69-gapps.sh
6#
7. /postinstall/tmp/backuptool.functions
8
micky3872e3cf9d2021-01-13 02:39:36 +01009if [ -z $backuptool_ab ]; then
10 SYS=$S
11 TMP=/tmp
12else
13 SYS=/postinstall/system
14 TMP=/postinstall/tmp
15fi
16
17
Max Weninger8b6ff482020-03-29 17:01:11 +020018list_files() {
19cat <<EOF
Max Weninger8b6ff482020-03-29 17:01:11 +020020app/GoogleCalendarSyncAdapter/GoogleCalendarSyncAdapter.apk
21app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
22app/GoogleExtShared/GoogleExtShared.apk
23app/GoogleTTS/GoogleTTS.apk
24app/MarkupGoogle/MarkupGoogle.apk
25app/SoundPickerPrebuilt/SoundPickerPrebuilt.apk
26etc/default-permissions/default-permissions.xml
micky3872e3cf9d2021-01-13 02:39:36 +010027etc/default-permissions/opengapps-permissions-q.xml
Max Weninger8b6ff482020-03-29 17:01:11 +020028etc/g.prop
29etc/permissions/com.google.android.dialer.support.xml
30etc/permissions/com.google.android.maps.xml
31etc/permissions/com.google.android.media.effects.xml
32etc/permissions/privapp-permissions-google.xml
33etc/permissions/split-permissions-google.xml
34etc/preferred-apps/google.xml
35etc/sysconfig/dialer_experience.xml
36etc/sysconfig/google-hiddenapi-package-whitelist.xml
37etc/sysconfig/google.xml
38etc/sysconfig/google_build.xml
39etc/sysconfig/google_exclusives_enable.xml
40framework/com.google.android.dialer.support.jar
41framework/com.google.android.maps.jar
42framework/com.google.android.media.effects.jar
Max Weninger8b6ff482020-03-29 17:01:11 +020043lib/libsketchology_native.so
Max Weninger8b6ff482020-03-29 17:01:11 +020044lib64/libjni_latinimegoogle.so
45lib64/libsketchology_native.so
46priv-app/CarrierSetup/CarrierSetup.apk
47priv-app/ConfigUpdater/ConfigUpdater.apk
Max Weninger8b6ff482020-03-29 17:01:11 +020048priv-app/GoogleBackupTransport/GoogleBackupTransport.apk
49priv-app/GoogleExtServices/GoogleExtServices.apk
50priv-app/GoogleFeedback/GoogleFeedback.apk
51priv-app/GoogleOneTimeInitializer/GoogleOneTimeInitializer.apk
micky3872e3cf9d2021-01-13 02:39:36 +010052priv-app/GooglePackageInstaller/GooglePackageInstaller.apk
Max Weninger8b6ff482020-03-29 17:01:11 +020053priv-app/GooglePartnerSetup/GooglePartnerSetup.apk
54priv-app/GoogleRestore/GoogleRestore.apk
55priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
56priv-app/Phonesky/Phonesky.apk
57priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
58priv-app/SetupWizard/SetupWizard.apk
59priv-app/Turbo/Turbo.apk
60priv-app/Velvet/Velvet.apk
61priv-app/WellbeingPrebuilt/WellbeingPrebuilt.apk
micky3872e3cf9d2021-01-13 02:39:36 +010062product/overlay/WellbeingOverlay.apk
Max Weninger8b6ff482020-03-29 17:01:11 +020063usr/srec/en-US/APP_NAME.fst
64usr/srec/en-US/APP_NAME.syms
65usr/srec/en-US/CLG.prewalk.fst
66usr/srec/en-US/CONTACT_NAME.fst
67usr/srec/en-US/CONTACT_NAME.syms
68usr/srec/en-US/SONG_NAME.fst
69usr/srec/en-US/SONG_NAME.syms
70usr/srec/en-US/am_phonemes.syms
71usr/srec/en-US/app_bias.fst
72usr/srec/en-US/c_fst
73usr/srec/en-US/commands.abnf
74usr/srec/en-US/compile_grammar.config
75usr/srec/en-US/config.pumpkin
76usr/srec/en-US/confirmation_bias.fst
77usr/srec/en-US/contacts.abnf
78usr/srec/en-US/contacts_bias.fst
79usr/srec/en-US/contacts_disambig.fst
80usr/srec/en-US/dict
81usr/srec/en-US/dictation.config
82usr/srec/en-US/dnn
83usr/srec/en-US/embedded_class_denorm.mfar
84usr/srec/en-US/embedded_normalizer.mfar
85usr/srec/en-US/endpointer_dictation.config
86usr/srec/en-US/endpointer_model
87usr/srec/en-US/endpointer_model.mmap
88usr/srec/en-US/endpointer_voicesearch.config
89usr/srec/en-US/ep_portable_mean_stddev
90usr/srec/en-US/ep_portable_model.uint8.mmap
91usr/srec/en-US/g2p.data
92usr/srec/en-US/g2p_fst
93usr/srec/en-US/g2p_graphemes.syms
94usr/srec/en-US/g2p_phonemes.syms
95usr/srec/en-US/grammar.config
96usr/srec/en-US/hmm_symbols
97usr/srec/en-US/hmmlist
98usr/srec/en-US/input_mean_std_dev
99usr/srec/en-US/lexicon.U.fst
100usr/srec/en-US/lstm_model.uint8.data
101usr/srec/en-US/magic_mic.config
102usr/srec/en-US/media_bias.fst
103usr/srec/en-US/metadata
104usr/srec/en-US/monastery_config.pumpkin
105usr/srec/en-US/norm_fst
106usr/srec/en-US/offensive_word_normalizer.mfar
107usr/srec/en-US/offline_action_data.pb
108usr/srec/en-US/phonelist
109usr/srec/en-US/portable_lstm
110usr/srec/en-US/portable_meanstddev
111usr/srec/en-US/pumpkin.mmap
112usr/srec/en-US/read_items_bias.fst
113usr/srec/en-US/rescoring.fst.compact
114usr/srec/en-US/semantics.pumpkin
115usr/srec/en-US/skip_items_bias.fst
116usr/srec/en-US/time_bias.fst
117usr/srec/en-US/transform.mfar
118usr/srec/en-US/voice_actions.config
119usr/srec/en-US/voice_actions_compiler.config
120usr/srec/en-US/word_confidence_classifier
121usr/srec/en-US/wordlist.syms
122EOF
123}
124
micky3872e3cf9d2021-01-13 02:39:36 +0100125mount_generic() {
126 local device_abpartition=$(getprop ro.build.ab_update)
127 local partitions="$*"
128 if [ -z "$device_abpartition" ]; then
129 # We're on an A only device
130 local partition
131 for partition in $partitions; do
132 if [ "$(getprop ro.boot.dynamic_partitions)" = "true" ]; then
133 mount -o ro -t auto /dev/block/mapper/"$partition" /"$partition" 2> /dev/null
134 blockdev --setrw /dev/block/mapper/"$partition" 2> /dev/null
135 mount -o rw,remount -t auto /dev/block/mapper/"$partition" /"$partition" 2> /dev/null
136 else
137 mount -o ro -t auto /"$partition" 2> /dev/null
138 mount -o rw,remount -t auto /"$partition" 2> /dev/null
139 fi
140 done
141 fi
Max Weninger8b6ff482020-03-29 17:01:11 +0200142}
micky3872e3cf9d2021-01-13 02:39:36 +0100143
144# Backup/Restore using /sdcard if the installed GApps size plus a buffer for other addon.d backups (204800=200MB) is larger than /tmp
145installed_gapps_size_kb=$(grep "^installed_gapps_size_kb" $TMP/gapps.prop | cut -d '=' -f 2)
146if [ ! "$installed_gapps_size_kb" ]; then
147 installed_gapps_size_kb="$(cd $SYS; size=0; for n in $(du -ak $(list_files) | cut -f 1); do size=$((size+n)); done; echo "$size")"
148 echo "installed_gapps_size_kb=$installed_gapps_size_kb" >> $TMP/gapps.prop
149fi
150
151free_tmp_size_kb=$(grep "^free_tmp_size_kb" $TMP/gapps.prop | cut -d '=' -f 2)
152if [ ! "$free_tmp_size_kb" ]; then
153 free_tmp_size_kb="$(echo $(df -k $TMP | tail -n 1) | cut -d ' ' -f 4)"
154 echo "free_tmp_size_kb=$free_tmp_size_kb" >> $TMP/gapps.prop
155fi
156
157buffer_size_kb=204800
158if [ $((installed_gapps_size_kb + buffer_size_kb)) -ge "$free_tmp_size_kb" ]; then
159 C=/sdcard/tmp-gapps
160fi
161
162# Get ROM SDK from installed GApps
163rom_build_sdk=$(grep "^rom_build_sdk" $TMP/gapps.prop | cut -d '=' -f 2)
164if [ ! "$rom_build_sdk" ]; then
165 rom_build_sdk="$(cd $SYS; grep "^ro.addon.sdk" etc/g.prop | cut -d '=' -f 2)"
166 echo "rom_build_sdk=$rom_build_sdk" >> $TMP/gapps.prop
167fi
Max Weninger8b6ff482020-03-29 17:01:11 +0200168
169case "$1" in
170 backup)
micky3872e3cf9d2021-01-13 02:39:36 +0100171 list_files | while read -r FILE DUMMY; do
172 backup_file "$S"/"$FILE"
Max Weninger8b6ff482020-03-29 17:01:11 +0200173 done
micky3872e3cf9d2021-01-13 02:39:36 +0100174
175 umount /product /vendor 2> /dev/null
Max Weninger8b6ff482020-03-29 17:01:11 +0200176 ;;
177 restore)
micky3872e3cf9d2021-01-13 02:39:36 +0100178 list_files | while read -r FILE REPLACEMENT; do
Max Weninger8b6ff482020-03-29 17:01:11 +0200179 R=""
180 [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT"
micky3872e3cf9d2021-01-13 02:39:36 +0100181 [ -f "$C/$S/$FILE" ] && restore_file "$S"/"$FILE" "$R"
Max Weninger8b6ff482020-03-29 17:01:11 +0200182 done
Max Weninger8b6ff482020-03-29 17:01:11 +0200183 ;;
184 pre-backup)
micky3872e3cf9d2021-01-13 02:39:36 +0100185 mount_generic product vendor
Max Weninger8b6ff482020-03-29 17:01:11 +0200186 ;;
187 post-backup)
188 # Stub
189 ;;
190 pre-restore)
micky3872e3cf9d2021-01-13 02:39:36 +0100191 mount_generic product vendor
Max Weninger8b6ff482020-03-29 17:01:11 +0200192
micky3872e3cf9d2021-01-13 02:39:36 +0100193 # Remove Stock/AOSP apps (from GApps Installer)
194 rm -rf $SYS/priv-app/ExtServices
195 rm -rf $SYS/product/priv-app/ExtServices
196 rm -rf $SYS/app/ExtShared
197 rm -rf $SYS/product/app/ExtShared
198 rm -rf $SYS/app/PackageInstaller
199 rm -rf $SYS/priv-app/PackageInstaller
200 rm -rf $SYS/priv-app/packageinstaller
201 rm -rf $SYS/product/app/PackageInstaller
202 rm -rf $SYS/product/priv-app/PackageInstaller
203 rm -rf $SYS/product/priv-app/packageinstaller
204 rm -rf $SYS/app/Provision
205 rm -rf $SYS/priv-app/Provision
206 rm -rf $SYS/product/app/Provision
207 rm -rf $SYS/product/priv-app/Provision
Max Weninger8b6ff482020-03-29 17:01:11 +0200208
micky3872e3cf9d2021-01-13 02:39:36 +0100209 # Remove 'other' apps (per installer.data)
210 rm -rf $SYS/app/BookmarkProvider
211 rm -rf $SYS/app/BooksStub
212 rm -rf $SYS/app/CalendarGoogle
213 rm -rf $SYS/app/CloudPrint
214 rm -rf $SYS/app/DeskClockGoogle
215 rm -rf $SYS/app/EditorsDocsStub
216 rm -rf $SYS/app/EditorsSheetsStub
217 rm -rf $SYS/app/EditorsSlidesStub
218 rm -rf $SYS/app/Gmail
219 rm -rf $SYS/app/Gmail2
220 rm -rf $SYS/app/GoogleCalendar
221 rm -rf $SYS/app/GoogleCloudPrint
222 rm -rf $SYS/app/GoogleHangouts
223 rm -rf $SYS/app/GoogleKeep
224 rm -rf $SYS/app/GoogleLatinIme
225 rm -rf $SYS/app/Keep
226 rm -rf $SYS/app/NewsstandStub
227 rm -rf $SYS/app/PartnerBookmarksProvider
228 rm -rf $SYS/app/PrebuiltBugleStub
229 rm -rf $SYS/app/PrebuiltKeepStub
230 rm -rf $SYS/app/QuickSearchBox
231 rm -rf $SYS/app/Vending
232 rm -rf $SYS/priv-app/GmsCore
233 rm -rf $SYS/priv-app/GmsCore_update
234 rm -rf $SYS/priv-app/GoogleHangouts
235 rm -rf $SYS/priv-app/GoogleNow
236 rm -rf $SYS/priv-app/GoogleSearch
237 rm -rf $SYS/priv-app/OneTimeInitializer
238 rm -rf $SYS/priv-app/QuickSearchBox
239 rm -rf $SYS/priv-app/Velvet_update
240 rm -rf $SYS/priv-app/Vending
241 rm -rf $SYS/product/app/BookmarkProvider
242 rm -rf $SYS/product/app/BooksStub
243 rm -rf $SYS/product/app/CalendarGoogle
244 rm -rf $SYS/product/app/CloudPrint
245 rm -rf $SYS/product/app/DeskClockGoogle
246 rm -rf $SYS/product/app/EditorsDocsStub
247 rm -rf $SYS/product/app/EditorsSheetsStub
248 rm -rf $SYS/product/app/EditorsSlidesStub
249 rm -rf $SYS/product/app/Gmail
250 rm -rf $SYS/product/app/Gmail2
251 rm -rf $SYS/product/app/GoogleCalendar
252 rm -rf $SYS/product/app/GoogleCloudPrint
253 rm -rf $SYS/product/app/GoogleHangouts
254 rm -rf $SYS/product/app/GoogleKeep
255 rm -rf $SYS/product/app/GoogleLatinIme
256 rm -rf $SYS/product/app/Keep
257 rm -rf $SYS/product/app/NewsstandStub
258 rm -rf $SYS/product/app/PartnerBookmarksProvider
259 rm -rf $SYS/product/app/PrebuiltBugleStub
260 rm -rf $SYS/product/app/PrebuiltKeepStub
261 rm -rf $SYS/product/app/QuickSearchBox
262 rm -rf $SYS/product/app/Vending
263 rm -rf $SYS/product/priv-app/GmsCore
264 rm -rf $SYS/product/priv-app/GmsCore_update
265 rm -rf $SYS/product/priv-app/GoogleHangouts
266 rm -rf $SYS/product/priv-app/GoogleNow
267 rm -rf $SYS/product/priv-app/GoogleSearch
268 rm -rf $SYS/product/priv-app/OneTimeInitializer
269 rm -rf $SYS/product/priv-app/QuickSearchBox
270 rm -rf $SYS/product/priv-app/Velvet_update
271 rm -rf $SYS/product/priv-app/Vending
Max Weninger8b6ff482020-03-29 17:01:11 +0200272
micky3872e3cf9d2021-01-13 02:39:36 +0100273 # Remove 'priv-app' apps from 'app' (per installer.data)
274 rm -rf $SYS/app/CanvasPackageInstaller
275 rm -rf $SYS/app/ConfigUpdater
276 rm -rf $SYS/app/GoogleBackupTransport
277 rm -rf $SYS/app/GoogleFeedback
278 rm -rf $SYS/app/GoogleLoginService
279 rm -rf $SYS/app/GoogleOneTimeInitializer
280 rm -rf $SYS/app/GooglePartnerSetup
281 rm -rf $SYS/app/GoogleServicesFramework
282 rm -rf $SYS/app/OneTimeInitializer
283 rm -rf $SYS/app/Phonesky
284 rm -rf $SYS/app/PrebuiltGmsCore
285 rm -rf $SYS/app/SetupWizard
286 rm -rf $SYS/app/Velvet
287 rm -rf $SYS/product/app/CanvasPackageInstaller
288 rm -rf $SYS/product/app/ConfigUpdater
289 rm -rf $SYS/product/app/GoogleBackupTransport
290 rm -rf $SYS/product/app/GoogleFeedback
291 rm -rf $SYS/product/app/GoogleLoginService
292 rm -rf $SYS/product/app/GoogleOneTimeInitializer
293 rm -rf $SYS/product/app/GooglePartnerSetup
294 rm -rf $SYS/product/app/GoogleServicesFramework
295 rm -rf $SYS/product/app/OneTimeInitializer
296 rm -rf $SYS/product/app/Phonesky
297 rm -rf $SYS/product/app/PrebuiltGmsCore
298 rm -rf $SYS/product/app/SetupWizard
299 rm -rf $SYS/product/app/Velvet
300
301 # Remove 'required' apps (per installer.data)
302 rm -rf $SYS/app/LatinIME/lib//libjni_keyboarddecoder.so
303 rm -rf $SYS/app/LatinIME/lib//libjni_latinimegoogle.so
304 rm -rf $SYS/lib/libjni_keyboarddecoder.so
305 rm -rf $SYS/lib/libjni_latinimegoogle.so
306 rm -rf $SYS/lib64/libjni_keyboarddecoder.so
307 rm -rf $SYS/lib64/libjni_latinimegoogle.so
308 rm -rf $SYS/product/app/LatinIME/lib//libjni_keyboarddecoder.so
309 rm -rf $SYS/product/app/LatinIME/lib//libjni_latinimegoogle.so
310 rm -rf $SYS/product/lib/libjni_keyboarddecoder.so
311 rm -rf $SYS/product/lib/libjni_latinimegoogle.so
312 rm -rf $SYS/product/lib64/libjni_keyboarddecoder.so
313 rm -rf $SYS/product/lib64/libjni_latinimegoogle.so
Max Weninger8b6ff482020-03-29 17:01:11 +0200314
315 # Remove 'user requested' apps (from gapps-config)
micky3872e3cf9d2021-01-13 02:39:36 +0100316
Max Weninger8b6ff482020-03-29 17:01:11 +0200317 ;;
318 post-restore)
Max Weninger8b6ff482020-03-29 17:01:11 +0200319 # Recreate required symlinks (from GApps Installer)
micky3872e3cf9d2021-01-13 02:39:36 +0100320 install -d "$SYS/app/MarkupGoogle/lib/arm64"
321 ln -sfn "$SYS/lib64/libsketchology_native.so" "$SYS/app/MarkupGoogle/lib/arm64/libsketchology_native.so"
322 install -d "$SYS/app/LatinIME/lib64/arm64"
323 ln -sfn "$SYS/product/lib64/libjni_latinimegoogle.so" "$SYS/product/app/LatinIME/lib64/arm64/libjni_latinimegoogle.so"
324 ln -sfn "$SYS/product/lib64/libjni_keyboarddecoder.so" "$SYS/product/app/LatinIME/lib64/arm64/libjni_keyboarddecoder.so"
325 ln -sfn "$SYS/lib64/libjni_latinimegoogle.so" "$SYS/app/LatinIME/lib64/arm64/libjni_latinimegoogle.so"
326 ln -sfn "$SYS/lib64/libjni_keyboarddecoder.so" "$SYS/app/LatinIME/lib64/arm64/libjni_keyboarddecoder.so"
Max Weninger8b6ff482020-03-29 17:01:11 +0200327
328 # Apply build.prop changes (from GApps Installer)
micky3872e3cf9d2021-01-13 02:39:36 +0100329 sed -i "s/ro.error.receiver.system.apps=.*/ro.error.receiver.system.apps=com.google.android.gms/g" $SYS/build.prop
Max Weninger8b6ff482020-03-29 17:01:11 +0200330
331 # Re-pre-ODEX APKs (from GApps Installer)
332
333 # Remove any empty folders we may have created during the removal process
micky3872e3cf9d2021-01-13 02:39:36 +0100334 for i in $SYS/app $SYS/priv-app $SYS/vendor/pittpatt $SYS/usr/srec; do
Max Weninger8b6ff482020-03-29 17:01:11 +0200335 if [ -d $i ]; then
micky3872e3cf9d2021-01-13 02:39:36 +0100336 find $i -type d -exec rmdir -p '{}' \+ 2>/dev/null
Max Weninger8b6ff482020-03-29 17:01:11 +0200337 fi
Max Weninger8b6ff482020-03-29 17:01:11 +0200338 done
339
micky3872e3cf9d2021-01-13 02:39:36 +0100340 # Fix ownership/permissions and clean up after backup and restore from /sdcard
341 find $SYS/vendor/pittpatt -type d -exec chown 0:2000 '{}' \; 2>/dev/null # Change pittpatt folders to root:shell per Google Factory Settings
342 for i in $(list_files); do
343 chown root:root "$SYS/$i"
344 chmod 644 "$SYS/$i"
345 chmod 755 "$(dirname "$SYS/$i")" "$(dirname "$SYS/$i")/../"
346 case $i in
347 */overlay/*) chcon -h u:object_r:vendor_overlay_file:s0 "$SYS/$i";;
348 esac
349 done
350
351 umount /product /vendor 2> /dev/null
352
353 if [ "$rom_build_sdk" -ge "26" ]; then # Android 8.0+ uses 0600 for its permission on build.prop
354 chmod 600 "$SYS/build.prop"
355 fi
356 rm -rf /sdcard/tmp-gapps
Max Weninger8b6ff482020-03-29 17:01:11 +0200357 ;;
358esac