본문 바로가기
Kotlin

Kotlin 코드 Java로 디컴파일하기

by 봄석 2019. 3. 9.


Kotlin 코드 Java로 디컴파일하기


Kotlin은 자바로 만들었습니다.

Android Studio에서 제공하는 바이트 코드 디 컴파일을 사용하여 간단하게 컴파일 할 수 있습니다.

Kotlin 디 컴파일

안드로이드 스튜디오에서 Kotlin 플러그인을 설치, 실시간으로 Kotlin Bytecode 확인이 가능합니다.

메뉴 위치는 안드로이드 스튜디오 ToolsKotlinShow Kotlin Bytecode를 눌러 주면 Kotlin Bytecode화면을 볼 수 있습니다.

kotlin-bytecode-menu

당신과 똑같은 순간 Kotlin Bytecode확인. 여기에서 자바 코드를 확인하는 바이트 코드를 확인하세요

코 틀린 - 바이트 코드

DecompileJava CPU 에서 컴파일 결과를 확인하십시오!


디 컴파일

Kotlin Bytecode는 실시간으로 컴파일 된 결과를 보여 주며,

when (item.itemId) {
    R.id.navigation_home -> {
        message.setText(R.string.title_home)
        return@OnNavigationItemSelectedListener true
    }
    // ...
}

바이트 코드입니다. 바이트 코드에 대한 표기법 문

INVOKEINTERFACE android/view/MenuItem.getItemId ()I
TABLESWITCH
  2131230822: L2
  2131230823: L3
  2131230824: L4
  2131230825: L5
  default: L3
L4
LINENUMBER 13 L4
ALOAD 0
GETFIELD com/example/taehwankwon/myapplication/MainActivity$mOnNavigationItemSelectedListener$1.this$0 : Lcom/example/taehwankwon/myapplication/MainActivity;
GETSTATIC com/example/taehwankwon/myapplication/R$id.message : I
INVOKEVIRTUAL com/example/taehwankwon/myapplication/MainActivity._$_findCachedViewById (I)Landroid/view/View;
CHECKCAST android/widget/TextView
LDC 2131623991
INVOKEVIRTUAL android/widget/TextView.setText (I)V
L6
LINENUMBER 14 L6
ICONST_1
IRETURN
L2

왜 스위치 디 컴파일을 해보면 바로 확인할 수 있습니다.

switch(item.getItemId()) {
case 2131230822:
   ((TextView)MainActivity.this._$_findCachedViewById(id.message)).setText(2131623990);
   return true;
case 2131230823:
default:
   return false;
   // ...
}


댓글