Android 80

Publish android library with Github Packages

android library를 만들고 배포할려면 maven repository가 필요한데, 이게 준비가 되어 있지 않다면 aar파일을 직접 전달해야 하는 번거러움이 있습니다. 그런데 github packages에 apache maven을 지원해주기에 간단하게 aar library를 배포하여 사용할 수 있습니다. github packages에 대한 설명은. 해당 링크로.. github - personal access tokne 생성 github의 자신의 계정에서 Settings-> Developr settings -> Personal access tokens 으로 가서 access token을 생성 합니다. write packages, read packages 를 체크 합니다. properties proj..

Android 2021.04.02

다양한 adapter의 결합... concatadapter...

하나의 RecylerView에서 다양한 viewholder화면을 보여줄려면, 이전에는 하나의 adapter안에서 type들을 지정하고, 해당 position에 대해서 type에 맞는 viewholder들을 가져와서 보여줬습니다. 하지만, 여러 type들이 존재하거나 할 경우는 adapter안에는 다양한 type과 viewholder내용들이 존재하게 됩니다. header,. 그리고 item들이 순차적으로 있다고 해도, adapter에 대한 position의 계산도 틀려집니다. 그래서 이번에 concatadapter를 볼려고 합니다. developer.android.com/reference/androidx/recyclerview/widget/ConcatAdapter ConcatAdapter | Android..

Android 2021.03.06

사용하지 않는 resource 정리.

프로젝트의 시간이 길어질 수록 사용하지 않는 resource가 많아지는 문제가 있습니다. 리펙토링 하면서 이전 리소스에 대해서 지울 수도 있지만, 명시적으로 지워준다면 id를 만들지 않기 때문에 더 좋을 수도 있죠. build.gradle 에서 android { buildTypes { release { shrinkResources true } } }으로 빌드시에 resource정리를 하는 방법도 있지만, 명시적으로 지우는 것을 해볼까 합니다. android studio 에서 Refactor -> Remove Unused Resources... 라는 메뉴가 있습니다. 해당 기능을 통해서 layout, string, drawable, color, dimen 등등 사용하지 않는 resource를 지울 수 있습..

Android 2021.02.17

Firebase Crashlytics에서 custom UnCaughtExceptionHandler 적용하기.

Firebase Crashlytics에서 custom UnCaughtExceptionHandler를 적용하기 위해선 초기화 하는 방법을 변경해 줘야 합니다. Fabric에서 하는 방법은 별다른 방법이 없어도 잘 동작했지만, fabric에서 firebase crashlytics로 넘어가면서 초기화 순서가 중요해 졌습니다. firebase의 초기화는 contentprovider를 통해서 초기화 됩니다. contentprovider의 속성중 순서를 정할 수 있는 부분이, android:initOrder입니다. 이에 대한 설명은 동일한 프로세스에서 호스팅하는 다른 콘텐츠 제공자에 상대적으로 콘텐츠 제공자를 인스턴스화해야 하는 순서입니다. 콘텐츠 제공자 사이에 종속성이 있는 경우 제공자별로 이 속성을 설정하면 종..

Android 2020.12.31

Kotlin collection 에서 item들의 sum 계산.

val items = listOf(1, 2, 3, 4, 5) // actual sum of 15 이와 같은 collection에서 전체 합을 구해보기. 1. foreach @Test fun sumTest_1() { var total = 0 items.forEach { total += it } Assert.assertEquals(total, actual) } /** * Performs the given [action] on each element. */ @kotlin.internal.HidesMembers public inline fun Iterable.forEach(action: (T) -> Unit): Unit { for (element in this) action(element) } 가장 무난하게 많..

Android 2020.07.11

kotlin 코드 실행시간 측정하기.

보통 코드의 실행시간을 측정하기 위해서는. val start = System.currentTimeMillis() val result = inputPlus(1, 2) val measuredTime = System.currentTimeMillis() - start println("result => $result || measured time ==>$measuredTime") 이런식으로 실행시간을 측정하고 싶은 메소드의 시작과, 끝! 그에 대한 시간을 넣고 구할것 같습니다. java로 Android 개발했을 대에는 Jake Wharton의 Hugo를 사용해서 실행시간을 logcat에 출력해서 사용하고 했지만, https://github.com/JakeWharton/hugo JakeWharton/hugo Ann..

Android 2020.05.17

kotlin Collection vs Sequense

Collection과 Sequence는 둘다 lambda의 확장함수( map, filter, find... )를 사용하여 원하는 결과를 찾아나갈 수 있습니다. 그런데 Collection의 확장함수를 사용하면, inline function을 통해서 매번 결과가 새롭게 만들어 집니다. public inline fun Iterable.map(transform: (T) -> R): List { return mapTo(ArrayList(collectionSizeOrDefault(10)), transform) } 하지만 Sequence는 inline function이 아닌 chain call 을 통해서 결과를 이어 나갈 수 있습니다. public fun Sequence.map(transform: (T) -> R):..

Android 2020.05.15

goodbye? onActivityResult...

android개발하다 보면 onActivityResult로 결과를 받아오는 경우가 많습니다. A activity에서 B activity로 startActivityForResult 로 호출 후, B activity에서의 결과를 onActivityResult로 받게 되죠. 그런데, implementation 'androidx.activity:activity-ktx:1.2.0-alpha04' implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha04' 에서 다른 기능이 생겼습니다. 호출과 동시에 lambda function으로 다로 onActivityResult로 결과를 받지 않아도 됩니다. 일반적인 방법으로는 Intent(this@MainActivity, S..

Android 2020.05.14

kotlin file read...

kotlin으로 파일을 읽는 방법은 java로 할 하는 경우보다는 간단?? 한듯 합니다. 최종적으로 android하면서 사용한 방법은 fun fileRead(context: Context, fileUri: Uri): String { val sb = StringBuilder() val inputStream = context.contentResolver.openInputStream(fileUri) inputStream?.let { val reader = BufferedReader(InputStreamReader(inputStream)) val readLines = reader.readLines() readLines.forEach { sb.append(it) } it.close() } return sb.toS..

Android 2019.04.17