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 앱 기능들을 하나씩 추가해볼께.