๋ชฉ๋กDEVELOPE (113)
๐ฑ dreaming DiNO

๋ฌธ์ ๋ฐ์ Google Play ์คํ ์ด๋ฅผ ํตํด ์ด๋ฏธ ๋ฐฐํฌ๋์ด ์ค์น๋ ๊ธฐ์กด ์ฑ์ ์์ โ ์ฌ๋ฐฐํฌ ์์ฒญ์ด ๋ค์ด์ด PJT ์ฝ๋ ์์ โ Signed APK (release version) ์์ฑ $ adb install [apk ํ์ผ ์ด๋ฆ] ๋ช ๋ น์ด ์คํ ์, 'ํจํค์ง ์๋ช ์ด ์ด์ ๋ฒ์ ๊ณผ ๋ง์ง ์์ ์ค์นํ ์ ์์' Error adb: failed to install /Users/.../Desktop/app-release.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package [ํจํค์ง๋ช ] signatures do not match previously installed version; ignoring!] ์์ธ ๋ฐฐํฌ๋ APK๋ ๊ตฌ๊ธ์ ๋ณ๋ ์๋ช ์ด ๋ค์ด๊ฐ ํ์ผ๋ก ๋ณด์ธ๋ค..
์ค๋ฅ ๋ฐ์ > Task :face:bundleReleaseLocalLintAar FAILED Execution failed for task ':face:bundleReleaseLocalLintAar'. > Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR. Previous versions of the Android Gradle Plugin pr..

์๋๋ก์ด๋ ์คํ๋์ค์์ release ๋ก ๋น๋ํ ๋์ ์๋์ ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง the apk for your currently selected variant is not signed. please specify a signing configuration. โ โ * app ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ํด๋ฆญํ์ฌ์ ๋ณด์ฌ์ง๋ ํ์ ๋ฉ๋ด์์ "Open Module Settings" ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ค. โ * Build Variants ๋ฅผ ํด๋ฆญํ ํ, Build Types ํญ์ ํด๋ฆญํ๊ณ release ๋ฅผ ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ , Signing Config ์ ์ ์ ํ ํญ๋ชฉ์ ์ ํํ๋ค. ๋ง์ฝ Signining Config ์ ์๋ฌด ๊ฒ๋ ์ ํํ ์ ์๋ค๋ฉด Modules ๋ฅผ ํด๋ฆญํ ํ, Signing Configs ํญ์ ํด๋ฆญํ์ฌ..
๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค.
https://stackoverflow.com/questions/60910978/how-to-return-value-from-async-coroutine-scope-such-as-viewmodelscope-to-your-ui How to return value from async coroutine scope such as ViewModelScope to your UI? I'm trying to retrieve a single entry from the Database and successfully getting the value back in my View Model with the help of viewModelScope, but I want this value to be returned back to..

git ํ๊ทธ(Tag) git์์ ํ๊ทธ๋ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ฌด์ธ๊ฐ ํ์๋ฅผ ํด๋๊ธฐ ์ํ ํ๊น ๊ธฐ๋ฅ์ ์ํ ๊ฒ์ผ๋ก, ํน์ ์ปค๋ฐ์ ํ๊ทธํด ๋๋ ๊ฒ์ด๋ค. ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ผ๊ณ ์๊ฐํด๋ ์ข๋ค. ์ด๋ ๊ฒ ํ๊ทธ๋ฅผ ๋ถ์ฌ๋์ผ๋ฉด, ์ปค๋ฐ๋ฒํธ๋ฅผ ์ ๋ ๋์ ์ ํ๊ทธ๋ช ์ ์ ์ด์ ๊ฐ๊ฒฐํ๊ฒ ์์ฉํ ์ ๋ ์๋ค. ($ git reset d07c24e ๋์ $ git reset v1.0.0 ์ผ๋ก) ๋์ค์ ์์ ์ ํ๋ค๋ณด๋ฉด ์๋ฐฑ๊ฐ์ ์ปค๋ฐ๋ค์ด ์์ผํ ๋ฐ, ๊ทธ ์ปค๋ฐ๋ค ์ค์ ์ค์ํ๊ฒ๋ง ํ๊ทธ๋ฅผ ์ง์ ํด์ ๊ฐ๋ ์ฑ์๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์ปค๋ฐ๊ณผ ํ๊ทธ์ ์ฐจ์ด์ ์ด๋ผ๊ณ ํ๋ค๋ฉด ์ปค๋ฐ์ ๊ฒฝ์ฐ checkout ํ์ฌ ๋ด์ฉ์ ์์ ํ ์ ์์ผ๋, ํ๊ทธ๋ ์์ ์ด ๋ถ๊ฐ๋ฅ ํ๋ฉฐ, ๋ฐ๋ผ์ ์ฝ๊ธฐ์ ์ฉ ์ปค๋ฐ๊ฐ์ ๊ฐ๋ ์ด๋ค. ๋ณดํต ํ๊ทธ๋ ์ํํธ์จ์ด์ ๋ฒ์ ์ ๋ฆด๋ฆฌ์ฆ ํ ๋ ์ฌ์ฉ..

