안드로이드 : diary – 프로젝트 생성

diary 웹 프로그램을 만들었는데, 이 프로그램에서 작성한 RestAPI 를 이용하는 안드로이드 앱을 만들어보려고 해.

안드로이드 스튜디오(Android Studio Iguana:2023.2.1)를 설치하고나서 [File] – [New] – [New Project] 메뉴를 선택해서 여러 종류의 템플릿 중 Empty Views Activity 를 선택하여 프로젝트를 만들어볼께.



Name : androiddiary
Package name : com.woohahaapps.androiddiary (Name 을 입력하면 Package name 의 마지막이 자동으로 완성돼)
Save location : D:_MyProject\AndroidStudioProjects\androiddiary (역시 Name 을 입력하면 디렉토리 경로도 자동으로 완성돼)
Language : Kotlin
Minimum SDK : API 16 (“Jelly Bean”; Android 4.1)
Build configuration language : Kotlin DSL (build.gradle.kts)

‘androiddiary’ already exists at the specified Save location and it is not empty.

아래쪽에 표시되고 있는 경고는 androiddiary 라는 이름의 경로가 이미 존재하기 때문에 표시된 것인데, gitlab 에 androiddiary 라는 이름의 프로젝트를 만들어서 clone 해놨기 때문이야.

프로젝트가 생성된 결과는 아래 그림과 같은데, 중요한 파일 몇 가지에 대해서 간단하게 설명할께.

MainActivity.kt

안드로이드 앱 프로젝트의 메인 액티비티 소스 파일이야.

package com.woohahaapps.androiddiary

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }
}

안드로이드 앱은 여러가지 화면으로 구성되는데, 이 화면을 액티비티(Activity) 라는 구성요소로 표현을 하지. 메인 액티비티는 여러가지 화면 중에서 프로그램이 실행되었을 때 가장 먼저 보여지는 화면을 의미해.

프로젝트를 새로 생성하면 초기 화면으로 MainActivity 라는 이름을 자동으로 만들어주고, 이 이름을 AndroidManifest.xml 파일에 등록을 해주지. 아래 코드는 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:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Androiddiary"
        tools:targetApi="31">
        <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>

activity_main.xml

화면마다 화면을 디자인하기 위한 화면 설정 파일이 필요한데, 보통 xml 파일로 구성하지. MainActivity 에 해당하는 화면 구성 파일이 activity_main.xml 이야.

MainActivity.kt 클래스 파일에서 R.layout.activity_main 을 찾을 수 있는데, 리소스 형태로 구성되어 있는 화면구성 파일을 컨텐츠 뷰로 설정한다는 의미인거지.

setContentView(R.layout.activity_main)

activity_main.xml 파일이 실제로 res/layout 경로에 존재하지? R.layout.activity_main 에서 R 이 바로 res 경로를 의미하는거야.

activity_main.xml 파일을 더블클릭해서 열어보면 화면 레이아웃을 디자인할 수 있는 화면이 보여.


오른쪽 위의 3개의 버튼이 있는데, 순서대로 코드로 보기, 코드반 디자인반, 디자인으로 보기 등 보기 모드를 선택할 수 있는 버튼이야.

build.gradle.kts

build.gradle.kts 파일은 안드로이드 앱 프로젝트를 빌드하는 도구 gradle 의 설정 파일이야. 뒤에 .kts 확장자는 코틀린 언어로 구성되었다는 의미이지.

앞으로 이 파일의 dependencies 영역에 각종 의존성 라이브러리 설정을 추가하게 될거야.

plugins {
    alias(libs.plugins.androidApplication)
    alias(libs.plugins.jetbrainsKotlinAndroid)
}

android {
    namespace = "com.woohahaapps.androiddiary"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.woohahaapps.androiddiary"
        minSdk = 16
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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)
}

지금까지 새 프로젝트를 만들고 기본적인 프로젝트 구성 파일과 그 구조를 살펴봤어.

다음 포스트에서는 diary 앱 기능들을 하나씩 추가해볼께.

Leave a Comment