업데이트 3.
KOTLIN은 이제 Android 개발을 위해 공식적으로 지원 됩니다. Google 제공. YAAAAAAAAS!
업데이트 2 : JetBrains가 장기적으로 Android 용 Kotlin을 지원하는 데 정말 전념하고있는 것 같습니다 . 나는 행복한 kotlin 사용자입니다 :).
업데이트 : JetBrains의 Hadi Hariri 는이 주제에 대한 몇 가지 정보를 공개 할 것이라고 언급했습니다 . 일단 업데이트되면이 게시물을 업데이트하겠습니다.
=== 사용 중단 된 항목 다음 ===
Google은 몇 가지 흥미로운 기능이 포함 된 곧 출시 될 Android N에 대한 미리보기를 출시했습니다. 가장 주목할만한 것은 부분적인 Java 8 언어 지원 입니다. 이것은 Google이 작업중인 새로운 Jack 도구 모음 으로 인해 가능합니다 .
javac 또는 kotlinc를 사용하는 현재 툴체인 :
javac ( .java
-> .class
)-> dx ( .class
-> .dex
)
kotlinc ( .kt
-> .class
)-> dx ( .class
-> .dex
)
새로운 Jack 툴체인 :
Jack ( .java
-> .jack
-> .dex
)
저는 Google이 Jack 을 Android 개발을위한 기본 도구 모음 으로 만들기 위해 앞으로 나아갈 것이라고 가정 합니다. 업데이트 : Jack 은 이제 더 이상 사용되지 않습니다 . Yas.
제 질문은이 새로운 툴체인이 앞으로 Android 개발을위한 kotlin 사용자 로서 저에게 어떤 영향을 미칠 까요? “과거에 갇혀”가 될까요?
답변
면책 조항 : 나는 Jack에서 일합니다
이것은 당신에게 영향을 미치지 않습니다. Kotlin의 컴파일러는 Jack / Jill이 잘 가져올 수있는 Java 6 바이트 코드를 생성합니다.
답변
@Pavel Dudka
Jack-컴파일러입니다. javac와 비슷하지만 약간 다른 일을합니다.
보시다시피 Jack은 Java 소스 코드를 Dex 파일로 직접 컴파일합니다! 더 이상 중간 * .class 파일이 없으므로 dx 도구가 필요하지 않습니다!
하지만 기다려! 내 프로젝트에 타사 라이브러리 (.class 파일 모음으로 제공됨)를 포함하면 어떻게됩니까?
그리고 그때 Jill이 등장합니다.
Jill은 클래스 파일을 처리하고 Jack 컴파일러의 입력으로 사용할 수있는 특수 Jayce 형식으로 변환 할 수 있습니다.
자 이제 잠시 물러서서 생각해 보겠습니다. 우리가 그토록 중독 된 멋진 플러그인은 어떻게 될까요? 그들은 모두 .class 파일이 필요하며 Jack 컴파일러에는 더 이상 파일이 없습니다.
다행히 Jack은 즉시 사용할 수있는 중요한 기능 중 일부를 제공합니다.
- Retrolambda-필요하지 않습니다. Jack은 람다를 제대로 처리 할 수 있습니다.
- Proguard-이제 Jack에 구워 졌으므로 난독 화 및 최소화를 계속 사용할 수 있습니다.
장점 :
Jack은 Java 프로그래밍 언어 1.7을 지원하고 아래에 설명 된 추가 기능을 통합합니다.
-
Predexing
JACK 라이브러리 파일을 생성 할 때 라이브러리의 .dex가 생성되어 .jack 라이브러리 파일 내에 pre-dex로 저장됩니다. 컴파일 할 때 JACK은 각 라이브러리의 pre-dex를 재사용합니다. 모든 라이브러리는 pre-dexed입니다.
-
증분 컴파일
증분 컴파일은 마지막 컴파일 이후에 수정 된 구성 요소와 해당 종속성 만 다시 컴파일됨을 의미합니다. 변경 사항이 제한된 구성 요소 집합으로 만 제한되는 경우 증분 컴파일이 전체 컴파일보다 훨씬 빠를 수 있습니다.
-
재 포장
JACK은 jarjar 구성 파일을 사용하여 재 패키징을 수행합니다.
-
Multidex 지원
dex 파일은 65K 메서드로 제한되므로 메서드가 65K 이상인 앱은 여러 dex 파일로 분할해야합니다. (multidex에 대한 자세한 내용은 ’65K 이상의 메서드로 앱 빌드’를 참조하세요.)
단점 :
- Jack은 Transform API를 지원하지 않습니다. 수정할 수있는 중간 Java 바이트 코드가 없으므로 여기서 언급하지 않은 일부 플러그인은 작동을 멈 춥니 다.
- 주석 처리는 현재 Jack에서 지원하지 않으므로 Dagger, AutoValue 등과 같은 라이브러리에 크게 의존하는 경우 Jack으로 전환하기 전에 두 번 생각해야합니다. 편집 : Jake Wharton이 지적했듯이 Jack in N Preview는 주석 처리를 지원하지만 아직 Gradle을 통해 노출되지 않았습니다.
- 자바 바이트 코드 수준에서 작동하는 Lint 감지기는 지원되지 않습니다.
- Jacoco는 지원되지 않습니다. 개인적으로 Jacoco는 의심 스럽습니다 (보고 싶은 것을 실제로 보여주지 않습니다), 그래서 그것 없이는 완전히 살 수 있습니다
- Dexguard-Proguard의 엔터프라이즈 버전은 현재 지원되지 않습니다.
답변
Google은 Jack을 기본 도구로 사용하지 않고 Jack and Jill
.
Jill과 함께 .class 파일을 dex로 컴파일하는 것은 여기에 있습니다. 그렇지 않으면 jar / aar 라이브러리에 작별 인사를 할 수 있습니다.
Jack 또는 Jill이 더 느릴 지 여부는 여전히 논쟁의 여지가 있습니다. Android 팀은 jack이 현재 빌드 프로세스보다 빠르기를 희망하지만 지금은 그렇지 않습니다.
또한 Jack과 Dex는 공개적으로 사용할 수 있으며 kotlin 팀이 kotlin 소스 코드에서 .jack 또는 .dex 파일을 내보내는 도구를 작성하는 것을 방해하는 것은 없습니다.
답변
업데이트 (2017 년 3 월 16 일)
다행히 Jack은 죽었으므로 Kotlin 개발자에게 영향을 미치지 않습니다.
Jack이 미래라면 Kotlin과 함께 과거에 갇히게 될 것입니다. 현재 Jack은 비 Java 소스를 Dalvik 바이트 코드로 컴파일 할 수있는 플러그인을 지원하지 않습니다. 그리고 JetBrains가 그랬더라도 사소한 작업이 아닌 Kotlin 컴파일러에 새 백엔드를 추가해야합니다. 따라서 Jill과 함께 Kotlin을 사용해야하며 지금 사용하는 도구 모음과 매우 유사한 것이 될 것입니다.
아래 이미지에서 볼 수 있듯이 Jack을 명시 적으로 끌 수없는 경우에도 Jill을 사용하기 위해 프로젝트를 라이브러리 프로젝트로 변환 할 수 있습니다. 그리고 응용 프로그램 프로젝트는이 라이브러리 프로젝트를 참조합니다.
Kotlin이 Jack과 함께 작동하는 방법을 확인하는 유일한 방법은 Kotlin 컴파일러에 Java 백엔드, 즉 Xtend 와 같은 Java 코드를 생성하는 백엔드를 추가하는 것 입니다. 이 경우 Kotlin 컴파일러에서 생성 된 코드는 Jack에서 다른 자바 코드처럼 처리 할 수 있습니다.
그러나 현재로서는 Jack이 출시 될 때 지원할 내용을 정확히 알지 못합니다. 어쩌면 무언가가 극적으로 바뀌고 Jack에 Kotlin 지원을 추가하는 것이 가능해질 것입니다.
답변
오늘 게시 된 블로그 게시물 ( Kotlin의 Android 로드맵 ) 에서 말한대로 :
현재 Jack이 Kotlin에서 생성 한 바이트 코드를 올바르게 처리하지 못하는 몇 가지 문제 ( 196084 및 203531 )가 있지만 Google 팀과 협력하여 문제를 해결하거나 Google 측에서 해결 방법을 제공 할 계획입니다. 이 작업이 완료되면 매번 모든 클래스 파일을 번역하는 것과는 반대로 증분 컴파일 중에 Jill 을 사용하여 변경된 클래스 파일 만 번역 할 수 있습니다 (이전 Android 도구에서 가능한 유일한 동작).
따라서 Kotlin은 결국 Jack & Jill을 지원하고 혜택을받을 것입니다.
답변
최신 Google 발표에 따라-
Java 8 언어 기능에 대한 지원을 현재 javac 및 dx 도구 세트에 직접 추가하고 Jack 도구 체인을 더 이상 사용하지 않기로 결정했습니다. 이 새로운 방향으로 Java 클래스 파일 형식에 의존하는 기존 도구 및 플러그인이 계속 작동해야합니다. 앞으로 Java 8 언어 기능은 Android 빌드 시스템에서 기본적으로 지원됩니다. 앞으로 몇 주 안에 Android Studio의 일부로 출시 할 예정이며,이 결정을 일찍 알려 드리고자합니다.
처음에는 Jack 툴체인을 통해 Java 8 지원 추가를 테스트했습니다. 시간이 지남에 따라 주석 프로세서, 바이트 코드 분석기 및 리 라이터가 영향을받는 것을 고려했을 때 Jack으로 전환하는 비용이 커뮤니티에 비해 너무 높다는 것을 깨달았습니다. Jack 도구 모음을 사용해보고 훌륭한 피드백을 주셔서 감사합니다. 새 지원이 릴리스 될 때까지 계속 Jack을 사용하여 Java 8 코드를 빌드 할 수 있습니다. Jack에서 마이그레이션하려면 작업이 거의 필요하지 않습니다.
따라서 잭 툴체인이 안드로이드 개발을위한 기본 툴체인이되는 것에 대해 걱정할 필요가 없습니다. kotlin을 계속 사용하거나 일반 javac / dx 도구 세트를 사용할 수 있습니다.
답변
공식 Kotlin 블로그에서 이미이 블로그 게시물을 찾았습니다. : Kotlin의 Android 로드맵
거기에서 다음과 같은 부분을 찾을 수 있습니다.
Android 빌드 성능을 개선하기 위해 다음으로 할 일은 Android의 새로운 Jack 및 Jill 도구 모음과 의 통합을 제공하는 것 입니다. 현재 Jack이 Kotlin에서 생성 한 바이트 코드를 올바르게 처리하지 못하는 몇 가지 문제 ( 196084 및 203531 )가 있지만 Google 팀과 협력하여 문제를 해결하거나 Google 측에서 해결 방법을 제공 할 계획입니다. 이 작업이 완료되면 매번 모든 클래스 파일을 번역하는 것과는 반대로 증분 컴파일 중에 Jill을 사용하여 변경된 클래스 파일 만 번역 할 수 있습니다 (이전 Android 도구에서 가능한 유일한 동작).
따라서 @LukasBergstrom이 말했듯이 “과거에 갇혀있는”문제는 없습니다 😉
Reddit
이 주제와 관련된 토론 도 확인할 수 있습니다 . Jack 및 Jill과 함께 Kotlin의 상태는 어떻습니까?
즐거운 코딩입니다.