Android 17

์•ˆ๋“œ๋กœ์ด๋“œ Android ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ Flow ์ดํ•ดํ•˜๊ธฐ

ํ•ซ ์ŠคํŠธ๋ฆผ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์›์†Œ๋ฅผ ์ƒ์„ฑCoroutines Channel์ปฌ๋ ‰์…˜(List, Set) ์ฝœ๋“œ ์ŠคํŠธ๋ฆผ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰Sequence, StreamFlow, RxJava ์ŠคํŠธ๋ฆผ FlowFlow๋ฅผ ๋ฌด๊ธฐ ์•„์ดํ…œ ๊ณต์žฅ ์•ˆ์— ์žˆ๋Š” ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ผ๊ณ  ์ƒ๊ฐ๐Ÿ’จ๊ฐ๊ฐ์˜ ์•„์ดํ…œ๋“ค์„ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ƒ๊ฐ๋ฌด๊ธฐ ์ €์žฅ๊ณ ์—์„œ ๋ฌด๊ธฐ(๋ฐ์ดํ„ฐ)๋“ค์„ ๋žœ๋ค ํ•˜๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ ์ƒํ™ฉ๋“ค์„ ์ €์žฅํ•ด ๋ณด์ž!sealed class Weapon { class Sword(): Weapon() class Staff(): Weapon() class SpellBook(): Weapon()} Flow ์ƒ์„ฑval weaponProducer: FlowFlow๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ• → ์ฝ”๋ฃจํ‹ด ์ฑ„๋„์˜ prod..

Android 2024.07.21

Downloadable and Preloaded Fonts on Android

Downloadable and Preloaded Fonts on Android ์•ฑ์„ ๋…ํŠนํ•˜๊ฒŒ ๋ณด์ด๊ณ  ๋Š๋ผ๊ฒŒ ๋งŒ๋“œ๋Š” ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋Š” ํ›Œ๋ฅญํ•œ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๊ธฐ๋ณธ ํฐํŠธ๋Š” Roboto์ธ๋ฐ, ์‚ฌ์šฉ์ž์˜ ํฐํŠธ๊ฐ€ ์•„๋‹Œ Roboto๋ฅผ ๋ณด๊ฒŒ ํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•ด Google์€ Google Fonts ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ํฐํŠธ๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ๊ณ , ์ด๋ฅผ Downloadable Fonts๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ถ”ํ›„ Google์€ Preloaded Fonts๋ฅผ ์†Œ๊ฐœํ•˜์—ฌ ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ๊ฐ€ ์•„๋‹Œ ์„ค์น˜๋  ๋•Œ ํฐํŠธ๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. Downloadable Fonts๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๊ณ , ํฐํŠธ๋ฅผ Preload ..

Date and Time Formatting in Kotlin with the DateTime Library

์ตœ๊ทผ ํšŒ์‚ฌ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์ค‘, ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค์ฃผ๋Š” DateFormat(”2024-03-11 07:18:25”)๊ณผ ๋””์ž์ธ์ชฝ์—์„œ ์›ํ•˜๋Š” DateFormat(”03/11/2024 07:18:25”)์ด ๋‹ฌ๋ผ ๋ฐ˜๋‚˜์ ˆ์„ ์‚ฝ์งˆํ•œ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ,, ์ด ์ฃผ์ œ๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค…๐Ÿฅน kotlinx-datetime ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” “v0.6.0-RC”์—์„œ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์— ๊ด€ํ•œ Formatting Options ์˜ˆ๋ฅผ๋“ค์–ด “March 1, 2024, at 9:15 AM”์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด, LocalDateTime(2024, 3, 1, 9, 15, 0, 0) ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LocalDateTime LocalDateTime.Formats.ISO → 2024-03-01T09:15:00 L..

์•ˆ๋“œ๋กœ์ด๋“œ Android API Key ๋‹ค๋ฃจ๊ธฐ, ์ค‘์š”ํ•œ ๊ฐ’ ์ˆจ๊ธฐ๊ธฐ

