p.s 이 글에서 R8과 R8 컴파일러는 같은 것을 지칭하며, D8과 R8은 친구지만 서로 다른 개념입니다.코틀린 코드는 코틀린 컴파일러를 통해 바이트코드로 컴파일되며, 이 바이트 코드를 R8 컴파일러가 최적화하고 D8 컴파일러가 DEX 파일로 변환한다.이후 앱 실행시에 AOT나 JIT 컴파일을 통해 네이티브 코드로 변환되어 실행되는 원리이다.Proguard나 R8은 개발자가 설정 파일 외에는 추가적으로 설정해야하는 것들이 적어서 Proguard나 R8의 차이점이나 변경점을 모르는 경우가 많다.실 개발 단계에서도 안드로이드 개발자들은 각 라이브러리나 Kotlin 프로젝트에 필요한 Proguard 설정을 제외하고는 구체적으로 알아볼 필요성을 느끼지 못한다. 많은 라이브러리들이 정상적인 동작을 위해, 난독화..
1. Dalvik과 ART안드로이드에서 사용하는 Dalvik과 ART(Android runtime)은 바이트 코드를 네이티브 코드로 변환하는 런타임이다.Dalvik의 JIT 컴파일 방식은 앱 실행 시마다 바이트코드를 해석하기 때문에 메모리 사용량이 높고 실행 속도가 느리다는 단점이 있고, GC도 모바일 환경에 최적화되어 있지 않아 구글은 이를 개선하기 위해 ART를 도입하게 된다.ART의 AOT 컴파일 방식은 설치 시에 미리 네이티브 코드로 변환하고 디스크에 저장한 후 실행 시에 저장된 네이티브 코드를 메모리에 로드해 실행함으로써 실행 속도를 개선하고, GC 메커니즘 또한 모바일 환경에 적합하도록 개선되었다. 2. Dalvik GC의 문제점Android 5.0 이전까지 사용된 Dalvik의 GC 메커니즘..
안드로이드 프로젝트 설정을 하다 보면 gradle에서 jvmTarget, javaversion 설정을 해줘야한다. 그럴 때마다 1.8과 8버전에 대해 접하는데, 정작 이에 대해 궁금해서 자세히 알아본 적이 없는 것 같아 조사해봤다. Java 버전 네이밍 방식Java se는 1.0부터 1.8까지 1.x 방식의 버전 표기법을 사용했다고 한다. 지금으로 치면 1, 2, 3, 4, 5이나 그때는 1.1, 1.2, 1.3, 1.4, 1.5로 표기했다는 얘기이다. 그러다 Java se 9 버전에 이르러서는 1.x 방식의 네이밍 기법을 버리고 한자릿수 버전 표기법으로 선회하게 된다. 개인적인 생각으로는 1.9 다음 10버전은 2.0/10.0 이런식으로 표기해야하는데, 이런 혼란스러운 네이밍을 피하기 위함이 아닐까....