3. exported 속성과 기능

YeongJun Son·2023년 9월 28일
0

Android를 배우다

목록 보기
3/7

exported 속성과 기능

들어가며

학습목표

  1. AndroidManifest.xml 파일 내, exported 속성의 기능을 살펴본다.
  2. 해당 값이 true 혹은 false일 경우를 비교한다.
  3. intent 혹은 intent-filter와 exported 속성이 맺는 관계를 살펴본다.

상황

  • 새로운 화면을 구현하기 위해 액티비티를 추가할 때, 빌드 시 AndroidManifest.xml 내 오류가 떴다.

  • 오류를 해결하기 위해 추가한 xml코드는 아래와 같다.

<activity
            android:name=".LoginActivity"
            android:exported="true">

exported 속성이란 무엇인가?

exported 속성의 역할

  • exported 속성은 AndroidManifest.xml 파일에서 액티비티를 정의할 때 사용된다.

  • 특히, 해당 액티비티가 다른 어플리케이션의 구성요소에서 접근할 수 있는지 여부를 결정한다.

exported 속성과 값

  • exported="false"
    • intent-filter가 없는 경우, exported 속성의 기본값은 false다.

    • 해당 액티비티는 다른 앱에서 직접적으로 접근할 수 없고, 아래 항목에서만 접근할 수 있다.

      1. 같은 애플리케이션의 구성요소
      2. 사용자 ID가 같은 애플리케이션
      3. 권한이 있는 시스템 구성요소
  • exported="true"

    • intent-filter가 있는 경우에 사용한다.

    • 다른 앱에서 직접적으로 접근할 수 있으며, 명시적 인텐트에서 해당 액티비티의 클래스 이름을 사용하여 호출할 수 있다.

intent와 exported 속성

명시적 인텐트를 통한 호출

val intent = Intent()
intent.component = ComponentName("com.example.otherapp", "com.example.otherapp.LoginActivity")
startActivity(intent)
  • 다른 앱에서 명시적 인텐트를 이용하여 LoginActivity를 호출할 수 있다.

위험성

  • 다른 앱의 개발자가 구성요소 이름을 알아낸다면, 다른 앱이 해당 앱의 구성요소를 실행시킬 수 있다.

  • 따라서 보안 메커니즘, 권한 관리, 외부 앱에서의 액세스에 유의해야 한다.

  • 안드로이드 개발자 문서에서는 외부 앱으로부터 접근을 막기 위해, 다음과 같은 방식을 제시한다.

    자신의 앱만 구성 요소를 시작하는 것이 중요할 경우 매니페스트에 인텐트 필터를 선언하지 마세요. 그 대신 해당 구성 요소에 대해 exported 특성을 "false"로 설정하세요.

profile
제가 좋아하는 것은 도가 아니라 기입니다

0개의 댓글