์•ˆ๋“œ๋กœ์ด๋“œ API Key ๋“ฑ ์ค‘์š”ํ•œ ๊ฐ’์„ ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ• 1. ํ”„๋กœ์ ํŠธ ๋ ˆ๋ฒจ build.gradle์— ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€ plugins { ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false } 2. build.gradle(:app)์— ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€ plugins { ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' } 3. local.properties ์— ๊ฐ์ข… ์ˆจ๊ฒจ์•ผํ•  ๊ฐ’์„ ์ถ”๊ฐ€ 4. ๋นŒ๋“œ ํ›„, Constants.kt ํŒŒ์ผ์— ๋ณ€์ˆ˜ ์ƒ์„ฑ BuildConfig. + local.properties์— ๋“ฑ๋กํ–ˆ๋˜ ..

Android 2023.09.10

์•ˆ๋“œ๋กœ์ด๋“œ Android Could not resolve com.android.tools.build:gradle:7.4.2. ์˜ค๋ฅ˜

Android Could not resolve com.android.tools.build:gradle:7.4.2. Jetpack Compose Project๋ฅผ Github์—์„œ Cloneํ•ด์˜ค๋ฉด์„œ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์—์„œ ๋งค์šฐ ์นœ์ ˆํ•˜๊ฒŒ ํ•ด๊ฒฐ๋ฒ•์„ ์•Œ๋ ค์คฌ๋Š”๋ฐ๋„(....) ์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ 1์‹œ๊ฐ„์€ ์“ด ๋“ฏ.. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌด์ž‘์ • ๊ตฌ๊ธ€๋ง ํ•˜์ง€ ๋ง๊ณ , ๊ผผ๊ผผํžˆ ์ฝ๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž! ํ‘œ์‹œํ•œ ๋ถ€๋ถ„์„ ์ž˜ ์ฝ์–ด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. Gradle 7.4.2 ๋ฒ„์ „๊ณผ Java 8 ๋ฒ„์ „์€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ •ํ™•ํžˆ๋Š” Gradle 7.3.0๋ถ€ํ„ฐ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ์ตœ์†Œ JDK 11 ์ด์ƒ์ด ์š”๊ตฌ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. โฌ‡๏ธ ํ”„๋กœ์ ํŠธ JDK๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜Š https://hyu..

Android 2023.06.04

์•ˆ๋“œ๋กœ์ด๋“œ Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8 ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ArticFox๋ฒ„์ „๋ถ€ํ„ฐ Compose๊ฐ€ ๋„์ž…๋˜๋ฉด์„œ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋‹ค. Compose ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ์ด๋Ÿฌ๋‹ˆ๊นŒ ์ •๋ง ๊ท€์ฐฎ๋‹ค์•„ . . . ๐Ÿถ ์›์ธ์€ ์ ํ˜€์žˆ๋Š” ๊ทธ๋Œ€๋กœ๋‹ค. Java์˜ JDK๋ฅผ ์ƒ˜์†ก๋•Œ๋ฌธ์— Java 1.8๋กœ ํ•ด๋†”์„œ ๊ทธ๋Ÿฐ ๊ฑฐ์˜€๋‹ค. ํ˜น์‹œ Java 11์ด ์•ˆ ๊น”๋ ค์žˆ๋‹ค๋ฉด, ์š”๊ธฐ๋กœ ๊ฐ€์„œ ๋‹ค์šด ๋ฐ›์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (์ €๋„ ์—ฌ๊ธฐ์„œ ๋‹ค์šด ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค . . ) https://www.oracle.com/java/technologies/downloads/#java11 ์ž ์ด์ œ ์ง„์งœ ์‹œ์ž‘! โ‘  File - Project Structure..

Android 2022.07.04

์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„ํŠผ background drawable ์ ์šฉ ์•ˆ๋จ. ์•ˆ๋˜๋Š” ์ด์œ 

์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„ํŠผ background drawable ์ ์šฉ ์•ˆ๋จ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋ฒ„ํŠผ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ธฐ ์œ„ํ•ด ์—ด์‹ฌํžˆ drawable๋กœ shape๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ background์— ์ ์šฉ์‹œํ‚ค๋ฉด ๋””ํดํŠธ ์ƒ‰์ธ ๋ณด๋ผ์ƒ‰์ด ๋œจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. Button ์„ android.widget.Button ๋˜๋Š” androidx.appcompat.widget.AppCompatButton ์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ฐ”๋กœ ํ•ด๊ฒฐ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์™œ ์ด๋Ÿฐ ๊ฑด์ง€, ๊ทธ๋ƒฅ Button๊ณผ๋Š” ๋ฌด์Šจ ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์ด์œ ๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„ํŠผ background drawable ์ ์šฉ ์•ˆ ๋˜๋Š” ์ด์œ  res/values/themes/themes.xml ๋กœ ๊ฐ€๋ณด๋ฉด ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ ์ด ๋ถ€๋ถ„ ๋•Œ๋ฌธ์ด๋‹ค. MaterialComponents ๋””์ž์ธ์„ ..

Android 2021.09.08

์•ˆ๋“œ๋กœ์ด๋“œ ์ƒํƒœ๋ฐ” (statusBar) ์—†์• ๊ธฐ

์•ˆ๋“œ๋กœ์ด๋“œ ์ƒํƒœ๋ฐ” (statusBar) ์—†์• ๊ธฐ SplashActivity๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ผญ ํ•„์š”ํ•œ ์ƒํƒœ๋ฐ” ์—†์• ๋Š” ๋ฐฉ๋ฒ•! ์–ธ์–ด๋Š” ์ฝ”ํ‹€๋ฆฐ ์ž…๋‹ˆ๋‹ค. class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) // ์ƒํƒœ๋ฐ” ์—†์• ๊ธฐ @Suppress("DEPRECATION") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.insetsController?.hide(WindowInsets.Type.statusBa..

