Kotlin 소스 파일을 Java 소스 파일로 변환하는 방법


390

Kotlin 소스 파일이 있지만 Java로 변환하고 싶습니다.

Kotlin을 Java 소스로 변환하려면 어떻게해야합니까?


10
아직 자동화 도구가 아직 구축되지 않았다고 확신합니다. 먼저 만들 수 있습니다!
Eric Cochran

7
클래스 경로에 Kotlin 표준 라이브러리가 없으면 실행되지 않는 추악하고 유지 관리 할 수없는 Java 클래스가 생길 가능성이 큽니다. 점은 무엇인가?
yole

3
j2objC 변환기를 고려하십시오. > 자바 - -> objC 당신이 코 틀린 할 수 있다면 좋을 것
패트릭

3
"디 컴파일"버튼의 목표는 사람들이 Kotlin 컴파일의 작동 방식을 이해하도록 돕는 것입니다. 생성 된 Java 코드는 실제 프로덕션 코드로 사용하기위한 것이 아니며 처음에는 항상 컴파일되지는 않습니다.
yole

2
@yole Kotlin을 모르거나 배울 시간이 있고 Java 코드가 작동하도록 이해하는 데 필요한 기능이있는 해당 언어의 샘플 코드가있는 사람은 어떻습니까?
Michael

답변:


400

@Vadzim이 말했듯이 IntelliJ 또는 Android Studio에서 kotlin에서 Java 코드를 얻으려면 다음을 수행해야합니다.

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. Decompile버튼을 클릭하십시오
  3. 자바 코드 복사

최신 정보:

Kotlin 플러그인의 최신 버전 (1.2 이상)을 사용하면 직접 할 수도 있습니다 Menu > Tools > Kotlin -> Decompile Kotlin to Java.


60
Java 출력이 추악하지 않습니까?
Pacerier

20
@Pacerier 그냥 대부분의 디 컴파일 출력처럼, 그것은 물론,
루이 CAD

5
kotlin에서 java로 변환되었습니다. 그러나 추가 코드가 표시됩니다. 내가 쓰거나들은 적이없는 코드
Nauman Ash

20
해당 옵션이 활성화되어 있지 않으면 회색으로 표시됩니다. 어떻게 활성화합니까?
Vikas Pandey

8
@VikasPandey Decompile Kotlin to Java는 현재 컴파일 된 Kotlin 클래스 에서만 사용할 수 있습니다 .
Onik

39

Kotlin을 바이트 코드로 컴파일 한 다음 Java 디스어셈블러를 사용할 수 있습니다.

디 컴파일은 IntelliJ Idea 내에서 또는 FernFlower https://github.com/fesh0r/fernflower (감사합니다 @Jire)를 사용하여 수행 할 수 있습니다

몇 달 전에 확인한 자동화 도구가 없었습니다 (AFAIK 한 개에 대한 계획도 없음)


2
부수적으로, Kotlin은 자바 컴파일러가하지 않는 것을 허용하기 때문에 생성 된 코드의 제네릭이 컴파일러 경고를 유발할 수 있습니다. 그래도 여전히 바이트 코드로 작동합니다.
Jacob Zimmerman

@voddan 나는 그가 순수 자바에서는 가능성이없는 구체화 된 제네릭을 언급하고 있다고 생각한다.
Jire

1
@Jire Reified 제네릭은 항상 인라인되어 있으므로 Java에서 일반 클래스 참조처럼 보입니다
voddan


4
IntelliJ IDEA 2016.2 : 메뉴 / 도구 / Kotlin / Show Kotlin Bytecode
Vadzim


7

Kotlin소스 파일을 소스 파일 로 변환하려면 Java(Android Studio의 경우) :

  1. 보도 Cmd- Shift- A맥, 누르거나 Ctrl- Shift- AWindows 시스템에.

  2. 찾고있는 동작을 입력하고 메뉴에서 Kotlin Bytecode선택하십시오 Show Kotlin Bytecode.

