안드로이드와 코틀린. 내가 만난 문제 — 2

SeongUg Steve Jung
2 min readFeb 6, 2018

--

생각해보니 여러가지 마주친 문제들이 많았던 것 같아 또 공유합니다.

Parcelable

Android 를 개발하다보면 종종 Parcelable 을 고민하게 될 때가 있습니다. 간편한 사용을 위해 Auto-Value 의 Parcalable Extension 을 사용하는 사람도 있지만 Auto-Value 는 Kotlin 에 사용하기에는 적합한 툴은 아닙니다. 마침 Kotiln 1.1.4 부터 자동으로 Parcelable 에 수반된 코드를 Shipping 할 수 있는 기능이 추가 되었습니다.

하지만 조용히 넘어가면 문제시되지 않겠죠. 해당 기능은 실험 기능으로 Boolean 변수를 Parcel 처리하지 못하는 이슈가 있는데 원인은 런타임시 복원하는 과정에서 캐스팅 할때 Primitive 가 아닌 Class 형으로 하다보니 문제가 되는 것이었습니다.

해결방법

Kotlin 에서 bytecode 조작을 통해서 Parcelable 을 자동으로 지원하는 라이브러리가 있습니다. (Link : Smuggler)

당시 문제가 있을 때에는 Smuggler 를 사용하여 회피하였으며 해당 문제는 Kotlin 1.2.20 에서 수정되었기 때문에 그 이후부터는 Kotlin 본연의 확장 기능을 사용하였습니다.

Build Time

Kotlin 빌드는 APT 와 함께 할때 문제가 됩니다. Kotlin 에 의해 생성된 코드는 새로운 코드로 인식되기 때문에 매순간 코드를 새롭게 재빌드해서 의미 없이 빌드시간을 증가시킵니다. 20개 이상 모듈을 빌드하다보니 Clean Build 는 10분. increnmental 빌드또한 5분이상 소요하다보니 팀에서 꾸준히 문제가 되기 되었습니다.

해결방법

최근 Jetbrain 과 구글에서는 그래들 플러그인 업데이트에 대응 하면서 캐싱 기능을 추가하였습니다.

# android gradle = 3.0.1
# build gradle = 4.5
# gradle.properties
kotlin.incremental=true
kotlin.incremental.usePreciseJavaTracking=true android.enableBuildCache=true

위와 같은 설정을 통해 첫 Clean build 시에 빌드를 캐싱하고 incremental build 시에 변경된 코드만 찾아서 재빌드하도록 해서 빌드 속도를 개선할 수 있습니다.

--

--

SeongUg Steve Jung
SeongUg Steve Jung

Written by SeongUg Steve Jung

Android Developer, Google Developers Experts

No responses yet