Slide 1

Slide 1 text

%SPJE,BJHJDPMMFDU\!'VLVPLB^!LHNZTIJO ෼Ͱ෼͔ͬͨؾʹͳΔEVNQTZT

Slide 2

Slide 2 text

%SPJE,BJHJDPMMFDU\!'VLVPLB^!LHNZTIJO ෼Ͱ෼͔ͬͨؾʹͳΔEVNQTZT ໿෼

Slide 3

Slide 3 text

ࣗݾ঺հ

Slide 4

Slide 4 text

ࣗݾ঺հ w LHNZTIJOఝٶ ͗͘Έ΍ w "OESPJEΤϯδχΞ w ෱Ԭࢢࡏॅ w ߹ಉձࣾ%..DPN w 71P&ࣨࣨ௕ w ݉ ΞϓϦ։ൃࣨࣨ௕ w ݉ ։ൃਓࣄϢχοτ

Slide 5

Slide 5 text

"HFOEB

Slide 6

Slide 6 text

"HFOEB w ͋ΒͨΊͯɺEVNQTZTͱ͸ w γεςϜαʔϏε w Ϣʔεέʔε w ECJOGP w ESPQCPY

Slide 7

Slide 7 text

͋ΒͨΊͯɺEVNQTZTͱ͸

Slide 8

Slide 8 text

EVNQTZT adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h] EVNQTZT͸ɺ"OESPJEσόΠε্Ͱಈ࡞͠ɺ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹγεςϜαʔϏεʹؔ͢Δ৘ใΛఏڙ͢ΔπʔϧͰ͢ɻ ࣮ػͰୟ͘ͱɺࣗ෼ͷ৔߹͸ݸͷγεςϜαʔϏε͕ಈ͍ͯ·ͨ͠ɻ

Slide 9

Slide 9 text

EVNQTZT $ adb shell dumpsys --help usage: dumpsys To dump all services. or: dumpsys [-t TIMEOUT] [--priority LEVEL] [--clients] [--dump] [--pid] [--thread] [--help | -l | --skip SERVICES | SERVICE [ARGS]] --help: shows this help -l: only list services, do not dump them -t TIMEOUT_SEC: TIMEOUT to use in seconds instead of default 10 seconds -T TIMEOUT_MS: TIMEOUT to use in milliseconds instead of default 10 seconds --clients: dump client PIDs instead of usual dump --dump: ask the service to dump itself (this is the default) --pid: dump PID instead of usual dump --proto: filter services that support dumping data in proto format. Dumps will be in proto format. --priority LEVEL: filter services based on specified priority LEVEL must be one of CRITICAL | HIGH | NORMAL --skip SERVICES: dumps all services but SERVICES (comma-separated list) --stability: dump binder stability information instead of usual dump --thread: dump thread usage instead of usual dump SERVICE [ARGS]: dumps only service SERVICE, optionally passing ARGS to it

Slide 10

Slide 10 text

γεςϜαʔϏε

Slide 11

Slide 11 text

γεςϜαʔϏε γεςϜαʔϏεͱ͸ͦͷ໊ͷ௨Γ TZTUFNͷϓϩηεͰಈ͍͍ͯΔ4FSWJDFͷ͜ͱ Λࢦ͠·͢

Slide 12

Slide 12 text

γεςϜαʔϏε γεςϜαʔϏεҰཡ͸ɺԼهͷίϚϯυͰऔΕ·͢ adb shell dumpsys -l ࣮ػͰୟ͘ͱɺࣗ෼ͷ৔߹͸ݸ΋ͷγεςϜαʔϏε͕ಈ͍ͯ·ͨ͠ɻ

Slide 13

Slide 13 text

γεςϜαʔϏε val notification = getSystemService(NotificationManager::class.java) val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager ΞϓϦ։ൃऀͰ΋ೃછΈ͕ͳ͍ͳʁͱࢥ͏ਓ͕͍Δ͔΋͠Ε·ͤΜ͕ɺ ͜ΜͳίʔυΛॻ͍ͨ͜ͱ͋Γ·ͤΜ͔ʁ

Slide 14

Slide 14 text

γεςϜαʔϏε ΞϓϦ։ൃऀͰ΋ೃછΈ͕ͳ͍ͳʁͱࢥ͏ਓ͕͍Δ͔΋͠Ε·ͤΜ͕ɺ ͜ΜͳίʔυΛॻ͍ͨ͜ͱ͋Γ·ͤΜ͔ʁ ͍͍ͩͨͦΕͰ͢ɻ val notification = getSystemService(NotificationManager::class.java) val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager

Slide 15

Slide 15 text

γεςϜαʔϏε IUUQTDTBOESPJEDPNBOESPJEQMBUGPSNTVQFSQSPKFDUNBJONBJOGSBNFXPSLTCBTFDPSFKBWBBOESPJEDPOUFOU$POUFYUKBWBM /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.os.PowerManager} for controlling power management, * including "wake locks," which let you keep the device on while * you're running long tasks. */ public static final String POWER_SERVICE = "power"; /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.os.PowerStatsService} for accessing power stats * service. * * @see #getSystemService(String) * @hide */ public static final String POWER_STATS_SERVICE = "powerstats"; /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.os.RecoverySystem} for accessing the recovery system * service. * * @see #getSystemService(String) * @hide */ public static final String RECOVERY_SERVICE = "recovery"; $POUFYU999@4&37*$&͸ԼهͷΑ͏ʹେମҎ্ఆٛ͞Ε͍ͯ·͢ɻ˞͜ͷࢿྉ࡞͍ͬͯΔݱࡏ࣌఺Ͱɻ

Slide 16

Slide 16 text

γεςϜαʔϏε EVNQTZT͸֤4ZTUFN4FSWJDFͰ࣮૷͞Ε͍ͯΔEVNQϝιουΛݺͼग़͍ͯ͠·͢

Slide 17

Slide 17 text

γεςϜαʔϏε ΋ͷʹΑͬͯ͸IFMQΦϓγϣϯ΋࣮૷͞ΕͯΔʢશ෦Ͱ͸ͳ͍ʣͷͰ AEVNQTZT\TFSWJDF^IFMQAͱ͔AEVNQTZT\TFSWJDF^ŠIFMQAͱ͔ଧͬͯΈΔͱྑ͍͔΋

Slide 18

Slide 18 text

͋ΒΊͯɺEVNQTZTͱ͸ EVNQTZTπʔϧ͸ɺ πʔϧͦͷ΋ͷ͕EVNQͷ࣮૷Λ͍࣋ͬͯΔΘ͚Ͱ͸ͳͯ͘ ֤4ZTUFN4FSWJDFͷEVNQϝιουΛݺͿ ͭͳ͗తͳπʔϧͳͷͰ͢ ʢͦΕނʹ஌ͬͯΔ͚Ͳ΋ɺ݁ہԿ͕Ͱ͖Δπʔϧͳͷ͔Α͘Θ͔Βͳ͍ͱࢥΘΕ͕͍ͪͬͯ͏ʣ

Slide 19

Slide 19 text

Ϣʔεέʔε

Slide 20

Slide 20 text

ͨͱ͑͹ެࣜυΩϡϝϯτͰ͸

Slide 21

Slide 21 text

6*ύϑΥʔϚϯεΛςετ͢Δ adb shell dumpsys gfxinfo {package-name} HGYJOGPαʔϏεΛࢦఆ͢Δͱɺه࿥ϑΣʔζதʹൃੜ͢ΔΞχϝʔγϣϯͷϑϨʔϜʹؔ͢ ΔύϑΥʔϚϯε৘ใ͕ग़ྗ͞Ε·͢ɻ

Slide 22

Slide 22 text

ωοτϫʔΫͷ਍அ৘ใΛௐ΂Δ adb shell dumpsys netstats detail OFUTUBUTαʔϏεΛࢦఆ͢ΔͱɺલճͷσόΠεىಈޙʹऩू͞ΕͨωοτϫʔΫ࢖༻৘ใ ͕ग़ྗ͞Ε·͢ɻ

Slide 23

Slide 23 text

ి஑ͷ਍அ৘ใΛௐ΂Δ adb shell dumpsys batterystats {option} CBUUFSZTUBUTαʔϏεΛࢦఆ͢Δͱɺ6*%͝ͱʹ෼ྨ͞ΕͨσόΠεͷి஑࢖༻ྔʹؔ͢Δ ৘ใ͕ग़ྗ͞Ε·͢ɻ

Slide 24

Slide 24 text

Α͘ΈΔωοτͰͷ࢖͍ํ

Slide 25

Slide 25 text

