๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Google IO 2023] How to test for all screen sizes

https://www.youtube.com/watch?v=YHeWQ9MNuWg 

 

๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ํ™”๋ฉด๋“ค ๊ฐ„ ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋ฉฐ, ์™œ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋Š”๊ฐ€

 

์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์€ ํฐ์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํ…Œ๋ธ”๋ฆฟ, ํด๋”๋ธ”, ๋ฐ์Šคํฌํƒ‘์—์„œ๋„ ์‹คํ–‰๋œ๋‹ค. ๊ฐ ๊ธฐ๊ธฐ๋“ค์€ ๋‹ค๋ฅธ ํ™”๋ฉด ๋ชจ์–‘๊ณผ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์—ฌ๋ฐฑ์˜ ๊ณต๊ฐ„์ด ๋งŽ๊ฑฐ๋‚˜ ๋” ํฐ ํ™”๋ฉด์˜ ๊ธฐ๊ธฐ์—์„œ๋Š” ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์ด ๋” ์‰ฝ๋‹ค. ์ด๋Ÿฌํ•œ ๋งŽ์€ ์ฐจ์ด์ ๋“ค์€ ๊ตฌ์„ฑconfiguration์œผ๋กœ ์š”์•ฝ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

Configuration Changes 

 

๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋“ค์€ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ํ˜„์žฌ์˜ ๊ตฌ์„ฑ์€ ๊ธฐ๊ธฐ์˜ ํšŒ์ „, ํฌ๊ธฐ ์กฐ์ •, ์ ‘๊ธฐ, ๋ฉ€ํ‹ฐ์œˆ๋„์šฐ ๋ชจ๋“œ์— ๋“ค์–ด๊ฐ”๋‹ค ๋‚˜์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

๊ตฌ์„ฑconfiguration์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , ํ™”๋ฉด ๋ชจ์–‘, ๋ฐฉํ–ฅ, locale์ง€์—ญ, density, ํฐํŠธ, ์Šค์ผ€์ผ, weight ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.  

 

Jetpack Compose์—์„œ ํ˜„์žฌ ๊ตฌ์„ฑ์„ composable function์œผ๋กœ LocalComfiguration์ธ locale ์„ค์ •์„ ํ†ตํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. LocaleConfiguration.current๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›์•„ ๊ฐ’์ด ํ•„์š”์‹œ์— ์ƒˆ ๊ตฌ์„ฑ์œผ๋กœ recomposeํ•œ๋‹ค. 

 

ํ•˜๋‚˜์˜ ๊ธฐ๊ธฐ์—์„œ ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•ฑ์ด ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ์ปค๋ฒ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์—ฌ๋Ÿฌ ๋‹ค์–‘ํ•œ ์ดˆ๊ธฐ ๊ตฌ์„ฑ๊ณผ ์•ฑ์ด ์—ด๋ฆฐ ๋™์•ˆ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค. ์•ฑ์ด ์ง€์›ํ•˜๋Š” ๊ตฌ์„ฑ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์ง€๋งŒ, ๊ทธ ๋ฐฉ๋ฒ•๋“ค์€ ์ง€์–‘ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ์ด ์ œํ•œ๋“ค์€ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์˜ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ๋Š” ํ˜ธํ™˜๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ต์…˜์— ์ƒ๊ด€์—†์ด ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์„ ๋ฐ›์•„๋“ค์—ฌ๋ผ. 

 

์ผ๋ฐ˜์ ์œผ๋กœ ๊ตฌ์„ฑ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ๋•Œ, ๊ฐ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ๋‹ค์‹œ ์ƒ์„ฑ๋˜๊ณ , ์ƒˆ ๊ตฌ์„ฑ์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค. ์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์ด ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๊ณ  ์•กํ‹ฐ๋น„ํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ์žˆ๋Š”์ง€ ์‚ดํŽด๋ด๋ผ.

์ด ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ํ™”๋ฉด์ด ๋” ํฐ ๊ธฐ๊ธฐ์—์„œ ํฌ๊ธฐ ์กฐ์ •, ํšŒ์ „์ด ํ›จ์”ฌ ์ž์ฃผ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ์ค‘์š”ํ•˜๋‹ค.

 

๋‹ค๋ฅธ ๊ตฌ์„ฑ๊ณผ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด 3๊ฐ€์ง€ ์ฃผ์š” ํ–‰์œ„๋“ค์„ ์‚ดํ•€๋‹ค.  ํฌ๋ž˜์‹œ, UI ์ƒํƒœ ์ €์žฅ, ํ˜ธํ™˜์„ฑcompatiblity mode์ด๋‹ค.

 

App Crashes

๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‹œ, ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์žฌ์ƒ์„ฑ์‹œ ์•ฑ์ด ํฌ๋ž˜์‹œ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๋ผ. ํšŒ์ „, ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ, ์ ‘๊ธฐ, ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝํ•˜๊ธฐ, ๋ถ„ํ• ํ™”๋ฉด ๋ชจ๋“œ๋กœ ์ง„์ž…ํ•˜๊ธฐ ๋“ฑ.

์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์žฌ์ƒ์„ฑ๋๋Š”๋ฐ, ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์žˆ์œผ๋ฉด ํฌ๋ž˜์‹œ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค. 

 

Save UI State

๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‹œ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ์žƒ์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค. ์—„์ฒญ๋‚˜๊ฒŒ ์‹ค๋ง์Šค๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ ์•ˆ์— ์žˆ๋Š” ํ…์ŠคํŠธ ํ•„๋“œ, ์Šคํฌ๋กค ์œ„์น˜์™€ ๋ฆฌ์ŠคํŠธ ์œ„์น˜, ๋ฏธ๋””์–ด ํ”Œ๋ ˆ์ด๋ฐฑplayback, ํƒ์ƒ‰navigation ์ƒํƒœ๋“ค์€ ๋ฆฌ์…‹๋˜์–ด์„  ์•ˆ๋œ๋‹ค. 

 

