๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 90

Plugin [id: 'kotlin-android'] was not found in any of the following sources ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

Plugin [id: 'kotlin-android'] was not found in any of the following sources Plugin [id: 'kotlin-kapt'] was not found in any of the following sources plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' } Room ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋ ค๊ณ  plugin์— 'kotlin-android'์™€ 'kotlin-kapt'๋ฅผ ์ถ”๊ฐ€ํ•˜๋‹ˆ๊นŒ ์ด์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.๐Ÿ˜ข ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• Project ๋ ˆ๋ฒจ์˜ Gradle ํŒŒ์ผ๋กœ ๊ฐ„๋‹ค. Gradle ํŒŒ์ผ์— ์ž๊ธฐ์˜ ํ˜„์žฌ ์ฝ”ํ‹€๋ฆฐ ๋ฒ„์ „๊ณผ, classpath๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค! buildscript ..

Android 2021.05.23

cmder ์„ค์น˜ ๋ฐ ํ•œ๊ธ€ ์„ค์ •, ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด ์ถ”๊ฐ€

1. ๋‹ค์šด๋กœ๋“œ cmder.net/ Cmder | Console Emulator Total portability Carry it with you on a USB stick or in the Cloud, so your settings, aliases and history can go anywhere you go. You will not see that ugly Windows prompt ever again. cmder.net ์—ฌ๊ธฐ ๋“ค์–ด๊ฐ€์„œ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค. ๋‚˜๋Š” mini๋ฒ„์ „์„ ๋‹ค์šด ๋ฐ›์•˜๋‹ค. mini๋ฒ„์ „๊ณผ full ๋ฒ„์ „์˜ ์ฐจ์ด๋Š” git์˜ ์œ ๋ฌด! 2. ์„ค์น˜ ์••์ถ•๋œ ํŒŒ์ผ์ด ๋‹ค์šด๋ฐ›์•„์งˆํ…๋ฐ, ๋‚˜๋Š” c๋“œ๋ผ์ด๋ธŒ์— devํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ ์••์ถ• ํ•ด์ œํ–ˆ๋‹ค. ์„ค์น˜ ๊ฒฝ๋กœ์— ํ•œ๊ธ€์ด๋‚˜ ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. 3. ํ•œ๊ธ€ ์„ค์ •..

Git 2021.04.02

๋…ธ๋งˆ๋“œ์ฝ”๋” ๋ฐ”๋‹๋ผJS ์ฑŒ๋ฆฐ์ง€ 8๊ธฐ ์กธ์—… ํ›„๊ธฐ

โš  ์ด ํ›„๊ธฐ๋Š” ๊ฒŒ์œผ๋ฅธ ์‚ฌ๋žŒ์˜ ์ฑŒ๋ฆฐ์ง€ ์กธ์—… ํ›„๊ธฐ์ž…๋‹ˆ๋‹ค. (ํ•œ์‹ฌํ•˜๊ฒŒ ๋ณด์ง€ ๋ง๊ธฐ๐Ÿ˜ฅ) โš  ๋นก์„ธ์ง€ ์•Š์„๊นŒ, ํž˜๋“ค์ง€ ์•Š์„๊นŒ ๊ฑฑ์ •ํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ ์ œ ํ›„๊ธฐ๋ฅผ ์ฝ๊ณ  ๋„์ „ํ•ด๋ณด์„ธ์š”! ๐Ÿ“š ๋ฐฐ๊ฒฝ์ง€์‹ ์ €๋Š” ์ด๋ฒˆ ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ณ , ๋ฐ”๋‹๋ผ JS ๊ฐ•์˜๋„ ์ฒ˜์Œ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. (์›๋ž˜ ์ฑŒ๋ฆฐ์ง€๋Š” ๊ฐ•์˜๋ฅผ ๋‹ค ๋“ฃ๊ณ  ๋ณต์Šต์šฉ์œผ๋กœ ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!) ๊ฑฐ๋‘์ ˆ๋ฏธํ•˜๊ณ , ์ €์ฒ˜๋Ÿผ ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ‘ํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ 2์ฃผ ๋™์•ˆ.. ๋นก์…€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ... ํ• ๋งŒํ•ฉ๋‹ˆ๋‹ค!!!!! (ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ 1๊ฐœ๋ผ๋„ ํ•  ์ค„ ์•„๋Š” ๋ถ„๋“ค, HTML, CSS์— ๋Œ€ํ•œ ์ง€์‹์ด ํฌ๋ฏธํ•˜๊ฒŒ๋ผ๋„ ์žˆ๋Š” ๋ถ„๋“ค ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ์ด๊ฑธ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ฒ˜์Œ ์ ‘ํ•œ๋‹ค๋ฉด ๋งŽ์ด ์–ด๋ ค์šธ ๊ฑฐ์˜ˆ์š”.๐Ÿ˜ญ) ๐Ÿƒ‍โ™€๏ธ ์ฑŒ๋ฆฐ์ง€ ์‹œ์ž‘ ์ฑŒ๋ฆฐ์ง€๋Š” 2์ฃผ ๋™์•ˆ ๋‹จ 1ํšŒ์˜..

