(생초 )안드로이드 스튜디오에서 AppCompatActivity같은 클래스나 setContentView() 같은 함수들의 소스코드는 어디서 볼 수 있나요?

조회수 402회

ctrl+q 로 설명들은 볼 수있는데 소스가 어디에 있고 어디에 있는 파일에서 임포트 되는지 궁금합니다.

그리고,

제가 만약 activity_main.xml에서 "button1" 이라는 버튼을 만들면

button1.setOnClickListener 를 코딩할 수 있게됩니다.

그런데 여기서 보면 "button1" 이 어떤 클래스의 인스턴스가 된것 같은데, 이 과정의 소스코드가 어디에 있는지가 궁금합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 빌드는 gradle 에 의해 관리되기에 실제 참조하는 소스는 gradle 에 의해 생성된 캐시파일입니다.

    클래스 및 메소드를 ctrl+[클릭] 하면 정의로 이동 하실 수 있습니다.

    이동 후 상단 창에 표시되는 것을 보시면 jar 파일의 내부 java 파일이 표시되고 있다는 것을 알 수 있습니다.

    AppCompatActivity.java를 따라가서 실제로 확인해 본 결과 아래의 파일을 가리키고 있었습니다.

    C:\Users\emfpr\.gradle\caches\modules-2\files-2.1\androidx.appcompat\appcompat\1.1.0\9865019bbd2d95e41dede3d8ebf964aa93f97766\appcompat-1.1.0-sources.jar

    위 파일은 헤더 용도로 사용될 뿐이며 실제 메소드는 컴파일된 내부 코어 라이브러리에 의해 제공됩니다.


    activity_main.xml에서 "button1" 라는 id를 가진 버튼을 만드는 경우 명세만 가지고 있는 상태이기 때문에 런타임 시점에 xml을 파싱해서 인스턴스를 생성하기 전까진 생성이 되지 않습니다.

    생성 과정은 컴파일된 내부 코어 라이브러리를 참조하기 때문에 확인하실 수 없습니다.

    그렇기 때문에 안드로이드는 미리 정의된 클래스가 아닌 미리 등록해둔 id를 기준으로 오브젝트를 가져와서 타입에 맞게 변환하여 사용하는 방식으로 구현하도록 되어 있습니다.

    Button button1 = (Button) findViewById(R.id.button1) ;
    button1.setOnClickListener(...);
    

    더 자세한 내용은 findViewById 및 리소스 측면으로 검색해서 확인하시기 바랍니다.

    감사합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)