Skip to content

Commit c927501

Browse files
committed
Retry non-streamed installs after confirming framework readiness
1 parent 09098c1 commit c927501

File tree

1 file changed

+40
-16
lines changed

1 file changed

+40
-16
lines changed

scripts/build-android-app.sh

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,29 +1306,53 @@ fi
13061306
adb_install_file_path() {
13071307
local serial="$1" apk="$2"
13081308
local remote_tmp="/data/local/tmp/$(basename "$apk")"
1309+
local attempts="${ADB_INSTALL_ATTEMPTS:-3}"
1310+
local sleep_between="${ADB_INSTALL_RETRY_DELAY_SECONDS:-5}"
1311+
local attempt install_status apk_size
13091312

1310-
if ! adb_wait_framework_ready "$serial"; then
1311-
return 1
1313+
if ! [[ "$attempts" =~ ^[0-9]+$ ]] || [ "$attempts" -le 0 ]; then
1314+
attempts=3
13121315
fi
1313-
1314-
"$ADB_BIN" -s "$serial" shell rm -f "$remote_tmp" >/dev/null 2>&1 || true
1315-
if ! "$ADB_BIN" -s "$serial" push "$apk" "$remote_tmp" >/dev/null 2>&1; then
1316-
ba_log "Failed to push $(basename "$apk") to $remote_tmp" >&2
1317-
return 1
1316+
if ! [[ "$sleep_between" =~ ^[0-9]+$ ]]; then
1317+
sleep_between=5
13181318
fi
13191319

1320-
local install_status=1
1321-
if "$ADB_BIN" -s "$serial" shell pm install -r -t -g "$remote_tmp"; then
1322-
install_status=0
1323-
else
1324-
local apk_size
1325-
apk_size=$(stat -c%s "$apk" 2>/dev/null || wc -c <"$apk")
1326-
if [ -n "$apk_size" ] && "$ADB_BIN" -s "$serial" shell "cat '$remote_tmp' | pm install -r -t -g -S $apk_size"; then
1320+
install_status=1
1321+
1322+
for attempt in $(seq 1 "$attempts"); do
1323+
if ! adb_wait_framework_ready "$serial"; then
1324+
ba_log "Android framework not ready before install attempt $attempt for $(basename "$apk")"
1325+
sleep "$sleep_between"
1326+
continue
1327+
fi
1328+
1329+
"$ADB_BIN" -s "$serial" shell rm -f "$remote_tmp" >/dev/null 2>&1 || true
1330+
if ! "$ADB_BIN" -s "$serial" push "$apk" "$remote_tmp" >/dev/null 2>&1; then
1331+
ba_log "Failed to push $(basename "$apk") to $remote_tmp on attempt $attempt" >&2
1332+
sleep "$sleep_between"
1333+
continue
1334+
fi
1335+
1336+
if "$ADB_BIN" -s "$serial" shell pm install -r -t -g "$remote_tmp"; then
13271337
install_status=0
1338+
else
1339+
apk_size=$(stat -c%s "$apk" 2>/dev/null || wc -c <"$apk")
1340+
if [ -n "$apk_size" ] && "$ADB_BIN" -s "$serial" shell "cat '$remote_tmp' | pm install -r -t -g -S $apk_size"; then
1341+
install_status=0
1342+
fi
13281343
fi
1329-
fi
13301344

1331-
"$ADB_BIN" -s "$serial" shell rm -f "$remote_tmp" >/dev/null 2>&1 || true
1345+
"$ADB_BIN" -s "$serial" shell rm -f "$remote_tmp" >/dev/null 2>&1 || true
1346+
1347+
if [ "$install_status" -eq 0 ]; then
1348+
ba_log "Install of $(basename "$apk") succeeded on attempt $attempt"
1349+
break
1350+
fi
1351+
1352+
ba_log "Install attempt $attempt for $(basename "$apk") failed; retrying after ${sleep_between}s"
1353+
sleep "$sleep_between"
1354+
done
1355+
13321356
return $install_status
13331357
}
13341358

0 commit comments

Comments
 (0)