"DUJWJUZͷ৘ใΛௐ΂Δ adb shell dumpsys activity BDUJWJUZαʔϏε͔Β"DUJWJUZͷελοΫ΍'SBHNFOUҰཡ΍7JFXͷ֊૚ͳͲΛௐ΂Δ͜ ͱ͕Ͱ͖·͢

Slide 26

Slide 26 text

ΞϥʔϜ৘ใΛௐ΂Δ adb shell dumpsys alarm BMBSNαʔϏε͔Βηοτͨ͠ΞϥʔϜΛ֬ೝ͢Δ͜ͱ͕Ͱ͖·͢

Slide 27

Slide 27 text

ͦͷ΄͔ࡉ͔͍΋ͷ

Slide 28

Slide 28 text

ύʔϛογϣϯ৘ใΛऔಘ adb shell dumpsys package {package-name} | grep permission

Slide 29

Slide 29 text

ύʔϛογϣϯ৘ใΛऔಘ adb shell dumpsys package com.kgmyshin.sample | grep permission declared permissions: requested permissions: android.permission.INTERNET android.permission.ACCESS_NETWORK_STATE android.permission.WAKE_LOCK android.permission.POST_NOTIFICATIONS com.google.android.c2dm.permission.RECEIVE com.google.android.gms.permission.AD_ID android.permission.ACCESS_ADSERVICES_ATTRIBUTION android.permission.ACCESS_ADSERVICES_AD_ID com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE com.google.android.providers.gsf.permission.READ_GSERVICES android.permission.CAMERA install permissions: com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE: granted=true com.google.android.c2dm.permission.RECEIVE: granted=true com.google.android.providers.gsf.permission.READ_GSERVICES: granted=true android.permission.ACCESS_ADSERVICES_AD_ID: granted=true android.permission.INTERNET: granted=true android.permission.ACCESS_NETWORK_STATE: granted=true android.permission.ACCESS_ADSERVICES_ATTRIBUTION: granted=true com.google.android.gms.permission.AD_ID: granted=true android.permission.WAKE_LOCK: granted=true runtime permissions: android.permission.POST_NOTIFICATIONS: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED| USER_SENSITIVE_WHEN_DENIED] android.permission.CAMERA: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED| USER_SENSITIVE_WHEN_DENIED]

Slide 30

Slide 30 text