Android 2021.07.17

์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding) ์‹œ์ž‘ํ•˜๊ธฐ

Data Binding ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์„ ์จ์•ผํ•˜๋Š” ์ด์œ  ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๋ฐฐ์šฐ๋Š” ์ดˆ๊ธฐ์—๋Š” findViewById()๋ฅผ ๋งŽ์ด ์“ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ findViewById()๋Š” runtime์‹œ ๋ทฐ์˜ ๊ณ„์ธต์„ ํƒ€๊ณ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๋น„ํšจ์œจ์ ์ธ ํ•จ์ˆ˜์ด๋‹ค. ๊ฐ„๋‹จํ•œ ์•ฑ์—์„œ๋Š” ์ƒ๊ด€์—†์ง€๋งŒ, ์•ฑ์ด ์ปค์ง€๋ฉด ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹คใ…œใ…œ Data Binding์€ ๊ฐ ๋ ˆ์ด์•„์›ƒ xml๋งˆ๋‹ค binding class๋ฅผ ๋งŒ๋“ ๋‹ค. (activity_main ⇒ ActivityMainBinding) ๊ทธ๋ž˜์„œ binding class๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋ทฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์„œ, ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค. ๋˜ํ•œ, ์š”์ฆ˜ ๋งŽ์ด ์“ฐ๋Š” MVVM ์•„ํ‚คํ…์ณ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์˜ ์žฅ์  findViewById()์˜ ๋น„ํšจ์œจ์„ฑ์„ ๊ฐœ..

Android 2021.06.05

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค Database Inspector์—์„œ DB๊ฐ€ ์•ˆ๋ณด์ผ ๋•Œ

๋ถ„๋ช… ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์กด์žฌํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , Database Inspector๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ ๋œฐ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ํ•ด๊ฒฐ๋ฒ• ์•„์ฃผ ๊ฐ„๋‹จํ•จ . . . File -> Invalidate Caches/Restart ๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค!!!!!! ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ ์•ฑ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด, DB๊ฐ€ ์ž˜ ๋ณด์ž„!๐Ÿ˜†

Android 2021.06.04