Android 빌드 구조

Android 프로젝트에는 애플리케이션 소스와 리소스를 구성할 수 있습니다. 본격적으로 이 모듈의 전반적인 구조와 각 부분에 속하는 것을 알 수 있습니다.

다음 표에는 Android 프로젝트의 일반적인 파일이 나열되어 있습니다. 각 파일에 어떤 유형의 콘텐츠가 속하는지에 대한 메모를 포함해야 합니다. 최고 관행은 시간이 지남에 따라 발전하므로 이러한 설명은 프로젝트의 내용과 일치하지 않을 수 데이터를 가져올 수 있습니다

빌드 파일을 작성할 때는 선언적 접근 방식을 사용합니다. 빌드 로직 및 작업 정의는 플러그인에만 표시되어야 합니다. 빌드 로직을 플러그인으로 제한함으로써 빌드 파일은 데이터 선언이 되며, 이는 객체를 이해하는 데 수정할 수 있습니다. 향후 버전에는 선언적 Gradle: 할 수 있습니다.

폴더/파일

사용

.gradle/

Gradle 프로젝트 캐시 디렉터리

Gradle에 의해 관리되며 다운로드한 Gradle 배포, 프로젝트 캐시, 구성 파일이 포함됩니다.

이 디렉터리의 파일을 변경하면 안 됩니다.

.idea/

Android 스튜디오 프로젝트 메타데이터

이 디렉터리의 파일을 변경하면 안 됩니다.

build.gradle(.kts)

루트 빌드 파일

하위 프로젝트에서 공통 플러그인 클래스 경로를 설정하기 위한 플러그인 선언만 포함해야 합니다.

다른 코드는 설정 또는 중첩된 프로젝트 수준 빌드 파일에 있어야 합니다.

gradle.properties

Gradle 실행 구성

힙 크기, 캐싱, 병렬 실행과 같은 Gradle 빌드 환경 측면을 제어하는 Gradle 속성을 포함합니다.

일부 임시 Android 속성이 여기에 정의되어 있으며 이는 AGP DSL이 추가되고 나중에 삭제될 때 발생하는 변경사항을 줄이기 위해 사용됩니다.

gradlew (linux, Mac)

gradlew.bat (Windows)

Gradle 래퍼 파일

Gradle 배포를 다운로드한 다음 명령어를 전달하여 빌드를 부트스트랩합니다. 이를 통해 Gradle을 사전 설치하지 않고도 빌드를 실행할 수 있습니다.

local.properties

로컬 머신 구성

Android SDK의 위치와 같이 로컬 컴퓨터와 관련된 속성을 포함합니다.

이 파일을 소스 제어에서 제외하세요.

settings.gradle(.kts)

Gradle 빌드 초기화

