@@ -1306,29 +1306,53 @@ fi
13061306adb_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