Web 2021.03.25

๋ทฐ๋ฐ”์ธ๋”ฉ ์ดˆ๊ธฐ ์ž‘์—…

1. build.gradle(Module:ํ”„๋กœ์ ํŠธ์ด๋ฆ„.app)์˜ android ๋ฐ‘์— ์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ buildFeatures { viewBinding = true } 2. MainActivity.kt๋กœ ๊ฐ€์„œ ์ฝ”๋“œ ์ถ”๊ฐ€ class MainActivity : AppCompatActivity() { lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } }

Android 2021.02.26

์•ˆ๋“œ๋กœ์ด๋“œ ์ƒ๋ช…์ฃผ๊ธฐ

์ƒ๋ช…์ฃผ๊ธฐ ์„ค๋ช… ํ™œ์šฉ ์˜ˆ์‹œ onCreate() - ์•กํ‹ฐ๋น„ํ‹ฐ ์ƒ์„ฑ - ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ(XML) - ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ •์˜ - ๊ทธ ์™ธ ํ™œ๋™์— ๊ด€ํ•œ ๊ธฐ๋ณธ ์„ค์ • onStart() - ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๊ธฐ ๋ฐ”๋กœ ์ง์ „์— ํ˜ธ์ถœ - onStop()์ด ํ˜ธ์ถœ๋œ ํ›„ ๋‹ค์‹œ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์‹คํ–‰๋ ๋•Œ๋Š” onStart()๋ถ€ํ„ฐ ํ˜ธ์ถœ๋จ - onStop()ํ›„ ๋‹ค์‹œ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์™”์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•  ๋ถ€๋ถ„ - ํ•„์š”ํ•œ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌ (GPS ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ๋“ฑ) onResume() - ์‹ค์ œ ์•ก๋น„ํ‹ฐ๋น„๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ค‘ - ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ๋ฐ”๋กœ ์ „ - ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค (์นด๋ฉ”๋ผ ์ดˆ๊ธฐํ™” ๋“ฑ) onPause() - ๋‹ค๋ฅธ ํ™”๋ฉด์— ์˜ํ•ด ํ™”๋ฉด ์ผ๋ถ€๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๊ฒฝ์šฐ ํ˜ธ์ถœ - onRes..

Android 2021.02.23

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 03. ์ฝ”ํ‹€๋ฆฐ null ์ฒ˜๋ฆฌ, ์ž๋ฃŒํ˜• ๋ณ€ํ™˜

