0. 목적
Android Studio에서 신규 프로젝트를 제작하면 기본적으로 자동 생성되는 프로젝트 파일들과 폴더 트리 구조를 이해할 수 있도록 한다.
1. 파일 및 폴더 트리 구조
프로젝트가 제작되면 아래와 같은 폴더와 파일들이 자동으로 생성된다.

지금부터 해당 프로젝트 폴더 구조들의 정의와 사용 방법에 대해 알아보자.
2. manifests 폴더

영어 단어 Manifest의 의미는 '명백한' 이라는 뜻을 가지고 있다. 안드로이드 스튜디오에서의 Manifests 폴더는, 코드와 빌드 수행 시 필수적으로 지정해야 할 앱 연관 정보들이 적혀있는 파일을 보관하고 있는 폴더이다.
기본적으로 Manifest 폴더 산하에는 AndroidManifest.xml 파일이 존재하는데, 해당 파일은 코드를 살펴보면서 좀 더 자세히 살펴보도록 하자.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<!-- XML 파일임을 선언 -->
package="com.ex.acredev">
<!-- 앱 패키지 이름 -->
<application
<!-- 앱의 구성요소 선언 -->
android:allowBackup="true"
<!-- API 23 이상에서 실행되는 앱의 사용자 데이터 자동 백업 여부 -->
android:icon="@mipmap/ic_launcher"
<!-- 앱 아이콘 경로 설정 -->
<!-- app\res\mipmap\ic_launcher 폴더의 값을 불러옴. -->
android:label="@string/app_name"
<!-- 앱 이름 설정 -->
<!-- app\res\values\strings.xml 파일의 값을 불러옴. -->
android:roundIcon="@mipmap/ic_launcher_round"
<!-- 앱 원형 아이콘 경로 설정 -->
<!-- app\res\mipmap\ic_launcher_round 폴더의 값을 불러옴. -->
android:supportsRtl="true"
<!-- RTL (Right To Left) 언어 지원 여부 -->
<!-- 아랍어 등, 우측에서 좌측으로 읽는 언어가 RTL 언어임. -->
android:theme="@style/Acredev">
<!-- 앱 기본 테마 정의 -->
<!-- app\res\values\themes\themes.xml 파일의 style 값을 불러옴. -->
<activity
android:name=".MainActivity"
<!-- 앱 구동 시 제일 먼저 활동을 구현할 (실행될) 클래스의 이름 -->
<!-- app\java 폴더 산하의 MainActivity 자바 클래스 파일을 불러옴. -->
android:exported="true">
<!-- intent=filter 가 있다면 true <-->
<!-- 아니라면 빌드 오류남. -->
<!-- 다른 앱의 구성요소에서 정확한 클래스 이름으로 활동 엑세스 가능. -->
<intent-filter>
<!-- 다른 앱 구성 요소로부터 작업이 요청되었을 때 응답할 수 있는 intent의 유형 지정. -->
<!-- 활동, 서비스, broadcast 리시버 등이 응답할 수 있음. -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3. java 폴더

java 폴더에는 안드로이드 앱 패키지 이름과 동일한 3개의 Java Package 가 존재하고, 그 내부에 각각 하나씩의 Java Class파일이 존재한다. MainActivity.java, ExampleInstrumentedTest.java, ExampleUnitTest.java 클래스 파일이 바로 그것이다.
3-1. MainActivity.java
안드로이드 앱은 화면 UI를 사용자에게 표시하기 위해서 최소 하나 이상의Activity동작이 정의되어 있는Java Class파일을 가져야 한다.MainActivity.java파일은, 액티비티의 동작에 관련된 내용이 정의되어 있는Java Class파일이다.
앱 실행 시 제일 먼저 실행되는 코드로, 여기서 지정한 레이아웃대로 화면에 표시한다.
3-2. ExampleInstrumentedTest.java
테스트 코드를 작성하는 Java Class 파일이다.
3-3. ExampleUnitTest.java
유닛 테스트 코드를 작성하는 Java Class 파일이다.
4. res 폴더

안드로이드 앱에서 사용하는 모든 resource 파일들이 종류별로 세분화되어 저장되어 있는 폴더이다.
4-1. res\drawable 폴더
앱에서 사용하는 이미지 파일이 저장되어 있다.
안드로이드 앱은 해상도에 따라 이미지가 다르게 적용되므로, 최소한 범용적인 해상도에는 맞게 이미지를 추가해 주는 것이 좋다.
파일명 속성 ic_launcher_background.xml 전경 이미지 ic_launcher_forerground.xml 배경 이미지
앱 아이콘은 이 폴더가 아닌res\mipmap폴더에 저장하니 참고하자.
4-2. res\layout 폴더
앱이 사용자에게 표시할 화면의 레이아웃 구성을 정의하는 파일이 저장되어 있다.
파일명 속성 activity_main.xml 기본으로 생성되는 Layout은 ConstraintLayout. layout폴더 산하에 새xml파일을 생성하고,MainActivity.java파일의set.ContentView속성값을 변경하면 메인layout을 변경할 수도 있다.
4-3 res\mipmap 폴더
앱의 아이콘을 지정하는 파일이 저장되어 있다.
해당 폴더에 앱 아이콘 이미지를 저장하면, 안드로이드를 구동하는 휴대폰 시스템의 화면 해상도에 제일 최적화된 이미지를 앱 아이콘으로 표시해 준다. 안드로이드
폴더명 속성 ic_launcher 일반적인 사각형 아이콘 ic_launcher_round 원형 아이콘 API 11부터 지원되는 기능이다.
4-4 res\values 폴더
앱에서 사용하는 변수 정보들을 설정하는 파일이 저장되어 있다.
파일명 속성 color.xml 색상 변수값 string.xml 문자열 변수값
4-5. res\values\theme 폴더
앱 테마를 설정하는 파일이 저장되어 있다.
파일명 속성 themes.xml 라이트 모드 테마 설정 themes.xml (night) 다크 모드 테마 설정
<참고>
Android Developers : 자동 백업으로 사용자 데이터 백업 (링크)
Android Developers : 앱 Manifest 파일 문법 (링크)
Android Developers : 인텐트 및 인텐트 필터 (링크)
Tae Gyu : [안드로이드] 안드로이드 프로젝트 폴더 구조 (링크)