본문 바로가기
기타/Android

[Android] 안드로이드 앱 구성 파일을 파헤쳐보자 (build.gradle, AndroidManifest.xml, res 폴더)

2024. 9. 13.

안드로이드 스튜디오에서 프로젝트를 생성하면 자동적으로 모듈(앱)과 함께 여러 폴더 및 파일들이 생성된다. 각 폴더와 파일의 역할이 무엇이고 설정 가능한 항목들에는 무엇이 있는지도 알아보자.

 

앱 구성 파일

  • app (모듈)
    • 프로젝트를 만들면 자동으로 생성되는 모듈
  • 일반적으로 모듈 하나 = 앱 하나
    • 모듈 = 앱 단위
    but 원한다면 하나의 앱을 여러 모듈로 만들 수 있음
  • 프로젝트 = 여러 모듈을 묶어서 관리

 

build.gradle

프로젝트 수준, 모듈 수준 그래들 파일이 별도로 존재

  • build.gradle.kts (Project: XXX), build.gradle.kts (Module: app)
  • 대부분 앱에 대한 설정을 하므로 모듈 수준 그래들 파일에 설정함

 

1. 플러그인 설정

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
}

 

2. 컴파일 버전 설정

compileSdk = 34 // 안드로이드 SDK 34버전을 적용해서 컴파일

앱을 컴파일하거나 빌드할 때 적용할 버전

 

3. 앱 식별자 설정

applicationId "com.example.androidlab"
  • 고유한 문자열로 지정해야 함
    • 이미 같은 식별자를 가진 앱이 있으면
      • 구글 플레이 스토어에 등록 X
      • 스마트폰에 앱 설치 X

 

4. SDK 버전 설정

minSdk = 24
targetSdk = 34
  • minSdk: 이 앱을 설치할 수 있는 기기의 최소 SDK 버전 (더 아래 버전은 지원 X)
  • targetSdk: 개발할 때 적용되는 SDK 버전

 

5. 앱 버전 설정

versionCode = 1
versionName = "1.0"

 

6. 컴파일 옵션

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = "1.8"
}
  • 개발 언어 버전 설정
  • 자바 버전 선언을 생략하면 디폴트로 1.6이 적용됨

 

7. 라이브러리 설정

dependencies {
    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    implementation(libs.androidx.activity)
    implementation(libs.androidx.constraintlayout)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
}

안드로이드 SDK 외의 모든 오픈소스 라이브러리나 androidx 라이브러리 등을 dependencies에 선언해야 함

 

 

AndroidManifest.xml

  • 안드로이드 앱의 메인 환경 파일
    • 안드로이드 시스템은 매니페스트 파일에 설정한 대로 사용자의 폰에서 앱을 실행함

 

1. 네임스페이스 선언

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidlab">

<manifest>: 매니페스트 파일의 root 태그

  • xmlns: XML의 네임스페이스 선언
  • http://schemas.android.com/apk/res/android: 안드로이드 표준 네임스페이스
  • package: 매니페스트 파일에 선언한 컴포넌트 클래스의 기본 패키지명
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.AndroidLab">
    ...
</application>

<application>: 앱 전체를 대상으로 하는 설정을 담는 태그

  • icon: 앱 아이콘 설정
  • label: 앱 이름 설정
  • theme: 앱에 적용해야 하는 테마

 

2. 액티비티 선언

  • 안드로이드 시스템이 컴포넌트를 인식하도록 매니페스트 파일에 컴포넌트를 등록해야 함
<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
  • 컴포넌트 하나 당 태그 하나로 등록
  • 각 컴포넌트를 <activity>, <service>, <receiver>, <provider> 태그로 등록
  • name: 액티비티 필수 속성. 클래스 이름을 등록하면 됨
    • “.”은 해당 클래스가 <manifest> 태그에 등록한 패키지 경로에 있다는 의미
  • <intent-filter> 하위 내용
    • 앱 아이콘을 클릭했을 때 실행되어야 하는 액티비티로 지정함
    • 이 태그를 생략하면, 앱 아이콘이 없는(사용자가 직접 실행할 수 없는) 앱이 됨

 

리소스 폴더 (res)

앱의 리소스를 등록하는 목적으로 사용

 

구조

  • drawable: 이미지 리소스
  • layout: UI 구성에 필요한 XML 리소스
  • mipmap: 앱 아이콘 이미지
  • values: 문자열 등의 값으로 이용되는 리소스

특징

  • res 폴더 아래에 리소스를 만들면 자동으로 R.java 파일에 상수 변수로 리소스가 등록됨
    • 해당 상수변수로 코드에서 리소스 이용
  • 리소스 폴더의 하위 폴더 정의 불가
  • 리소스 파일명에 대문자 불가
    • 카멜 케이스를 사용할 수 없으므로 스네이크 케이스 이용

 


위 포스팅은 아래 교재를 통해 학습한 내용을 기반으로 작성되었습니다.

 

    <Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린> 보러가기 ↓  

 

Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린 - 기타 자격증 | 쿠팡

쿠팡에서 4.0 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 1 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90

댓글