%PTFϞʔυΛςετ͢Δ b`` Ϣʔβʔ͕σόΠεΛిݯ͔Β֎ͯ͠੩ࢭঢ়ଶʹ͠ɺը໘͕Φϑͷঢ়ଶͰҰఆ࣌ؒଓ͘ͱɺ σόΠε͸%P[FϞʔυʹͳΓ·͢ɻ%P[FϞʔυͰ͸ɺωοτϫʔΫ΍$16࢖༻཰ͷߴ ͍αʔϏε΁ͷΞϓϦͷΞΫηε͕γεςϜͰ੍ݶ͞ΕɺόοςϦʔͷઅ໿͕ࢼΈΒΕ· ͢ɻ·ͨɺΞϓϦ͕ωοτϫʔΫʹΞΫηε͠ͳ͘ͳΓɺδϣϒɺಉظɺඪ४ΞϥʔϜΛԆ ظ͠·͢ɻ IUUQTEFWFMPQFSBOESPJEDPNUSBJOJOHNPOJUPSJOHEFWJDFTUBUFEP[FTUBOECZ IMKBUFTUJOH@EP[F

Slide 31

Slide 31 text

%PTFϞʔυΛςετ͢Δ adb shell dumpsys battery unplug ॆిΛ0''

Slide 32

Slide 32 text

%PTFϞʔυΛςετ͢Δ adb shell dumpsys battery unplug ॆిΛ0'' γεςϜΛڧ੍తʹΞΠυϧঢ়ଶʢ%P[FϞʔυʣʹ͠·͢ adb shell dumpsys deviceidle force-idle

Slide 33

Slide 33 text

%PTFϞʔυΛςετ͢Δ adb shell dumpsys battery unplug ॆిΛ0'' γεςϜΛڧ੍తʹΞΠυϧঢ়ଶʢ%P[FϞʔυʣʹ͠·͢ adb shell dumpsys deviceidle force-idle %P[FϞʔυղআͯ͠ɺ%P[FϞʔυ͔Βൈ͚ͨ࣌ͷঢ়ଶΛ֬ೝ͢Δ adb shell dumpsys deviceidle unforce adb shell dumpsys battery reset

Slide 34

Slide 34 text

ECJOGP ࢲͷਪ͠4ZTUFN4FSWJDF✌

Slide 35

Slide 35 text

%#΁ͷΫΤϦ৘ใΛௐ΂Δ adb shell dumpsys dbinfo ECJOGPαʔϏε͔Βൃߦͨ͠ΫΤϦϩάΛ֬ೝ͢Δ͜ͱ͕Ͱ͖·͢

Slide 36

Slide 36 text

ΫΤϦϩάΛݟΔ͜ͱ͕Ͱ͖Δ ͜Μͳײ͡ͷग़ྗʹͳΓ·͢ ɻϒϨΠΫϙΠϯτషͬͨΓEFCVHͰ্ཱͪ͛ͨΓ͢Δඞཁ͕ͳ͍ ͠ɺͦ΋ͦ΋EFCVHHBCMFͳΞϓϦ͡Όͳͯ͘΋ετΞ͔ΒೖΕͨ΋ͷͰ΋͜͜·ͰݟΕ·͢ɻ

Slide 37

Slide 37 text

ΫΤϦϩάΛݟΔ͜ͱ͕Ͱ͖Δ ͜Μͳײ͡Ͱୟ͍ͨΫΤϦΛ֬ೝ͢Δ͜ͱ͕Ͱ͖·͢ɻ

Slide 38

Slide 38 text

͔͔ͬͨ࣌ؒ΋Θ͔Δ 42-ʹ͔͔ͬͨ࣌ؒ΋Θ͔Δɻ

Slide 39

Slide 39 text

'MVUUFSͰ࡞ͬͨ΋ͷͰ΋ݟΔ͜ͱ͕Ͱ͖Δ ͞Βʹ͍͏ͱɺ͜ͷϩά͸'MVUUFSͰ࡞͍ͬͯΔΞϓϦͷ΋ͷͰ͢ɻ 'MVUUFSͰ΋42-JUFΛ࢖͍ͬͯΕ͹ɺΫΤϦϩάΛݟΕ·͢ɻ

Slide 40

Slide 40 text

ESPQCPY ࢲͷਪ͠4ZTUFN4FSWJDF✌

Slide 41

Slide 41 text

˞஫ҙ ಉ໊ͷΫϥ΢υετϨʔδ͕͋Γ·͕͢ ผ෺Ͱ͢

Slide 42

Slide 42 text

ศར͚ͩͲɺ ͋Μ·Γ࢖͍ͬͯΔਓΛݟͨ͜ͱ͕ͳ͍ άάͬͯ΋ͳ͔ͥPQFSBOEP04͞Μ͕࢖͍ͬͯΔ༷ࢠ͔͠ग़ͯ͜ͳ͍

Slide 43

Slide 43 text

ESPQCPYͱ͸ ESPQCPYͱ͸୺຤্ͰBQQ@DSBTI΍BOSͳͲ͕ൃੜͨ࣌͠ͷϩάΛEBUBTZTUFNESPQCPY ʹอଘ͢ΔػߏͰ͢ɻ BOS DSBTI DSBTI ESPQCPY ϩά͸Լهͷ৚݅Ͱফ͑·͢ w ݸҎ্ϩά͕͋Δ w ඵʢ೔ ͨͬͨ

Slide 44

Slide 44 text

BECTIFMMEVNQTZTESPQCPYͷ࢖͍ํ

Slide 45

Slide 45 text

ΤϯτϦʔҰཡΛදࣔ͢Δ $ adb shell dumpsys dropbox Drop box contents: 6 entries Max entries: 1000 Low priority rate limit period: 2000 ms Low priority tags: {data_app_wtf, keymaster, system_server_wtf, system_app_strictmode, system_app_wtf, system_server_strictmode, data_app_strictmode, netstats} 2024-12-26 03:58:32 data_app_anr (compressed text, 18256 bytes) 2024-12-26 04:01:03 data_app_anr (compressed text, 18134 bytes) 2024-12-26 04:01:16 data_app_anr (compressed text, 19418 bytes) 2024-12-27 14:58:32 data_app_anr (compressed text, 23326 bytes) 2024-12-27 14:59:29 data_app_anr (compressed text, 23742 bytes) 2024-12-27 15:00:16 data_app_crash (text, 1468 bytes) Usage: dumpsys dropbox [--print|--file] [YYYY-mm-dd] [HH:MM:SS] [tag] ABECTIFMMEVNQTZTESPQCPYAͰΤϯτϦʔҰཡΛ֬ೝͰ͖·͢ɻ ࠓճ͸BOS͕ͭͱBQQ@DSBTI͕ͭཷ·ͬͯΔ͜ͱΛ֬ೝͰ͖·͢

Slide 46

Slide 46 text

ϩάΛ֬ೝ͢Δ $ adb shell dumpsys dropbox —print Drop box contents: 6 entries Max entries: 1000 Low priority rate limit period: 2000 ms Low priority tags: {data_app_wtf, keymaster, system_server_wtf, system_app_strictmode, system_app_wtf, system_server_strictmode, data_app_strictmode, netstats} ======================================== 2024-12-26 03:58:32 data_app_anr (compressed text, 18256 bytes) Process: com.amazon.kindle PID: 18263 UID: 10253 Frozen: false Flags: 0x30d83e44 Package: com.amazon.kindle v1285944011 (8.112.3.0(2.0.28400.0)) Foreground: Yes ABECTIFMMEVNQTZTESPQCPYŠQSJOUAͰϩάͷத਎ΛදࣔͰ͖·͢ɻ ͔͠͠ɺ͢΂ͯͷΤϯτϦʔͷத਎͕࿈݁͞Εͯදࣔ͞ΕΔͷͰ͘͢͝௕͍Ͱ͢

Slide 47

Slide 47 text

ߜͬͯϩάΛදࣔ͢Δ $ adb shell dumpsys dropbox 2024-12-27 15:00:16 --print Drop box contents: 6 entries Max entries: 1000 Low priority rate limit period: 2000 ms Low priority tags: {data_app_wtf, keymaster, system_server_wtf, system_app_strictmode, system_app_wtf, system_server_strictmode, data_app_strictmode, netstats} Searching for: 2024-12-27 15:00:16 ======================================== 2024-12-27 15:00:16 data_app_crash (text, 1468 bytes) Process: com.example.myapplication PID: 6858 UID: 10375 Frozen: false Flags: 0x20e8bf46 Package: com.example.myapplication v1 (1.0) Foreground: Yes Process-Runtime: 1971 Build: google/oriole/oriole:14/UQ1A.231205.015/11084887:user/release-keys Crash-Handler: com.android.internal.os.RuntimeInit$KillApplicationHandler Loading-Progress: 1.0 Dropped-Count: 0 java.lang.RuntimeException: test at com.example.myapplication.MainActivity.onCreate$lambda$1(MainActivity.kt:22) at com.example.myapplication.MainActivity.$r8$lambda$Qv3VJsM63Xovrk15oYiuFfzuA-I(Unknown Source:0) at com.example.myapplication.MainActivity$$ExternalSyntheticLambda1.onClick(D8$$SyntheticClass:0) at android.view.View.performClick(View.java:7658) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218) at android.view.View.performClickInternal(View.java:7635) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:30167) at android.os.Handler.handleCallback(Handler.java:958) Ұཡදࣔͨ࣌͠ͷ λΠϜελϯϓΛ࢖͏͜ͱͰ ߜͬͯϩάΛදࣔ͢Δ͜ͱ͕ Ͱ͖·͢ ABECTIFMMEVNQTZTESPQCPY \UJNFTUBNQ^ŠQSJOUA

Slide 48

Slide 48 text

ͳΜ͔ࠓΫϥογϡ͚ͨ͠Ͳɺ ϩά͕ྲྀΕͪΌͬͨʜ ͱ͍͏࣌ʹγϡοͱૉૣ͘ ֬ೝ͢Δ͜ͱ͕Ͱ͖ͯେมศརͰ͢

Slide 49

Slide 49 text

·ͱΊ

Slide 50

Slide 50 text

·ͱΊ w EVNQTZT͸4ZTUFN4FSWJDFͱͷͭͳ͗ͷπʔϧ w ECJOGP͸ศར w ESPQCPY͸ศརʢάάϥϏϦςΟ͸௿͍ʣ w EFCVHHBCMF͡Όͳͯ͘ྑ͍͠ɺEFCVH઀ଓ΋ෆཁͰ֤छ৘ใΛऔಘͰ͖Δศ རͳπʔϧ