Mobile App/Android

[안드로이드] AlarmManager 디버깅

Jman 2024. 4. 11. 20:25

알람을 등록하고 제대로 디바이스에 등록이 됐는지 확인하고 싶지 않는가?

등록은 했지만, 울리지 않는 경우가 있는데 왜 안 울릴까? 정확하게 내가 원하는 시간에 등록이 됐는가?

라는 궁금증에 디버깅하는 방법을 알아보았다.

 

디버깅은 adb shell 을 이용하여, 등록된 알람, 만료된 알람 등 정보들을 확인해볼 수 있다.

 

adb 란 무엇인가?

adb 는 Android Debug Bridge 약자이다.

안드로이드 장치와 통신하여 디버깅 등의 작업을 진행할 수 있는 command line tool 이라고 생각하면 된다.

shell 명령어를 통해 시스템 로그 등 다양한 정보를 확인할 수 있다. 

 

 

https://developer.android.com/tools/adb?hl=ko#directingcommands

 

Android 디버그 브리지(adb)  |  Android Studio  |  Android Developers

기기와 통신할 수 있도록 지원하는 다목적 명령줄 도구인 Android 디버그 브리지에 대해 알아보세요.

developer.android.com

 

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

 

How to read "adb shell dumpsys alarm" output

I'm struggling with setting an alarm properly, and understanding the mechanism of cancelling and rescheduling alarms. I have found, that there is an adb command to retrieve all alarms scheduled on

stackoverflow.com

 

2. 개발 중인 App 에 등록된 AlarmManager 디버깅 (특정 패키지)

adb shell dumpsys alarm | grep "특정 패키지명"

 

위 명령어를 사용 시, 현재 디바이스에 등록된 특정 패키지 알람로그를 보여준다.