[안드로이드 기초] 안드로이드 스튜디오 프로젝트 폴더 구조 이해

2022. 10. 24. 11:14·■ Dev. ETC/Android Studio (JAVA)
반응형

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 : [안드로이드] 안드로이드 프로젝트 폴더 구조 (링크)

300x250
반응형
저작자표시 비영리 변경금지 (새창열림)
'■ Dev. ETC/Android Studio (JAVA)' 카테고리의 다른 글
  • [안드로이드 기초] 버튼 클릭 이벤트 처리하는 onClickListner 사용방법
  • [안드로이드 기초] 리니어 레이아웃 (LinearLayout) 개념과 사용법
  • [안드로이드 기초] View 크기 지정하는 wrap_content, match_parent 차이와 사용예시
  • [안드로이드 기초] 뷰 (View)와 뷰 그룹 (View Group) 개념 알아보기
Min Hyuk-Lee
Min Hyuk-Lee
시스템 엔지니어로 근무하고 있습니다.
  • Min Hyuk-Lee
    아크레의 개발로그
    Min Hyuk-Lee
    m_file@naver.com
  • 전체
    오늘
    어제
    • 📝 Log. (81)
      • ■ Dev. Language (11)
        • C (5)
        • C# (6)
      • ■ Dev. ETC (8)
        • Unity 3D (3)
        • Android Studio (JAVA) (5)
      • ■ Web (6)
        • HTML (3)
        • JSP (3)
      • ■ Linux (8)
        • Shell (2)
        • Linux Tip. (6)
        • 보안취약점 진단 (0)
      • ■ Windows (4)
        • Server (1)
        • Windows Tip. (3)
      • ■ VM (1)
        • VMWare (1)
        • Virtual Box (0)
      • ■ Database (9)
        • MySQL (7)
        • OracleDB (2)
      • ■ DevKit (5)
        • IDE (4)
        • Tool (1)
      • ■ Error (17)
        • Linux 오류해결 (4)
        • DB 오류해결 (3)
        • IDE 오류해결 (2)
        • VM 오류해결 (3)
        • Unity 오류해결 (4)
        • SSH, SFTP 오류해결 (1)
      • ■ Photoshop (3)
        • 디자인&이미지 창작 (3)
      • ■ Document (3)
        • MS Word (2)
        • PDF (1)
      • ■ Study (4)
        • Baekjoon (4)
      • ■ 작문 (1)
        • 회고 (1)
      • ■ ETC (1)
        • Car (0)
        • etc (1)
  • 🌐 Menu

    • 📓 Guestbook
  • 🔗 Other Links

    • GitHub
    • 아크레의 IT ISSUE
  • 📢 Notice

    • [스킨 업데이트] hELLO v4.10.0 적용완료
    • [스킨 업데이트] hELLO v4.9.0 적용 완료
    • [스킨 업데이트] hELLO v4.8.1 적용 완료
  • 💬 Recent Comments

  • hELLO· Designed By정상우.v4.10.0
Min Hyuk-Lee
[안드로이드 기초] 안드로이드 스튜디오 프로젝트 폴더 구조 이해
상단으로

티스토리툴바