ํฌ์ŠคํŠธ

Unity ANR

Unity ANR

๐Ÿ’ซ ๋จธ๋ฆฌ๋ง


๐Ÿ’ซ ANR


Mobile Native Debugging & ANR

ANR ์ •์˜

Applicaftion Not Responding
int Android

App freezing
IOS

Unity Main Thread != Android Main Thread
์—ฐ๋™์ด ์•ˆ๋˜๋ฉด์„œ ๋ฐœ์ƒ

ํฌ๊ฒŒ 5๊ฐ€์ง€

5์ดˆ๋Š” ์„ค์ •๊ฐ€๋Šฅ (์ ˆ๋Œ€์  ์ˆ˜์น˜ X)

์ž…๋ ฅ ์ „๋‹ฌ ํƒ€์ž„์•„์›ƒ

  • ์ž…๋ ฅ ์— 5์ดˆ ์ด๋‚ด ์‘๋‹ตํ•˜์ง€ ์•Š์Œ ์„œ๋น„์Šค ์‹คํ–‰
  • ์„œ๋น„์Šค ์ˆ˜ ์ดˆ๋‚ด ์‹คํ–‰์„ ใ…ก์™„๋ฃŒํ•˜์ง€ ์•Š์Œ StartForeground() tjqltmrk โ€œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ JobScheduler

์ž…๋ ฅ ์ „๋‹ฌ์— ์ง‘์ค‘ ์„ค๋ช…

ANR Thread ๋™์ž‘

  • Dump ์ž‘์„ฑ

์ด๋ถ€๋ถ„์— ๋ฌธ์ œ

AND ๊ฐ์ง€ ์‹œ์  stack trace๊ฐ€ ์ •ํ™•ํ•œ ์‹œ์  ์•Œ๊ธฐ ์–ด๋ ค์›€

MAinThread BLco kStarted
UserInputEvetn
5์ดˆ timeout
OS Triggers the ANR
์ˆ˜์ดˆํ›„์— ANR Dlialog Shwon

์ฒ˜์Œ ์‹œ์ž‘ํ–ˆ์„๋•Œ์˜ StrackTrace๊ฐ€ ์•„๋‹ˆ๋ผ
์ˆ˜์ดˆ ์ง€๋‚˜์„œ ์บ์น˜ํ• ๋•Œ์˜ StackTarce๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— (์ •ํ™•ํ•˜์ง€ ์•Š์Œ)

๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ์—์„œ ์ˆจ๊ฒจ์ ธ ์žˆ์„ ์ˆ˜ ์žˆ์Œ

์ด๊ฒƒ์€ ์œ ๋‹ˆํ‹ฐ์—์„œ Crash ๋“ฑ์œผ๋กœ ์ทจ๊ธ‰๋จ

Debugging ๋ฐฉ๋ฒ•

Natice Device์˜ ๋กœ๊ทธ ์ˆ˜์ง‘ -> Android Logcar Pakcage

Wifi๋„ ํŽ˜์–ด๋ง๋„ ๊ฐ€๋Šฅ??

Package, Input๋„ ๊ฐ€๋Šฅํ•˜๋„ค?

ADB dumpsys?

adb bugreprot

  • Tip
    • ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•œ Andoid Version ์ฒดํฌ
    • โ€ Device ์ฒดํฌ
    • ๋ฐœ์ƒ ์‹ฒ๊ฐ€ APP Version ์ฒดํฌ
    • ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ + Perfetto
      • MainThread ์ฒดํฌ
    • Third-party package ์ œ๊ฑฐ ํ…Œ์ŠคํŠธ
    • Android Studio Simulator ์‚ฌ์šฉ??

Methodology

  • ๋ณด๊ณ  ์„œ๋น„์Šค ํ†ตํ•ฉ
  • ๋ฆฌํฌํŠธ๋ฅผ ๋ถ„์„, ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๊ฐ€ ์˜๋ฏธ์žˆ๋Š”์ง€ ํ™•์ธ
    • ๊ฒŒ์ž„ ๊ด€๋ จ ๋ฌธ์ œ != ์•ˆ๋“œ๋กœ์ด๋“œ ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ or ์ €์ˆ˜์ „ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ๋นŒ๋“œ ID ghkrdls
      • ใ…ฃใ…‘ใ… ใ…‘ใ…ฃ2์ฒดใ…”..๋‚ด vkdlfdl dnlcl
      • ใ„ฑใ„ทใ…ใ…‡๋”œ -ใ…œ ใ…ฃใ…‘ใ… ใ…‘ใ…ฃ2์ฒดใ…”.๋‚ด ~~~~

๋ฐœ์ƒ ์œ„์น˜๋ณ„ ANR

  • ๊ฒŒ์ž„ ์ฝ”๋“œ
    • cpp๋กœ ๋ณ€ํ™˜๋œ C#
    • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค libil2cpp.so
      • C# ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    • ์Šคํฌ๋ฆฐ Game.cpp์—์„œ ์˜ฌ ๋ฐœ์ƒ
      • Logger๋Š” C#์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค ์ด๋ฆ„
      • Log๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„
    • C# ํ”„๋กœ์ ~~
      • ์‚ฌ์ง„ ์ฐธ๊ณ 
  • ์—”์ง„์ฝ”๋“œ
    • ์‚ฌ์ง„ ์ฐธ๊ณ 
  • ํƒ€์‚ฌ SDK ํ”Œ๋Ÿฌ๊ทธ์ธ
    • ์‚ฌ์ง„ ์ฐธ๊ณ 
  • ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†์Œ
    • Google ๋ฌธ์˜, ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ์ œ ๋ฒ”์œ„ ์ขํžˆ๊ธฐ, ANR ๊ฐ€๋Šฅ์„ฑ ์ ์Œ์Œ
  • ๋ฉ”๋ชจ๋ฆฌ์™€ ANR ๊ด€๋ จ์„ฑ
    • ์ข…์ข… ๋ณด๊ณ ๋˜๋Š” ์‚ฌ๋ก€ ์ค‘ LowMemory ์ฝœ๋ฐฑ ํ˜ธ์ถœ ํ™•์ธ
    • Activity๊ฐ€ ๋ฐฑ๊ทธ๋ผ์ด๋ˆ„๋“œ๋กœ ์ „ํ™”๋˜๊ณ  AOS์—์„œ ๋ฉ”๋ชจ๋ฆด ๊ฒฝ๊ณ ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ ๋ฐœ์ƒ ์ถ”์ •
    • ์œ ํœด๋ฉ”๋ชจ๋ฆฌ์™€ ANR ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„ ํ™•์ธ

์‚ฌ๋ก€

์œ ๋‹ˆํ‹ฐ ์ตœ๋Œ€ ์ •์ง€๋Š” 4์ดˆ?

@๋น„๋™๊ธฐ ์ž‘์—… ์‹œ๊ฐ„ ์–ด๋–ป๊ฒŒ ํƒ์ง€?

Surface Desrotyed
์žฌํ˜„ ์–ด๋ณ‡๊ณ  APp & ๊ทธ๋ž˜ํ”ฝ ์žฅ์น˜ ๊ฐ„์˜ ์ž˜๋ชปใ……๋œ ์ƒํƒœ์™€ ๊ด€๋ จ์ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ

๐Ÿ’ซ ๋ฉ”๋ชจ


๐Ÿซง ์ฐธ๊ณ 

  • UNTIE SEOUL 2025
    • โ€˜์ดํฌ์†Œโ€™: โ€˜Mobile Native Debugging & ANRโ€™
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.