여기에 이미지 설명을 입력하십시오

  1. 패널 Decompile상단의 버튼을 누릅니다 Kotlin Bytecode.

여기에 이미지 설명을 입력하십시오

  1. 이제 인접한 탭에서 Kotlin 파일과 함께 디 컴파일 된 Java 파일을 얻습니다.

여기에 이미지 설명을 입력하십시오


1
감사합니다! 이 버그가있는 AS는 다시 일반 도구 (도구> Kotlin> ...)를 변경했습니다.
CoolMind 2016 년

5

Kotlin을 바이트 코드로 컴파일 한 다음 Java로 디 컴파일합니다. Kotlin 컴파일러로 컴파일하고 cfr로 디 컴파일 합니다.

내 프로젝트는 여기 .

이것은 이것을 컴파일 할 수있게합니다 :

package functionsiiiandiiilambdas.functions.p01tailiiirecursive

tailrec fun findFixPoint(x: Double = 1.0): Double =
        if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))

이에:

package functionsiiiandiiilambdas.functions.p01tailiiirecursive;

public final class ExampleKt {
  public static final double findFixPoint(double x) {
    while (x != Math.cos(x)) {
      x = Math.cos(x);
    }
    return x;
  }

  public static /* bridge */ /* synthetic */ double findFixPoint$default(
      double d, int n, Object object) {
    if ((n & 1) != 0) {
      d = 1.0;
    }
    return ExampleKt.findFixPoint(d);
  }
}

4

@ louis-cad가 언급했듯이 "Kotlin source-> Java의 바이트 코드-> Java source"는 지금까지 유일한 솔루션입니다.

그러나 Android 용 Jadx 디 컴파일러를 사용하는 방법을 언급하고 싶습니다 .

그것은 클로저를 위한 코드를 생성하는 것을 볼 수있게 해주 며 , 결과적으로 코드는 IntelliJ IDEA 디 컴파일러의 코드보다 "깨끗하다".

일반적으로 Kotlin 클래스의 Java 소스 코드를 볼 필요가있을 때 :

  • APK 생성 : ./gradlew assembleDebug
  • Jadx GUI를 사용하여 APK 열기 : jadx-gui ./app/build/outputs/apk/debug/app-debug.apk

이 GUI에서 기본 IDE 기능은 다음과 같습니다. 클래스 검색, 클릭하여 이동 선언. 기타

또한 모든 소스 코드를 저장 한 다음 IntelliJ IDEA와 같은 다른 도구를 사용하여 볼 수 있습니다.


좋은 것은 Homebrew를 통해 사용할 수 있습니다 :brew install jadx
milosmns

2
  1. 안드로이드 스튜디오에서 kotlin 파일 열기
  2. 도구로 이동-> kotlin-> kotlin 바이트 코드
  3. kotlin 파일 옆에있는 새 창에서 디 컴파일 단추를 클릭하십시오. 그것은 kotlin 파일과 동등한 Java를 생성합니다.

2

Java 및 Kotlin은 JVM (Java Virtual Machine)에서 실행됩니다.

Kotlin 파일을 Java 파일로 변환하려면 Kotlin 코드를 JVM 바이트 코드로 컴파일 한 다음 바이트 코드를 Java 코드로 디 컴파일하는 두 단계가 필요합니다.

Kotlin 소스 파일을 Java 소스 파일로 변환하는 단계 :

  1. Android Studio에서 Kotlin 프로젝트를 엽니 다.
  2. 그런 다음 도구-> Kotlin-> Kotlin 바이트 코드 표시로 이동하십시오.

여기에 이미지 설명을 입력하십시오

  1. Kotin 파일의 바이트 코드를 얻습니다.
  2. 이제 Decompile 버튼을 클릭하여 바이트 코드에서 Java 코드를 가져옵니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.