본문 바로가기
Android

[ Android ] 안드로이드 프로젝트 구조

by YBin's 2025. 2. 27.

모바일 프로그래밍을 공부하면서 정리한 안드로이드 프로젝트 구조에 대해 작성해보겠습니다.

---

📂 프로젝트 구조

1. Manifests 폴더

`AndroidManifest.xml` 파일이 위치하며, 앱의 필수 정보를 정의합니다.

📌 주요 내용
- 애플리케이션 이름 및 버전 저장
- 앱에서 선언한 구성 요소, 기능, 요구사항 관리
- 외부 라이브러리 정의
- 등록정보 관리(권한, 페이지, 서비스 등)
- 새로운 액티비티 추가 시 반드시 manifest에 등록해야 함

 

📜 AndroidManifest.xml 예제

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="My Application"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/Theme.MyApplication">
        
        <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>
    </application>
</manifest>


📝 주요 속성 설명
- `android:icon="@mipmap/ic_launcher"` → 앱 아이콘 지정
- `android:label="My Application"` → 앱 이름 설정
- `tools:targetApi="31"` → 타겟 SDK 버전 설정
- `<intent-filter>` → 액티비티의 동작을 정의 (앱의 진입점 설정)

---


2. Java 폴더

앱의 기능 구현을 위한 소스 코드 파일이 위치하는 공간입니다.

📌 주요 내용
- 기능 구현을 담당하는 소스 코드 포함
- `androidTest`를 활용하여 단위 테스트 가능
- 액티비티, 서비스 등 애플리케이션의 로직을 처리하는 코드가 포함됨

📜 MainActivity.java 예제

package cohttp://m.pratice.ex.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}


📝 주요 개념

클래스 / 메소드 설명
AppCompatActivity 기본 액티비티 클래스로 UI를 제어
onCreate Activity를 최초 생성할 때 불려지는 라이프사이클 함수로써 리소스초기화 등의 작업을 수행한다.
setContentView XML 레이아웃을 액티비티와 연결


3. Res 폴더

앱에서 사용하는 리소스 파일을 저장하는 폴더입니다. 읽기 전용이며, 실행 시 필요한 데이터를 포함합니다.

 

📌 주요 폴더

- `drawable` → 이미지 리소스 저장
- `layout` → UI 레이아웃 XML 파일 저장
- `mipmap` → 앱 아이콘 저장
- `values` → 문자열, 색상, 스타일 등 저장
- `themes` → 스타일 및 테마 정보 저장 (다크 모드 지원 가능)


📜 Layout 예제 (activity\_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, World!" />
</LinearLayout>

 


📝 주요 개념

속성 설명
layout_width/height 크기 설정 (`match_parent`, `wrap_content` 등)
  • match_parent : 부모 객체 기준으로 최대한 차지
  • match_constraint( (0dp)) : 가능한 영역 최대롵
  • wrap_content : 필요한 만큼만 차지
text 표시할 텍스트 설정 
orientation 레이아웃 방향 (`horizontal`, `vertical`)



📌 res의 정보를 java에서 가져감 → java가 읽을 수 있는 R.java로 변환

    • R.java : res의 정보를 가져와 인덱싱한 파일.절 대 수정 해서는 안된다.



---

4. Gradle Scripts


빌드 스크립트를 관리하는 공간입니다. 프로젝트의 의존성 및 설정 정보를 정의합니다.

 

📌 주요 역할


- 프로젝트 빌드 및 실행 관리
- 외부 라이브러리 추가 (`dependencies` 설정)
-SDK 버전 및 빌드 도구 설정

---

📌 추가 개념

 

 ✅ 액티비티 vs 서비스 vs 브로드캐스트 리시버

구성 요소 설명
Activity UI를 담당하는 화면 단위
Service 백그라운드 작업 수행 ( UI 없음 )
Broadcast Receiver 특정 이벤트 수신 및 처리

 

✅ ConstraintLayout vs LinearLayout

레이아웃 특징
ConstraintLayout 제약 조건을 활용한 유연한 UI 배치 ( GUI로 조작 용이함 )
LinearLayout 수직/수평 방향으로 UI 배치 (. 코드가 간결해짐 )


✅ AndroidX란?


기존의 `com.android.support.*` 라이브러리를 통합 및 개선한 버전으로, 최신 안드로이드 API를 지원하는 라이브러리입니다.

---

✨ 정리


- 안드로이드 프로젝트 구조는 Manifests, Java, Res 폴더로 구성됨
- AndroidManifest.xml에서 앱의 핵심 정보를 관리
- Java 폴더에는 기능 구현을 위한 소스 코드가 위치
- Res 폴더에는 UI 레이아웃, 이미지, 문자열 등의 리소스가 저장됨
- Gradle Scripts를 통해 프로젝트의 빌드 및 실행 환경을 관리