์ฝ”ํ‹€๋ฆฐ์˜ null ์ฒ˜๋ฆฌ ์ฝ”ํ‹€๋ฆฐ์˜ ๋ณ€์ˆ˜ ์„ ์–ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. null ๊ฐ€๋Šฅํ•œ ์„ ์–ธ (Nullable) val a: Int? = null val b: String? = null ๋‹จ์ˆœ ์ถœ๋ ฅ์€ ์ƒ๊ด€์—†์œผ๋‚˜ null์ธ ์ƒํƒœ์—์„œ ์—ฐ์‚ฐ๋˜๋Š” ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ๋•Œ → NPE ๋ฐœ์ƒ NPE (Null Pointer Exception) ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” null์ธ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์„ธ์ดํ”„ ์ฝœ ? fun main() { var str1: String? str1 = null println("str1: $str1, length: ${str1?.length}") // str1์ด null์ด๋ฉด length๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. } ? ์„ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด NPE๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. non-null ๋‹จ์ • ๊ธฐํ˜ธ !! f..

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 02. ์ฝ”ํ‹€๋ฆฐ ๋ณ€์ˆ˜์™€ ์ž๋ฃŒํ˜•

์ฝ”ํ‹€๋ฆฐ ๋ณ€์ˆ˜ ์„ ์–ธ ์„ ์–ธ ๋ฐฉ๋ฒ• val (value) - ๋ถˆ๋ณ€ํ˜•. ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™” ํ›„ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ X var (variable) - ๊ฐ€๋ณ€ํ˜• fun main() { var username: String = "Kildong" username = "Dooly" println("username: $username") } ๋ฌธ์ž์—ด ๋‚ด์— ๋ณ€์ˆ˜๋‚˜ ์‹์„ ${๋ณ€์ˆ˜ ํ˜น์€ ์‹}์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ด๋ฉด $username์ฒ˜๋Ÿผ ์ค‘๊ด„ํ˜ธ ์ƒ๋žต ๊ฐ€๋Šฅ. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ์ดํ„ฐํ˜•์„ ์ถ”๋ก ํ•ด ์„ ์–ธํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค. fun main() { var username = "Kildong" var count = 3 println("username: $username, count: $count") } ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ถ”๋ก ํ•œ ๋ณ€์ˆ˜๋Š” ctrl + shi..

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค styles.xml ์—†์Œ

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ฉด์„œ styles.xml๋Œ€์‹  themes.xml๋กœ ํŒŒ์ผ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €์ฒ˜๋Ÿผ ํ—ค๋งค์ง€ ๋งˆ์‹œ๊ธธ....๐Ÿ˜‚

Android 2021.02.07

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค 4.1์—์„œ ์œ„์ ฏ ์•„์ด๋”” ์ ‘๊ทผํ•˜๋Š” ๋ฒ•

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค 4.1 ๋ฒ„์ „์—์„œ๋Š” ์œ„์ ฏ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™์œผ๋กœ ์ฝ”ํ‹€๋ฆฐ ์ต์Šคํ…์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. build.gradle(Module:ํ”„๋กœ์ ํŠธ์ด๋ฆ„.app) ํŒŒ์ผ ํด๋ฆญ. plugins { id 'com.android.application' id 'kotlin-android' // ์•„๋ž˜ ์ฝ”ํ‹€๋ฆฐ ์ต์Šคํ…์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. id 'kotlin-android-extensions' } ... id 'kotlin-android-extensions'๋ฅผ plugins ๋งจ ๋ฐ‘์— ์ถ”๊ฐ€ํ•˜์ž! (+) ์ถ”๊ฐ€ id๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ๋‹ค๋ฅธ ํ™”๋ฉด์˜ ๋ฒ„ํŠผ์ด๋‚˜ ํ…์ŠคํŠธ๋ทฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š” ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”ํ‹€๋ฆฐ ์ต์Šคํ…์…˜์€ ์—†์–ด์งˆ ๊ณ„ํš์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ์œ„์ฒ˜๋Ÿผ id์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ• ๋Œ€์‹  ๋ทฐ๋ฐ”์ธ๋”ฉ์„ ์“ฐ์‹ค ๊ฒƒ์„ ์ถ”์ฒœ!!!!! hyunjung..

Android 2021.02.07