์ฝ๋ฃจํด ์ฝ๋ฃจํด(Coroutines) ์ ์ฐ๋ ๋(Thread)์ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ๋น์ทํ์ง๋ง, ํ๋์ ์ฐ๋ ๋ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ฃจํด์ด ์คํ๋๋ ๊ฐ๋ ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ถ์ฅ๋๋ ๋์ ์คํ ์ค๊ณ ํจํด์ ๋๋ค. ์ฝ๋ฃจํด์ ๋จ์ผ ์ฐ๋ ๋ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ฃจํด์ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ง์ ์์ ๋์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ฅ์ ์ด ์์ต๋๋ค. ์ด์ ๋, ๊ธฐ์กด ์ฐ๋ ๋๋ Context-Switching(CPU๊ฐ ์ฐ๋ ๋๋ฅผ ์ ์ ํ๋ฉด์ ์คํ, ์ข ๋ฃ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ)์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์์ ์ฐ๋ ๋๋ฅผ ๊ฐ๊ธฐ๊ฐ ์ด๋ ต์ง๋ง ๋ฐ๋ฉด์ ์ฝ๋ฃจํด์ ์ฐ๋ ๋๊ฐ ์๋ ๋ฃจํด์ ์ผ์ ์ค๋จ(suspend) ํ๋ ๋ฐฉ์์ด๋ผ Context-Switching์ ๋น์ฉ์ด ๋ค์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ, ์ง์ ๋ ์์ ๋ฒ์ ๋ด์์ ์คํ์ด ๋..
์๋๋ก์๋์์ ์ด๋ฏธ์ง๋ทฐ์ ์ด๋ฏธ์ง๋ฅผ Setting ํ ๋, ์ฃผ๋ก ๋ค์์ ํจ์๋ค์ ์ฌ์ฉํ๋ค. setImageDrawable(...), setImageResource(...), setImageBitmap(...) ๊ทธ๋ผ ์๋์ ์ฝ๋์ฒ๋ผ ์ด๋ฏธ์ง๋ทฐ์ ๊ณ์ํด์ ์๋ก์ด ์ด๋ฏธ์ง๊ฐ ํ ๋น๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? while(true){ Bitmap newBitmap = BitmapFactory.decodeStream(...); imageView.setImageBitmap(newBitmap ); } ์ ์ฝ๋์์ imageView๋ ๊ณ์ํด์ ์๋ก์ด newBitmap์ ํ ๋นํ๊ณ ๊ธฐ์กด์ bitmap์ leak์ ๋ฐ์์ํฌ ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ์๋ outofmemory exception์ด ๋ฐ์ํ ๊ฒ์ด๋ค. ์์ ์ฝ๋๋ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด leak์..
ํฐ๋ฏธ๋ ์คํ zip ํ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํ๋ ํด๋๋ก ์ด๋ (๋๋ ๋ช ๋ น์ด์ ํฌํจํด๋ ๋จ) ๋ช ๋ น์ด ์ ๋ ฅ zip -r -s MaximumSize ArchiveName.zip FolderName/ ์ฌ์ฉ์ : zip -r -s 1g my.zip test/ 2g -> 1Gigabyte size๋จ์๋ก ์๋ผ์ zip ์์ฑ my.zip -> ์์ถํ๊ณ ๋์ ์์ฑ๋๋ ํ์ผ ์ด๋ฆ test/ -> ์์ถํ๋ ค๋ ํด๋๋ช ๋๋ ํฐ ๋์์ ํ์ผ์ด๋ฆ ์ด๋ ๊ฒ ์ ๋ ฅํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ฉด ์ด์ํ ํ์ผ ๋ค์๋ค์ด ์์ฑ๋๋ฉด์ ๊ฒฐ๊ตญ์ my.z01 my.z02 my.z03 . . my.zip
1. ๋ฐ์ดํฐ ํด๋์ค ์ ์ํ์ฌ ๋ฆฌ์คํธ ์์ ๋ด์ -> ๋ฆฌ์คํธ ํ์ธ data class User(val id: Int, val value: Int) val user1 = User(1, 133) val user2 = User(2, 6456) val user3 = User(3, 554) val user4 = User(4, 234) val user5 = User(1, 854) val people = arrayListOf() people.add(user1) people.add(user2) people.add(user3) people.add(user4) people.add(user5) System.out.println(people) // [User(id=1, value=133), User(id=2, value=645..