에르노트
Anko를 대체할 안드로이드 확장 라이브러리 Splitties 본문
코틀린 안드로이드 확장 라이브러리로 유명했던 Anko가 2019년 12월부로 Deprecated 되었다.
Anko가 처음 등장할 때에 반해 이제 다른 좋은 대안들이 생겼으며, 더불어 안드로이드 자체의 최적화도 많이 진행되었다고 한다. 따라서 더 이상 Anko를 지속해서 개발할 이유가 없기에 이와 같은 결정이 내려진 것 같다. 그럼에도 불구하고 Anko는 글을 쓰는 현 시점에서 굉장히 훌륭한 라이브러리이며 기존의 프로젝트를 갈아엎을 이유는 전혀 없다고 본다. 다만 유지보수와 신규 버전 대응을 고려하면 이제 앞으로 새롭게 개발할 프로젝트에서 Deprecated된 라이브러리를 채용하기는 영 찝찝한 감이 있다. 다행히 Anko는 떠나는 와중에 그 대안들을 명확하게 제시했고, 그 중 하나가 Splitties이다.
Splitties 자체가 원래 있는 영단어는 아니다. split(쪼개다)에서 파생된 일종의 고유명사로 보면 될 것 같은데, '쪼개져있는 라이브러리' 정도로 보면 얼추 들어맞지 싶다. 최대한 가볍고 간단한 접근을 위해서 딱 필요한 기능만 뽑아서 쓸 수 있도록 쪼개놓은 것이다.
아래는 ReadMe에 적혀있는 작명의 이유이다.
This project is named "Splitties" because it is split in small modules, distributed as independent libraries, so you can add only the ones you need to your project/module, helping reduce the size of the final binary that users devices will need to download and keep in the limited storage (BTW, everything is limited).
코를린이 멀티플랫폼을 지원하듯 Splitties 역시 Multiplatform(아직까지는 JVM과 JS만을 지원)을 지원할 목적으로 만들어졌다. 하지만 아직까지 코를린 자체에 대한 확장은 비트 플래그와 컬렉션에 관한 내용이 전부이다. 반면 안드로이드에서는 상당히 많은 확장 기능들을 지원하는데 다음과 같다.
- Activities: Start activities with minimal boilerplate.
- Alert Dialog: Create simple alert dialogs with simple code.
- Alert Dialog AppCompat: AppCompat version of Alert Dialog.
- Alert Dialog AppCompat Coroutines:
showAndAwait
extension functions for AppCompat AlertDialog. - App Context: Always have your application
Context
at hand withappCtx
. - Arch Lifecycle: Extensions to get
ViewModel
s, useLiveData
and observeLifecycle
s. - Arch Room: Room helpers to instantiate your DB and perform transactions in Kotlin.
- Bundle:
BundleSpec
to useBundle
with property syntax forIntent
extras and more. - Checked Lazy:
mainThreadLazy
that checks property access on main thread, andcheckedLazy
to make your own variant. - Dimensions: Android
dp
extensions forView
andContext
. Particularly handy when using Views DSL. - Exceptions:
unexpectedValue(…)
,unsupportedAction(…)
and similar functions that returnNothing
. - Fragments: Start activities from fragments and do transactions with minimal boilerplate.
- Fragment Args: Fragment arguments without ceremony thanks to delegated properties.
- Init Provider: Base class for
ContentProvider
s used for automatic initialization purposes. - Intents: Transform
companion object
s into powerful typesafe intent specs, and createPendingIntent
s the clean and easy way. - Lifecycle Coroutines: Coroutines integration with AndroidX
Lifecycle
. - Main Handler: Top-level
mainHandler
property to stop allocating multipleHandler
s for mainLooper
. - Main Thread: Properties and precondition checkers related to Android main thread.
- Material Colors: 2014 Material Design color palettes as color resources.
- Material Lists: List item Views implementing Material Design guidelines (perfect for usage in a
RecyclerView
). - Permissions: Request runtime permissions without polluting your codebase.
- Preferences: Property syntax for Android's SharedPreferences.
- Resources: Extensions to get resources like strings, colors or drawables easily, with support for themed attributes.
- Selectable Views: Selectable Views with
foreground
property before API 23. - Selectable Views AppCompat: Selectable Views for AppCompatTextView.
- Selectable Views ConstraintLayout: Selectable Views for ConstraintLayout.
- Snackbar: Grab a snack without ceremony with
snack(…)
andlongSnack(…)
. - Stetho init: Have Stetho for your debug builds, without writing any code!
- System Services: No more
context.getSystemService(NAME_OF_SERVICE) as NameOfManager
. - Toast: Show a toast by just calling
toast(yourText)
, and dodge API 25BadTokenException
. - Typesafe RecyclerView: Typesafe
ViewHolder
andItemViewHolder
for easy basic usage ofRecyclerView
. - Views: Extensions function and properties on
View
s. - Views AppCompat: AppCompat extension of Views. Includes helpers
for
ImageView
tinting,ActionBar
and tooltip. - Views CardView: CardView extension of Views. Provides a
contentPadding
property. - Views Coroutines: Android Views + Kotlin coroutines.
- Views Coroutines Material: Material Components + Kotlin coroutines.
- Views DSL: Create UIs with readable Kotlin code.
- Views DSL AppCompat: AppCompat extension of Views DSL.
- Views DSL ConstraintLayout: ConstraintLayout extension of Views DSL.
- Views DSL CoordinatorLayout: CoordinatorLayout extension of Views DSL.
- Views DSL IDE preview: Preview Views DSL UIs in the IDE.
- Views DSL Material: Material Components extension of Views DSL.
- Views DSL RecyclerView: RecyclerView extension of Views DSL.
- Views Material: Material Components extension of Views.
- Views RecyclerView: RecyclerView extension of Views.
기존에 Anko와 상당 부분이 겹친다. 바꿔 말하면 대체제로서 아주 훌륭하다! Anko랑 뭐가 다른지는 여기에 잘 설명되어 있다.
우선 가장 만만한(?) Toast 구현 확장을 활용해보았다.
implementation 'com.louiscad.splitties:splitties-toast:2.1.1'먼저 앱 단위 build.gradle에 의존성을 추가해준다.
toast("Very very simple!!")
그리고 나서 한줄, 그것도 toast 함수 하나면 끝이다!
Toast.makeText(this, "Very very simple!!", Toast.LENGTH_SHORT).show()
기존 코드도 한줄로 표현되기는 하지만.. 액티비티가 아닌 곳에서 사용하려면 Context를 어찌저찌 잘 넘겨주어야하고, 또 Toast.LENGTH_SHORT를 매번 붙여줘야하고, 굳이 show()까지 호출해줘야하는 귀찮은 과정이 매번 반복되어야했다. 한눈에 봐도 훨씬 더 간단하게 사용할 수 있다는 것이 느껴진다.
'Dev > Android' 카테고리의 다른 글
안드로이드 카메라 프리뷰 예제(Camera2 API, 코틀린) (6) | 2020.02.07 |
---|---|
Room 라이브러리 어노테이션 에러 해결 (0) | 2020.01.28 |
안드로이드 8.0 Oreo에서만 발생하는 비정상 종료 해결법(Autofill Framework) (0) | 2019.10.01 |
Unable to start activity ComponentInfo{}: java.lang.RuntimeException: A TaskDescription's primary color should be opaque 오류 해결 (0) | 2019.08.26 |