Skip to content

Commit 049be1c

Browse files
abueideclaude
andauthored
fix(android): scope logcat crash detection to app process only (#62)
The verify-app-running steps were dumping full device logcat then scanning for FATAL EXCEPTION patterns across all processes. This could cause false failures if a system app crashed on the emulator. Now extracts app-specific logs via adb logcat --pid before scanning. Fixes: test-suite.yaml, test-suite-android-e2e.yaml, test-suite-all-e2e.yaml Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 2d58c24 commit 049be1c

3 files changed

Lines changed: 42 additions & 23 deletions

File tree

examples/android/tests/test-suite.yaml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -342,16 +342,23 @@ processes:
342342
exit 1
343343
fi
344344
345-
# Always save logcat snapshot for analysis
345+
# Save full logcat for offline analysis
346346
adb -s "$serial" logcat -d > "$_logs_dir/logcat-final.txt" 2>&1 || true
347347
348-
# Scan for crash patterns in logcat (AndroidRuntime tag is the definitive crash signal)
348+
# Scan for crash patterns scoped to our app process only
349+
APP_PID=$(adb -s "$serial" shell pidof "${ANDROID_APP_ID}" 2>/dev/null || true)
350+
if [ -n "$APP_PID" ]; then
351+
adb -s "$serial" logcat -d --pid="$APP_PID" > "$_logs_dir/logcat-app.txt" 2>&1 || true
352+
else
353+
grep -F "${ANDROID_APP_ID}" "$_logs_dir/logcat-final.txt" > "$_logs_dir/logcat-app.txt" 2>/dev/null || true
354+
fi
355+
349356
crash_patterns="FATAL EXCEPTION|AndroidRuntime.*FATAL"
350-
if grep -qiE "$crash_patterns" "$_logs_dir/logcat-final.txt" 2>/dev/null; then
357+
if grep -qiE "$crash_patterns" "$_logs_dir/logcat-app.txt" 2>/dev/null; then
351358
echo ""
352-
echo "FAIL: Crash patterns detected in logcat"
359+
echo "FAIL: Crash patterns detected in app logcat"
353360
echo "--- Error lines ---"
354-
grep -iE "$crash_patterns" "$_logs_dir/logcat-final.txt" | tail -20
361+
grep -iE "$crash_patterns" "$_logs_dir/logcat-app.txt" | tail -20
355362
echo "---"
356363
echo "Full logcat: $_logs_dir/logcat-final.txt"
357364
printf 'fail\nCrash patterns detected in logcat\n' > "$_step_dir/$_step.status"

examples/react-native/tests/test-suite-all-e2e.yaml

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -473,27 +473,33 @@ processes:
473473
474474
echo " Checking logs for errors..."
475475
476-
# Save logcat snapshot to file
476+
# Save full logcat for offline analysis, then extract app-only logs
477477
adb -s "$serial" logcat -d > "$_logs_dir/logcat-android-verify.txt" 2>&1 || true
478+
APP_PID=$(adb -s "$serial" shell pidof "${ANDROID_APP_ID}" 2>/dev/null || true)
479+
if [ -n "$APP_PID" ]; then
480+
adb -s "$serial" logcat -d --pid="$APP_PID" > "$_logs_dir/logcat-android-app.txt" 2>&1 || true
481+
else
482+
grep -F "${ANDROID_APP_ID}" "$_logs_dir/logcat-android-verify.txt" > "$_logs_dir/logcat-android-app.txt" 2>/dev/null || true
483+
fi
478484
479485
# Check for Metro connection errors
480486
metro_patterns="unable.*load.*script|could.*not.*connect.*metro|connection.*refused.*8081|packaged.*correctly.*for.*release"
481-
if grep -qiE "$metro_patterns" "$_logs_dir/logcat-android-verify.txt" 2>/dev/null; then
487+
if grep -qiE "$metro_patterns" "$_logs_dir/logcat-android-app.txt" 2>/dev/null; then
482488
echo "FAIL: App cannot connect to Metro bundler"
483489
echo "--- Error lines ---"
484-
grep -iE "unable|load|script|connect|metro|refused|8081|packaged|release|bundle" "$_logs_dir/logcat-android-verify.txt" | tail -30
490+
grep -iE "unable|load|script|connect|metro|refused|8081|packaged|release|bundle" "$_logs_dir/logcat-android-app.txt" | tail -30
485491
echo "---"
486492
echo "Full logcat: $_logs_dir/logcat-android-verify.txt"
487493
printf 'fail\nAndroid app cannot connect to Metro bundler\n' > "$_step_dir/$_step.status"
488494
exit 1
489495
fi
490496
491-
# Check for native crash patterns
497+
# Check for native crash patterns (scoped to our app)
492498
crash_patterns="FATAL EXCEPTION|AndroidRuntime.*FATAL"
493-
if grep -qiE "$crash_patterns" "$_logs_dir/logcat-android-verify.txt" 2>/dev/null; then
494-
echo "FAIL: Crash patterns detected in logcat"
499+
if grep -qiE "$crash_patterns" "$_logs_dir/logcat-android-app.txt" 2>/dev/null; then
500+
echo "FAIL: Crash patterns detected in app logcat"
495501
echo "--- Error lines ---"
496-
grep -iE "$crash_patterns" "$_logs_dir/logcat-android-verify.txt" | tail -20
502+
grep -iE "$crash_patterns" "$_logs_dir/logcat-android-app.txt" | tail -20
497503
echo "---"
498504
echo "Full logcat: $_logs_dir/logcat-android-verify.txt"
499505
printf 'fail\nCrash patterns detected in Android logcat\n' > "$_step_dir/$_step.status"
@@ -502,10 +508,10 @@ processes:
502508
503509
# Check for React Native JS errors
504510
rn_patterns="ReactNativeJS.*Error|Unhandled JS Exception|RedBoxError"
505-
if grep -qiE "$rn_patterns" "$_logs_dir/logcat-android-verify.txt" 2>/dev/null; then
511+
if grep -qiE "$rn_patterns" "$_logs_dir/logcat-android-app.txt" 2>/dev/null; then
506512
echo "FAIL: React Native JS error detected"
507513
echo "--- Error lines ---"
508-
grep -iE "$rn_patterns" "$_logs_dir/logcat-android-verify.txt" | tail -20
514+
grep -iE "$rn_patterns" "$_logs_dir/logcat-android-app.txt" | tail -20
509515
echo "---"
510516
echo "Full logcat: $_logs_dir/logcat-android-verify.txt"
511517
printf 'fail\nReact Native JS error detected on Android\n' > "$_step_dir/$_step.status"

examples/react-native/tests/test-suite-android-e2e.yaml

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -404,27 +404,33 @@ processes:
404404
405405
echo " Checking logs for errors..."
406406
407-
# Save logcat snapshot to file
407+
# Save full logcat for offline analysis, then extract app-only logs
408408
adb -s "$serial" logcat -d > "$_logs_dir/logcat-verify.txt" 2>&1 || true
409+
APP_PID=$(adb -s "$serial" shell pidof "${ANDROID_APP_ID}" 2>/dev/null || true)
410+
if [ -n "$APP_PID" ]; then
411+
adb -s "$serial" logcat -d --pid="$APP_PID" > "$_logs_dir/logcat-app.txt" 2>&1 || true
412+
else
413+
grep -F "${ANDROID_APP_ID}" "$_logs_dir/logcat-verify.txt" > "$_logs_dir/logcat-app.txt" 2>/dev/null || true
414+
fi
409415
410416
# Check for Metro connection errors (these appear in red box)
411417
metro_patterns="unable.*load.*script|could.*not.*connect.*metro|connection.*refused.*8081|packaged.*correctly.*for.*release"
412-
if grep -qiE "$metro_patterns" "$_logs_dir/logcat-verify.txt" 2>/dev/null; then
418+
if grep -qiE "$metro_patterns" "$_logs_dir/logcat-app.txt" 2>/dev/null; then
413419
echo "FAIL: App cannot connect to Metro bundler"
414420
echo "--- Error lines ---"
415-
grep -iE "unable|load|script|connect|metro|refused|8081|packaged|release|bundle" "$_logs_dir/logcat-verify.txt" | tail -30
421+
grep -iE "unable|load|script|connect|metro|refused|8081|packaged|release|bundle" "$_logs_dir/logcat-app.txt" | tail -30
416422
echo "---"
417423
echo "Full logcat: $_logs_dir/logcat-verify.txt"
418424
printf 'fail\nApp cannot connect to Metro bundler\n' > "$_step_dir/$_step.status"
419425
exit 1
420426
fi
421427
422-
# Check for native crash patterns
428+
# Check for native crash patterns (scoped to our app)
423429
crash_patterns="FATAL EXCEPTION|AndroidRuntime.*FATAL"
424-
if grep -qiE "$crash_patterns" "$_logs_dir/logcat-verify.txt" 2>/dev/null; then
425-
echo "FAIL: Crash patterns detected in logcat"
430+
if grep -qiE "$crash_patterns" "$_logs_dir/logcat-app.txt" 2>/dev/null; then
431+
echo "FAIL: Crash patterns detected in app logcat"
426432
echo "--- Error lines ---"
427-
grep -iE "$crash_patterns" "$_logs_dir/logcat-verify.txt" | tail -20
433+
grep -iE "$crash_patterns" "$_logs_dir/logcat-app.txt" | tail -20
428434
echo "---"
429435
echo "Full logcat: $_logs_dir/logcat-verify.txt"
430436
printf 'fail\nCrash patterns detected in logcat\n' > "$_step_dir/$_step.status"
@@ -433,10 +439,10 @@ processes:
433439
434440
# Check for React Native JS errors
435441
rn_patterns="ReactNativeJS.*Error|Unhandled JS Exception|RedBoxError"
436-
if grep -qiE "$rn_patterns" "$_logs_dir/logcat-verify.txt" 2>/dev/null; then
442+
if grep -qiE "$rn_patterns" "$_logs_dir/logcat-app.txt" 2>/dev/null; then
437443
echo "FAIL: React Native JS error detected"
438444
echo "--- Error lines ---"
439-
grep -iE "$rn_patterns" "$_logs_dir/logcat-verify.txt" | tail -20
445+
grep -iE "$rn_patterns" "$_logs_dir/logcat-app.txt" | tail -20
440446
echo "---"
441447
echo "Full logcat: $_logs_dir/logcat-verify.txt"
442448
printf 'fail\nReact Native JS error detected\n' > "$_step_dir/$_step.status"

0 commit comments

Comments
 (0)