매니페스트 파일과 앱 리소스

kosdjs·2025년 6월 1일
0

Android

목록 보기
3/24

매니페스트 파일

  • 안드로이드 시스템이 앱의 구성요소를 실행하기 위해 구성요소가 존재 여부를 알 수 있는 파일

  • 앱 프로젝트 루트 디렉토리에 AndroidManifest.xml파일로 존재

  • 구성요소 선언외에도 사용자 권한, 최소 API 레벨, 필요 하드웨어 또는 소프트웨어 기능(예: 카메라, 블루투스 등), 앱이 연결되어야 하는 안드로이드 프레임워크가 아닌 API 라이브러리(예: Google Maps 라이브러리) 등에 관한 내용이 있음

구성요소 선언

다음과 같이 매니페스트 파일에서 액티비티를 선언할 수 있음

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:icon="@drawable/app_icon.png" ... >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" ... >
        </activity>
        ...
    </application>
</manifest>
  • <application> 요소에서 android:icon 속성은 앱을 식별하는 아이콘 리소스

  • <activity> 요소에서 android:name 속성은 Activity 서브클래스의 전체 클래스 이름을 지정, android:label 속성은 사용자에게 표시되는 액티비티의 라벨 문자열을 지정

  • 메니페스트 파일에서 구성요소를 나타내는 법
    • 액티비티: <activity>
    • 서비스: <service>
    • 브로드캐스트 리시버: <receiver>
    • 컨텐츠 제공자: <provider>
  • 소스 코드에 포함되어 있지만, 매니페스트에 선언되지 않은 액티비티, 서비스, 컨텐츠 제공자의 경우 시스템이 인식하지 못하기 때문에 실행될 수 없음. 하지만 브로드캐스트 리시버는 BroadcastReceiver 객체를 동적으로 생성 후 registerReceiver() 를 호출해 시스템에 등록 가능

구성요소 기능 선언

  • 안드로이드 시스템은 암시적 인텐트를 받으면 매니페스트 파일에 선언된 인텐트 필터를 확인해 어떤 구성요소가 인텐트에 응답할 수 있는지 식별

  • 매니페스트 파일에 액티비티를 선언할 때 인텐트 필터를 포함해 다른 앱의 인텐트에 응답할 수 있는 기능을 선언할 수 있음

새 이메일 작성 액티비티가 있다면 다음과 같이 인텐트 필터를 선언해 ACTION_SEND 인텐트에 응답하는 액티비티를 선언할 수 있음

<manifest ... >
    ...
    <application ... >
        <activity android:name="com.example.project.ComposeEmailActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <data android:type="*/*" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 요구사항 선언

  • 안드로이드로 구동되는 다양한 장치가 있으며, 모든 장치가 동일한 기능과 성능을 제공하지 않으므로 매니페스트 파일에 하드웨어 또는 소프트웨어 요구사항을 정의해 앱을 사용 가능한 장치를 구분할 수 있음

  • 대부분의 이런 선언들은 정보 제공용이며 시스템이 직접 읽지 않음

  • Google Play와 같은 외부 서비스가 읽어 사용자가 앱을 검색할 때 필터링에 사용함

  • 앱이 Android 8.0(API 레벨 26)에서 도입된 API를 사용한다면 앱 모듈에 있는 build.gradle 파일에 minSdkVersiontargetSdkVersion 값을 선언해야 함
    • 매니페스트 파일에 직접 입력하면 Gradle이 빌드 과정에서 덮어 씌우므로 주의해야 함
android {
  ...
  defaultConfig {
    ...
    minSdkVersion 26
    targetSdkVersion 29
  }
}
  • 앱이 카메라 기능을 요구할 때 선언
    • 앱이 카메라 기능을 사용하지만 필수는 아닐 경우 android:required 속성을 false로 변경할 수 있음. 이 경우 런타임에 카메라 관련 기능을 비활성화 하면 됨
<manifest ... >
    <uses-feature android:name="android.hardware.camera.any"
                  android:required="true" />
    ...
</manifest>

앱 리소스

  • 소스 코드를 제외한 이미지, 오디오 파일 또는 메뉴, 애니메이션, 메뉴, 스타일, 색상, 액티비티 UI 레이아웃 등을 정의한 XML 파일

  • 대체 리소스 세트를 제공해 코드를 수정하지 않고 다양한 장치 설정(예: 언어, 화면 크기)에 맞게 앱을 최적화할 수 있음

    UI 문자열을 XML로 정의하면 다른 언어로 번역해 별도의 파일에 저장할 수 있음
    res/values (일반 문자열)
    res/values-fr (프랑스어 문자열)
    이 경우에 대시(-)로 구분되는 fr과 같이 추가로 붙는 짧은 문자열을 한정자(Qualifier)라고 함

  • Android 프로젝트에 포함된 모든 리소스에 대해, SDK 빌드 도구는 고유한 정수 ID를 정의하여, 앱 코드나 XML로 정의된 다른 리소스에서 해당 리소스를 참조할 수 있게 함

    res/drawable/logo.png 파일이 있으면 SDK 도구는 R.drawable.logo 라는 ID를 생성하고 이 ID는 앱 고유의 정수 값에 매핑됨. 코드에서 이 ID를 사용해 이미지를 삽입할 수 있음

원문
https://developer.android.com/guide/components/fundamentals

0개의 댓글