[안드로이드] AlarmManager 디버깅
알람을 등록하고 제대로 디바이스에 등록이 됐는지 확인하고 싶지 않는가?
등록은 했지만, 울리지 않는 경우가 있는데 왜 안 울릴까? 정확하게 내가 원하는 시간에 등록이 됐는가?
라는 궁금증에 디버깅하는 방법을 알아보았다.
디버깅은 adb shell 을 이용하여, 등록된 알람, 만료된 알람 등 정보들을 확인해볼 수 있다.
adb 란 무엇인가?
adb 는 Android Debug Bridge 약자이다.
안드로이드 장치와 통신하여 디버깅 등의 작업을 진행할 수 있는 command line tool 이라고 생각하면 된다.
shell 명령어를 통해 시스템 로그 등 다양한 정보를 확인할 수 있다.
https://developer.android.com/tools/adb?hl=ko#directingcommands
adb 에 대해 궁금하다면 위 링크를 통해 공부해보면 좋을 것 같다.
하지만, 오늘 우리는 adb shell 을 이용하여 AlarmManager 를 이용하여 등록한 알람을 디버깅하는 방법을 알아볼 것이다.
크게 두 가지 명령어를 사용하여 확인해볼 수 있다.
1. AlarmManager 에 등록된 것만이 아닌, 안드로이드 내 Alarm 등록된 정보 보기
등록된 알람 리스트 등 다양한 알람정보를 확인할 수 있다.
adb shell dumpsys alarm | less
| less 를 추가로 작성을 해야 맨 처음부터 log 를 확인할 수 있따.
Next alarm clock information: 다음으로 예약된 알림이 언제 발생할지와 이에 대한 세부정보 표시
ELAPSED #1: Alarm{be1fdee type 3 origWhen 865747386 whenElapsed 865747386 android}
tag=*alarm*:*CountQuotaTracker.cleanup*
type=ELAPSED origWhen=-2m4s949ms window=+7m35s905ms repeatInterval=0 count=0 flags=0x8
policyWhenElapsed: requester=-2m4s949ms app_standby=-12m2s675ms device_idle=-- battery_saver=-- tare=-12m12s814ms
whenElapsed=-2m4s949ms maxWhenElapsed=+5m30s956ms
listener=android.app.AlarmManager$ListenerWrapper@f7e5682
RTC_WAKEUP #9: Alarm{5f4ff52 type 0 origWhen 1712791386153 whenElapsed 866145308 com.ktcs.whowho}
tag=*walarm*:com.ktcs.whowho.work_action_sdmlib_cycle_periodic
type=RTC_WAKEUP origWhen=2024-04-11 08:23:06.153 window=0 exactAllowReason=permission repeatInterval=0 count=0 flags=0x5
policyWhenElapsed: requester=+4m32s973ms app_standby=-10m27s24ms device_idle=-- battery_saver=-10m27s24ms tare=-10m27s24ms
whenElapsed=+4m32s973ms maxWhenElapsed=+4m32s973ms
operation=PendingIntent{a87e223: PendingIntentRecord{1cf7b06 com.ktcs.whowho broadcastIntent}}
idle-options=Bundle[{android.pendingIntent.backgroundActivityAllowed=false, android:broadcast.temporaryAppAllowlistReasonCode=302, android:broadca
st.temporaryAppAllowlistDuration=10000, android:broadcast.temporaryAppAllowlistReason=, android:broadcast.temporaryAppAllowlistType=0}]
Removal history: 이전에 제거된 알람에 대한 이력을 보여준다.
Removal history:
1000:
[tag=*walarm*:WificondScannerImpl Scan Timeout H=L:53be729 reason=alarm_cancelled elapsed=865156753 rtc=2024-04-11 08:06:37.598]
[tag=*walarm*:WificondScannerImpl Scan Timeout H=L:c085726 reason=alarm_cancelled elapsed=865171501 rtc=2024-04-11 08:06:52.346]
[tag=*walarm*:WificondScannerImpl Scan Timeout H=L:2e6facf reason=alarm_cancelled elapsed=865181602 rtc=2024-04-11 08:07:02.448]
[tag=*walarm*:WificondScannerImpl Scan Timeout H=L:2e8e2d reason=alarm_cancelled elapsed=865189548 rtc=2024-04-11 08:07:10.393]
[tag=*walarm*:NLPOnceRequest H=L:e7b0c4e reason=alarm_cancelled elapsed=865189630 rtc=2024-04-11 08:07:10.475]
[tag=*walarm*:WificondScannerImpl Scan Timeout H=L:edcf52e reason=alarm_cancelled elapsed=865194714 rtc=2024-04-11 08:07:15.560]
[tag=*alarm*:cohttp://m.samsung.android.forest.promovence.NOTIFY_WEEKLY_REPORT H=PI:d1b1dc1 reason=alarm_cancelled elapsed=865209360 rtc=2024-04-11 08:0
7:30.205]
Addition history: 알람이 추가된 이력을 보여준다. 즉, 언제 추가되었는지도 확인이 가능하다.
[tag=*alarm*:cohttp://m.samsung.android.app.telephonyui.action.STATUS_ALL_SETTING_LOGGING T=1 F=9 AC=false H=PI:971756c OW=2024-04-02 10:28:58.122 elapse
d=144825 rtc=2024-04-01 07:49:45.671]
[tag=*walarm*:com.android.internal.telephony.carrier_key_download_alarm T=0 F=8 AC=false H=PI:735e504 OW=2049-07-01 20:44:00.751 WL=3600000 elapse
d=1506508 rtc=2024-04-01 08:12:27.354]
Delivery history: 알람이 전달된 이력을 보여준다. 알람이 실제로 발생하여 처리됐는지 보여준다.
[tag=*alarm*:DetectMovementSPListener origWhen=865339741 H=L:ad624e8 elapsed=865339742 rtc=2024-04-11 08:09:40.588]
[tag=*walarm*:cohttp://m.ktcs.whowho.work_action_sdmlib_cycle_periodic origWhen=1711928619468 H=PI:2b30e8d elapsed=3383628 rtc=2024-04-01 08:43:44.473]
Expiration history: 알람이 만료된 이력을 보여준다. 예약된 작업이나 이벤트에 대한 알람이 만료되면 기록된다.
[flag=8 wakeup=865896577 non-wakeup=865839155 elapsed=865839158 rtc=2024-04-11 08:18:00.003]
Alarm Stats: 알람 관련 통계
u0a1110:cohttp://m.ktcs.whowho +99ms running, 1 wakeups:
+99ms 1 wakes 1 alarms, last -10m27s118ms:
*walarm*:cohttp://m.ktcs.whowho.work_action_sdmlib_cycle_periodic
https://stackoverflow.com/questions/28742884/how-to-read-adb-shell-dumpsys-alarm-output
2. 개발 중인 App 에 등록된 AlarmManager 디버깅 (특정 패키지)
adb shell dumpsys alarm | grep "특정 패키지명"
위 명령어를 사용 시, 현재 디바이스에 등록된 특정 패키지 알람로그를 보여준다.