diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 45be68e..df20406 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,17 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true">
+ android:supportsRtl="true"
+ android:theme="@style/Theme.Twix">
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/yapp/twix/TwixApplication.kt b/app/src/main/java/com/yapp/twix/TwixApplication.kt
index 97c3dc8..2941b86 100644
--- a/app/src/main/java/com/yapp/twix/TwixApplication.kt
+++ b/app/src/main/java/com/yapp/twix/TwixApplication.kt
@@ -1,16 +1,14 @@
package com.yapp.twix
import android.app.Application
-import org.koin.android.ext.koin.androidContext
-import org.koin.core.context.startKoin
+import com.yapp.twix.di.initKoin
class TwixApplication : Application() {
override fun onCreate() {
super.onCreate()
- startKoin {
- androidContext(this@TwixApplication)
- modules()
- }
+ initKoin(
+ context = this
+ )
}
}
diff --git a/app/src/main/java/com/yapp/twix/di/FeatureModules.kt b/app/src/main/java/com/yapp/twix/di/FeatureModules.kt
new file mode 100644
index 0000000..2e00192
--- /dev/null
+++ b/app/src/main/java/com/yapp/twix/di/FeatureModules.kt
@@ -0,0 +1,8 @@
+package com.yapp.twix.di
+
+import com.twix.login.di.loginModule
+import org.koin.core.module.Module
+
+val featureModules: List = listOf(
+ loginModule
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/yapp/twix/di/InitKoin.kt b/app/src/main/java/com/yapp/twix/di/InitKoin.kt
new file mode 100644
index 0000000..b5b60a1
--- /dev/null
+++ b/app/src/main/java/com/yapp/twix/di/InitKoin.kt
@@ -0,0 +1,22 @@
+package com.yapp.twix.di
+
+import android.content.Context
+import org.koin.android.ext.koin.androidContext
+import org.koin.core.context.startKoin
+import org.koin.core.module.Module
+
+fun initKoin(
+ context: Context? = null,
+ extraModules: List = emptyList()
+) {
+ startKoin {
+ context?.let { androidContext(it) }
+
+ modules(
+ buildList {
+ addAll(extraModules)
+ addAll(featureModules)
+ }
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yapp/twix/main/MainActivity.kt b/app/src/main/java/com/yapp/twix/main/MainActivity.kt
new file mode 100644
index 0000000..5a809ad
--- /dev/null
+++ b/app/src/main/java/com/yapp/twix/main/MainActivity.kt
@@ -0,0 +1,27 @@
+package com.yapp.twix.main
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.safeContentPadding
+import androidx.compose.ui.Modifier
+import com.twix.navigation.AppNavHost
+
+class MainActivity: ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContent {
+ // TODO: 디자인 시스템이 결정되면 테마 구현 및 적용
+ Box(
+ modifier = Modifier
+ .safeContentPadding()
+ .fillMaxSize()
+ ) {
+ AppNavHost()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt
index b130889..11f61cb 100644
--- a/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt
+++ b/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt
@@ -6,14 +6,21 @@ import com.twix.convention.extension.configureAndroid
import com.twix.convention.extension.implementation
import com.twix.convention.extension.library
import com.twix.convention.extension.libs
+import com.twix.convention.extension.version
+import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
class AndroidApplicationConventionPlugin : BuildLogicConventionPlugin({
applyPlugins("com.android.application", "org.jetbrains.kotlin.android")
+ apply()
extensions.configure {
configureAndroid(this)
+
+ defaultConfig {
+ targetSdk = libs.version("targetSdk").requiredVersion.toInt()
+ }
}
dependencies {
diff --git a/feature/login/src/main/AndroidManifest.xml b/feature/login/src/main/AndroidManifest.xml
deleted file mode 100644
index 9d89216..0000000
--- a/feature/login/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/feature/login/src/main/java/com/twix/login/LoginActivity.kt b/feature/login/src/main/java/com/twix/login/LoginActivity.kt
deleted file mode 100644
index 18a386f..0000000
--- a/feature/login/src/main/java/com/twix/login/LoginActivity.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.twix.login
-
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-
-class LoginActivity : ComponentActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- }
-}
diff --git a/feature/login/src/main/java/com/twix/login/LoginScreen.kt b/feature/login/src/main/java/com/twix/login/LoginScreen.kt
new file mode 100644
index 0000000..17c1341
--- /dev/null
+++ b/feature/login/src/main/java/com/twix/login/LoginScreen.kt
@@ -0,0 +1,23 @@
+package com.twix.login
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+
+@Composable
+fun LoginScreen() {
+ LoginContent()
+}
+
+@Composable
+private fun LoginContent() {
+ Box(
+ modifier = Modifier.fillMaxSize(),
+ contentAlignment = Alignment.Center
+ ) {
+ Text("임시 화면입니다.")
+ }
+}
\ No newline at end of file
diff --git a/feature/login/src/main/java/com/twix/login/di/LoginModule.kt b/feature/login/src/main/java/com/twix/login/di/LoginModule.kt
new file mode 100644
index 0000000..dd48cf0
--- /dev/null
+++ b/feature/login/src/main/java/com/twix/login/di/LoginModule.kt
@@ -0,0 +1,11 @@
+package com.twix.login.di
+
+import com.twix.login.navigation.LoginNavGraph
+import com.twix.navigation.NavRoutes
+import com.twix.navigation.base.NavGraphContributor
+import org.koin.core.qualifier.named
+import org.koin.dsl.module
+
+val loginModule = module {
+ single(named(NavRoutes.LoginGraph.route)) { LoginNavGraph }
+}
\ No newline at end of file
diff --git a/feature/login/src/main/java/com/twix/login/navigation/LoginNavGraph.kt b/feature/login/src/main/java/com/twix/login/navigation/LoginNavGraph.kt
new file mode 100644
index 0000000..70f363e
--- /dev/null
+++ b/feature/login/src/main/java/com/twix/login/navigation/LoginNavGraph.kt
@@ -0,0 +1,27 @@
+package com.twix.login.navigation
+
+import androidx.navigation.NavGraphBuilder
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.composable
+import androidx.navigation.navigation
+import com.twix.login.LoginScreen
+import com.twix.navigation.NavRoutes
+import com.twix.navigation.base.NavGraphContributor
+
+object LoginNavGraph: NavGraphContributor {
+ override val graphRoute: NavRoutes
+ get() = NavRoutes.LoginGraph
+ override val startDestination: String
+ get() = NavRoutes.Login.route
+
+ override fun NavGraphBuilder.registerGraph(navController: NavHostController) {
+ navigation(
+ route = graphRoute.route,
+ startDestination = startDestination
+ ) {
+ composable(NavRoutes.Login.route) {
+ LoginScreen()
+ }
+ }
+ }
+}
\ No newline at end of file