Compatibility Mode

compatibility mode์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ผ. ๊ตฌ์„ฑ์— ์ œํ•œ ์‚ฌํ•ญ๋“ค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ธฐ๋Š” ํ•œ๋ฐ, ์•ˆ๋“œ๋กœ์ด๋“œ 12L ์ด์ƒ์˜ ํฐ ํ™”๋ฉด ๊ธฐ๊ธฐ์—์„œ๋Š” compatiblity mode๋กœ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.  compatiblity mode๋กœ ๊ฐ€๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

 ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ํฌ๊ธฐ์กฐ์ •ํ•˜์ง€ ์•Š๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Android Manifest์˜ ์•กํ‹ฐ๋น„ํ‹ฐ attribute์˜ ๋ฆฌ์‚ฌ์ด์ฆˆ ์„ค์ •์„ false๋กœ ๋‘”๋‹ค. ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ ์ •ํ•˜๋ฉด, aspectRatio ๊ฐ’๋“ค์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ํ™”๋ฉด ๋ฐฉํ–ฅ ์ œํ•œ์„ Android Manifest๋‚˜ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฐ ์ œํ•ญ์‚ฌํ•ญ๋“ค์„ ํ†ตํ•ด์„œ ์‹œ์Šคํ…œ์€ ์•ฑ์„ compatibility mode๋กœ ๋†“์„ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ํ˜„์žฌ ๊ธฐ๊ธฐ ๊ตฌ์„ฑconfiguration์ด ์ œํ•œ์‚ฌํ•ญ๋“ค๊ณผ ํ˜ธ์™„๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š”, ์•กํ‹ฐ๋น„ํ‹ฐ์— ์ ์šฉ๋œ๋‹ค. 

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ์•ฑ๋“ค์ด ์„ธ๋กœ์™€ ๊ฐ€๋กœ ๋ฐฉํ–ฅ์—์„œ, ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ๋ชจ๋“œ์— ๋Œ์•„๊ฐ€๋„๋ก ํ•œ๋‹ค. 

 

๋งŒ์•ฝ ์•ฑ์ด ์„ธ๋กœ ๋ฐฉํ–ฅ ์„ค์ •attribute์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค๋ฉด, ํƒœ๋ธ”๋ฆฟ์ด ๊ฐ€๋กœ๋กœ ๋†“์—ฌ์งˆ ๋•Œ ์•ฑ์€ ๋ ˆํ„ฐ๋ฐ•์Šค๋กœ, ์ฆ‰ ๊ฐ€๋กœ ๋ฐฉํ–ฅ ํ™”๋ฉด ์•ˆ์— ์„ธ๋กœ ๋ทฐ์˜ ์•ฑ ํ™”๋ฉด ๋ณด์—ฌ์ง„๋‹ค. ๋งŒ์•ฝ ์ œํ•œ๋œ ์ง€์›restricted support์„ ์„ ์–ธdeclaringํ•˜๋Š” ๊ฒฝ์šฐ์—, ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ธฐ๋ฅผ ํšŒ์ „ํ•˜๊ณ  ๋ฉ€ํ‹ฐ์œˆ๋„์šฐ ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐˆ ๋•Œ์˜ ๊ตฌ์„ฑ ๋ณ€๊ฒฝconfiguration changes์ด ๊ณ„์† ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋ผ. ํฌ๊ธฐ ์ œํ•œ ํ˜น์€, ๋ฐฉํ–ฅ ์ž ๊ธˆ์€ ์•กํ‹ฐ๋น„ํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. (๊ทธ๋‹ˆ๊นŒ, ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ํ™”๋ฉด ๋ฐฉํ–ฅ์„ ๊ณ ์ •ํ•ด๋„ ์•กํ‹ฐ๋น„ํ‹ฐ ๋ผ์ดํ”„์‚ฌ์ดํด์€ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— configuration ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.) 

 

๋งŒ์•ฝ ์•ฑ์ด ๋ชจ๋“  ์˜์—ญ์—์„œ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค๋ฉด, ๋ชจ๋“  ํ™”๋ฉด ํฌ๊ธฐ์— ์ ์šฉ๊ฐ€๋Šฅํ•œ ๊ธฐ์ดˆfoundations๋“ค์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. 

 

Manual Testingg Tool

 

Large screen emulators

- Desktop emulator

- Resizable emulator

์ตœ์†Œ SDK ๋ฒ„์ „ Android 13

 

Device Mirroring in Android Studio 

๋ฒ„์ „ Electric Eel ์ด์ƒ

 

๊ฒฝ๋กœ1 : Settings(Mac์—์„œ๋Š” Preferences) > Tools > Device Mirroring

๊ฒฝ๋กœ2 : Settings(Mac์—์„œ๋Š” Preferences) > Ecperimental - Device Mirroring

 

๊ธฐ๋Šฅ : ํšŒ์ „, ๋ณผ๋ฅจ ๋ณ€๊ฒฝ, ์ž ๊ธˆ, ์ „์›, ํƒ์ƒ‰, ํ™”๋ฉด ๋…นํ™”

 

Multi Previews for Jetpack Compose

 

Automated testing tools

gradle์„ ์ด์šฉ

 

copose์šฉ ํ…Œ์ŠคํŠธ ๋ฃฐ ์„ค๋ช