Gradle 초기화 및 프로젝트 구성을 위한 전역 빌드 정보 포함(예:

  • 프로젝트 이름
  • 이 빌드에 포함할 하위 프로젝트 목록
  • 플러그인 및 종속 항목을 찾기 위한 저장소 사양
  • 외부 버전 카탈로그를 가져옵니다.

Gradle/

🔍s.versions.toml

버전 카탈로그

빌드 내에서 사용되는 종속 항목과 플러그인의 변수를 정의합니다. 여기에서 사용할 버전을 지정하면 프로젝트의 모든 하위 프로젝트에서 일관성을 유지할 수 있습니다.

🔍 래퍼/

🔍 gradle‐wrapper.jar

Gradle 부트스트랩 실행 파일

지정된 Gradle 배포 (존재하지 않는 경우)를 다운로드하고 인수를 전달하여 실행합니다.

🔍 gradle‐wrapper.properties

Gradle 래퍼 구성

Gradle 배포를 다운로드할 위치 (사용할 버전 포함)를 지정합니다.

앱/

하위 프로젝트 디렉터리

하위 프로젝트 (Android 스튜디오에서 '모듈'이라고 함)는 애플리케이션 또는 라이브러리를 빌드할 수 있으며 다른 하위 프로젝트나 외부 종속 항목에 종속될 수 있습니다.

app은 최상위 애플리케이션 하위 프로젝트의 일반적인 이름입니다 (필수 이름은 아님). 다른 하위 프로젝트도 유사한 구조와 이름이 다릅니다.

모든 디렉터리는 하위 프로젝트일 수 있으며 build.gradle(.kts) 파일을 하나 이상 포함해야 하며 settings.gradle(.kts)를 사용하여 빌드에 포함되어야 합니다.

🔍 build.gradle(.kts)

하위 프로젝트 수준 빌드 파일

이 하위 프로젝트를 빌드하는 방법을 선언합니다. 각 하위 프로젝트에는 별도의 빌드 파일이 필요하며

  • 이 하위 프로젝트를 빌드하는 데 사용되는 플러그인
  • 플러그인에 필요한 구성 블록
  • 이 하위 프로젝트를 빌드할 때 포함된 종속 항목 (라이브러리 및 플랫폼)

빌드 파일에 빌드 로직 (예: Kotlin 함수 정의 또는 조건)이나 작업 선언을 포함해서는 안 됩니다. 빌드 로직과 작업은 플러그인 내에만 포함되어야 합니다.

🔍 src/

하위 프로젝트 소스 파일

소스 파일 (애플리케이션 코드 및 리소스)을 소스 세트로 그룹화합니다. main 소스 세트에는 모든 변형에 공통된 소스 파일이 포함되는 반면, 다른 소스 세트에는 변형에 고유한 소스 파일이 포함됩니다.

단계에서 기본/

기본 소스 세트

모든 빌드 변형에 공통으로 적용되는 소스 코드 및 리소스 이 소스는 모든 빌드의 기반으로 기능하며, 보다 구체적인 다른 소스 세트는 이 소스에 추가되거나 재정의됩니다.

🔍 자바/

단계에서 코틀린/

Kotlin 및 Java 소스 코드

java 디렉터리에는 혼합된 자바와 Kotlin 소스 코드가 포함될 수 있습니다. 이 하위 프로젝트에 Kotlin 코드 포함되어 있으면 이 디렉터리의 이름을 kotlin.

Android
Kotlin 우선 플랫폼으로 변경할 수 있습니다. Java 소스가 지원되지만 새 API는 Kotlin 언어를 타겟팅합니다. 모든 새로운 코드와 기존 코드의 주요 업데이트에는 Kotlin을 사용하는 것이 좋습니다.

🔍 res/

Android 리소스 파일

XML 파일 및 이미지와 같은 애플리케이션 리소스를 포함합니다. 모든 애플리케이션은 런처 아이콘과 같은 일부 기본 리소스를 사용하지만 레이아웃 및 메뉴와 같은 많은 리소스는 뷰 기반 애플리케이션에만 사용됩니다. Compose 애플리케이션은 이 디렉터리에 정의된 문자열 리소스를 사용합니다.

🔍 AndroidManifest.xml

Android 애플리케이션 메타데이터

Android 패키지 관리자가 읽고 시스템에 알립니다.

  • 애플리케이션이 정의하는 구성요소
  • 필요한 권한
  • 기기 호환성
  • Android 플랫폼 제한사항

🔍 androidTest/

기기 테스트 소스 세트

Android 지원 기기나 에뮬레이터에서 실행될 테스트의 소스를 포함합니다. 이러한 테스트는 실제 Android 환경에 액세스할 수 있지만 호스트 테스트보다 실행 속도가 느립니다.

main 소스 세트의 모든 소스 파일은 androidTest의 소스에서 사용할 수 있습니다.

🔍 테스트/

호스트 테스트 소스 세트

기기에서 실행되는 테스트가 아닌 JVM에서 로컬로 실행되는 테스트의 소스를 포함합니다. 이러한 테스트는 기기 테스트보다 훨씬 빠르게 실행됩니다. 그러나 모든 시스템 호출 (애플리케이션을 실행하는 수명 주기 포함)은 모의 처리, 위조, 스텁 처리 또는 시뮬레이션되어야 합니다.

main 소스 세트의 모든 소스 파일은 테스트 중인 소스에서 사용할 수 있습니다.

🔍 proguard-rules.pro

R8 구성 규칙

애플리케이션 축소, 최적화, 난독화를 제어하는 규칙을 정의합니다. R8은 불필요한 코드와 리소스를 제거하고, 런타임 성능을 최적화하며, 식별자 이름을 변경하여 코드를 더욱 최소화합니다.