์ด๋ฅด์ ์ด ํ์ฌ ์์น ์ฃผ๋ณ์ ๋ณ์ยท์ฝ๊ตญยทํธ์์ ยท๊ฒฝ์ฐฐ์ ๋ฑ ์ฃผ์ ์ฅ์๋ฅผ ์ฝ๊ฒ ์ฐพ๊ณ , ์ ๊ธํ๋ฉด/ํ ์๋ด ํ๋ฉด์์ ํฐ ๊ธ์จ์ ์์ฑ์ผ๋ก ์ด๋ ์๋ด๋ฅผ ๋ฐ์ ์ ์๋๋ก ๋ง๋ Android ์ฑ์ ๋๋ค.
์ต๊ทผ ๊ตฌํ ๊ธฐ์ค์ผ๋ก ์ฑ์ ๋จ์ ์ฅ์ ์ถ์ฒ์ ๋์ด ์ค์ ๋๋ณด/๋์ค๊ตํต ๊ฒฝ๋ก ์๋ด, ์ฆ๊ฒจ์ฐพ๊ธฐ์ ํ ํํธ ๊ณ ์ ํตํฉ, ์๋ก๊ณ ์นจ ๊ฐ์ ์ฌ์กฐํ, ํด๋ํฐ ์ฌ๋ถํ ํ ํ ์๋ด ์๋ฆผ ์ง์ ๊น์ง ์ง์ํฉ๋๋ค.
| ์์ญ | ๊ธฐ์ |
|---|---|
| ์ธ์ด | Kotlin |
| UI | Android View System, XML, ViewBinding |
| ์ง๋ | Google Maps SDK for Android |
| ์ฅ์ | Google Places API (New) |
| ๊ฒฝ๋ก | Google Routes API |
| ๋คํธ์ํฌ | Retrofit, Moshi, OkHttp |
| ๋ก์ปฌ DB | Room, KSP |
| ์ธ์ฆ/ํ๋กํ | Firebase Authentication, Cloud Firestore |
| ์์น | FusedLocationProviderClient, Foreground Service |
| ์์ฑ ์๋ด | Android TextToSpeech |
| ๋น๋๊ธฐ | Kotlin Coroutines, Flow |
| ์ต์ SDK | 24 |
| ํ๊ฒ SDK | 34 |
- ํ์ฌ ์์น ๊ถํ ์์ฒญ ๋ฐ ์์น ๊ธฐ๋ฐ ์ง๋ ์ด๋
- Google Places API๋ก ์ฃผ๋ณ ์ฅ์ ์กฐํ
- ๋ณ์, ํธ์์ , ๊ฒฝ์ฐฐ์, ์งํ์ฒ ๋ฑ ์นดํ ๊ณ ๋ฆฌ ๋งคํ
- ์นดํ ๊ณ ๋ฆฌยท๊ฒ์ ๋ฐ๊ฒฝยท์์ ์ํ ๊ธฐ๋ฐ ํํฐ ์ ์ฉ
- ์ง๋ ๋ง์ปค ๋ฐ ํ๋จ ์ฅ์ ๋ชฉ๋ก ํ์
- ์ฅ์ ์์ธ ํ๋ฉด์์ ์ฌ์ง/๋ฆฌ๋ทฐ/๊ฑฐ๋ฆฌ/๋๋ณด ์๊ฐ ํ์
- Google Maps ๊ธธ์ฐพ๊ธฐ ๋ฅ๋งํฌ ์ง์
- Firebase ๋ก๊ทธ์ธ/ํ์๊ฐ์
- ์จ๋ณด๋ฉ์์ ์ด๋ฆ, ์ฐ๋ น๋, ์ ํธ ์ฅ์ ์ ์ฅ
- Firestore ํ๋กํ + ๋ก์ปฌ ์บ์ ๊ธฐ๋ฐ ์ถ์ฒ
- ๋ฐฉ๋ฌธ ๋น๋, ์ ํธ ์นดํ ๊ณ ๋ฆฌ, ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ์ถ์ฒ ์ ์ ๊ณ์ฐ
- Room์ ์ต๊ทผ ๋ฐฉ๋ฌธ ์ฅ์ ์ ์ฅ
- 5๋ถ ์ด๋ด ๋์ผ ์ฅ์ ์ค๋ณต ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๋ฐฉ์ง
- Android ์ ์ฑ ์ ๊ณ ๋ คํด MyPage ๋ฒํผ/๋ถํ ์๋ฆผ ํด๋ฆญ์ผ๋ก ์๋ด ํ๋ฉด ์ง์
- ํ์ฌ ์๊ฐ/๋ ์ง ํ์
- ์ต๊ทผ ๋ฐฉ๋ฌธ ์ฅ์ + ์ฃผ๋ณ ์ถ์ฒ ์ฅ์ ํ์
- ๊ฑฐ๋ฆฌ์/์ถ์ฒ์/๋ฐฉ๋ฌธ ํ์์ ์ ๋ ฌ
- ์ ์ฒด/๋ณ์/ํธ์์ /๊ฒฝ์ฐฐ์ ํํฐ
- ๋ฐฉํฅ ํ์ดํ + ๋จ์ ๊ฑฐ๋ฆฌ ํ์
- TTS ๊ธฐ๋ฐ ๋ฐฉํฅ ์๋ด
- ์ฅ์ ์์ธ ์ง์
- ํํธ ๋ฒํผ์ผ๋ก ์ฆ๊ฒจ์ฐพ๊ธฐ/๊ณ ์ ์ํ ๋ณ๊ฒฝ
์ฆ๊ฒจ์ฐพ๊ธฐ์ HomeActivity ํํธ ๊ณ ์ ์ ๊ฐ์ ์ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- PlaceDetailActivity์์ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ โ HomeActivity ํํธ ํ์
- HomeActivity์์ ํํธ ์ ํ โ MyPage ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก์ ํ์
- MyPage ์ต๊ทผ ์ฅ์์์ ํํธ ์ ํ โ HomeActivity์ ์ฆ๊ฒจ์ฐพ๊ธฐ์ ๋์ ๋ฐ์
- ๋ํ ๊ณ ์ ์ฅ์๋ ์ฃผ๊ธฐ์ TTS ์๋ด์ ์ฌ์ฉ
ํต์ฌ ์ ์ฅ์: AppPreferences.favoritePlaceIds, AppPreferences.pinnedPlaceId
Routes API ์๋ต์ ๊ธฐ๋ฐ์ผ๋ก ๋๋ณด-only, ๋ฒ์ค, ์งํ์ฒ ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
- ๋ชฉ์ ์ง๊น์ง ๋๋ณด ์๋ด
- ๋ฐฉํฅ ํ์ดํ์ ๋จ์ ๊ฑฐ๋ฆฌ ์ ์ง
- ๋ชฉ์ ์ง๊น์ง์ ์๋ด ๋ฌธ๊ตฌ๋ฅผ TTS๋ก ์ฌ์
- ์ ๋ฅ์ฅ๊น์ง ๋๋ณด ์๋ด
- ์ ๋ฅ์ฅ ๊ทผ์ฒ์์ ๋ค์ ํ๋ ์๋ด ํ์
- ๋ฒ์ค ๋ฒํธ, ๋ฐฉ๋ฉด, ์ด๋ ์ ๋ฅ์ฅ ์, ํ์ฐจ ์ ๋ฅ์ฅ ์๋ด
[ํ์นํ์ด์],[๋ด๋ ธ์ด์],[๋ค์ ๋ฃ๊ธฐ]๋ฒํผ ์ ๊ณต- ํ์ฐจ ํ ๋ชฉ์ ์ง๊น์ง ๋๋ณด ์๋ด ์ ํ
- ์ญ/์ถ๊ตฌ๊น์ง ๋๋ณด ์๋ด
- ์ญ ๊ทผ์ฒ์์ ๋ ธ์ , ๋ฐฉ๋ฉด, ์ด๋ ์ญ ์, ํ์ฐจ์ญ ์๋ด
- Routes ์๋ด ๋ฌธ๊ตฌ์ ์ถ๊ตฌ ๋ฒํธ๊ฐ ์์ผ๋ฉด ์ง์ /ํ์ฐจ ์ถ๊ตฌ ์๋ด ๋ฐ์
- ์ถ๊ตฌ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์ญ ๊ธฐ์ค์ผ๋ก ์์ ํ๊ฒ fallback
- ํ์น ์ ์๋ ๋ฐฉํฅ ํ์ดํ ์ ์ง
- ํ์น ์ค์๋ ๋๋ณด ํ์ดํ๋ฅผ ์จ๊ฒจ ์คํด ๋ฐฉ์ง
- ํ์ฐจ ํ ๋ชฉ์ ์ง๊น์ง ๋๋ณด ์๋ด ์ ํ
๊ด๋ จ ์ฝ๋:
RoutesRepository.ktโ Routes API ํธ์ถ ๋ฐGuide์์ฑHomeActivity.ktโ ์๋ด ์ํ ์ ํ, ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ํ์น ์๋ด ํ์RecentPlaceAdapter.ktโ ์นด๋ ๋ด ์๋ด ์ค๋ช /๋ฒํผ ๋ฐ์ธ๋ฉRecentPlace.ktโ ์นด๋ UI ๋ชจ๋ธ
์๋ก๊ณ ์นจ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋จ์ UI ๊ฐฑ์ ์ด ์๋๋ผ ์ค์ ๋ก ๊ฐ์ ์ฌ์กฐํํฉ๋๋ค.
๋์ ์์:
- ํ์ฌ ์์น ํ์ธ ์ค ํ์
- ๊ธฐ์กด ๊ฒฝ๋ก ์์ /๊ฐ์ด๋/๊ฒ์ฆ ์บ์ ์ด๊ธฐํ
- ์ฃผ๋ณ ์ฅ์ ๋ค์ ์กฐํ
- ์ถ์ฒ ๋ชฉ๋ก ๋ค์ ์ ๋ ฌ
- Routes API ๊ฒฝ๋ก ๋ค์ ๊ณ์ฐ
- ์๋ฃ/์คํจ ์ํ ๋ฌธ๊ตฌ์ Toast ํ์
์์น ํ๋ ์คํจ ์ ๋ง์ง๋ง ์ ์ฅ ์์น๊ฐ ์์ผ๋ฉด ํด๋น ์์น ๊ธฐ์ค์ผ๋ก ์ฌ๊ณ์ฐํฉ๋๋ค.
ํด๋ํฐ์ด ์ฌ๋ถํ
๋๋ฉด BOOT_COMPLETED๋ฅผ ๋ฐ์ ์๋ฆผ์ ํ์ํฉ๋๋ค.
- ์๋ฆผ ์ ๋ชฉ: ์์น ์๋ด๋ฅผ ์์ํ ๊น์?
- ์๋ฆผ ํด๋ฆญ ์
HomeActivity์คํ - Android 13 ์ด์์์๋ ์๋ฆผ ๊ถํ ํ์
- ์ฑ์ ํ ๋ฒ ์ด์ ์คํํ ๋ค๋ถํฐ ๋ถํ ์๋ฆผ์ด ์ ์ ๋์
๊ด๋ จ ์ฝ๋:
BootCompletedReceiver.ktAndroidManifest.xml์RECEIVE_BOOT_COMPLETED,POST_NOTIFICATIONS
- ํ ํ๋ฉด AppWidget์์ ์์น ๊ฐฑ์ ์ํ ํ์
- Foreground Service ๊ธฐ๋ฐ ์์น ์ถ์ ๊ตฌ์กฐ ํฌํจ
- ์์น ์ ๋ฐ์ดํธ ๋ธ๋ก๋์บ์คํธ๋ก HomeActivity ์๋ด ๊ฐฑ์
app/src/main/
โโโ AndroidManifest.xml
โโโ java/com/example/seniorlocationapp/
โ โโโ MainActivity.kt
โ โโโ AuthGuardActivity.kt
โ โโโ LoginActivity.kt
โ โโโ SignupActivity.kt
โ โโโ OnboardingActivity.kt
โ โโโ MapActivity.kt
โ โโโ HomeActivity.kt
โ โโโ MyPageActivity.kt
โ โโโ PlaceDetailActivity.kt
โ โโโ SearchResultsActivity.kt
โ โโโ FilterActivity.kt
โ โโโ SettingsActivity.kt
โ โโโ BootCompletedReceiver.kt
โ โโโ adapter/
โ โ โโโ RecentPlaceAdapter.kt
โ โ โโโ FavoritePlaceAdapter.kt
โ โ โโโ MapPlaceAdapter.kt
โ โ โโโ PlaceAdapter.kt
โ โ โโโ SearchResultAdapter.kt
โ โโโ data/
โ โ โโโ AppPreferences.kt
โ โ โโโ PlacesRepository.kt
โ โ โโโ RoutesRepository.kt
โ โ โโโ UserRepository.kt
โ โ โโโ UserProfileCache.kt
โ โ โโโ RecommendationScorer.kt
โ โ โโโ CategoryMapping.kt
โ โ โโโ CategoryDisplay.kt
โ โโโ db/
โ โ โโโ AppDatabase.kt
โ โ โโโ dao/
โ โ โ โโโ PlaceDao.kt
โ โ โ โโโ RecentPlaceDao.kt
โ โ โโโ entity/
โ โ โโโ PlaceEntity.kt
โ โ โโโ RecentPlaceEntity.kt
โ โโโ location/
โ โ โโโ LocationHelper.kt
โ โ โโโ LocationTrackingManager.kt
โ โ โโโ LocationTrackingService.kt
โ โ โโโ LocationUpdateBroadcast.kt
โ โ โโโ HeadingProvider.kt
โ โโโ model/
โ โ โโโ PlaceDto.kt
โ โ โโโ RouteDto.kt
โ โ โโโ RecentPlace.kt
โ โ โโโ SearchResult.kt
โ โ โโโ ScoredPlace.kt
โ โ โโโ UserProfile.kt
โ โโโ network/
โ โ โโโ PlacesApiClient.kt
โ โ โโโ PlacesApiService.kt
โ โ โโโ RoutesApiClient.kt
โ โ โโโ RoutesApiService.kt
โ โโโ util/
โ โ โโโ AccessibilityUiHelper.kt
โ โ โโโ DistanceFormatter.kt
โ โ โโโ KoreanPlaceName.kt
โ โ โโโ NavigationCueHelper.kt
โ โ โโโ PermissionHelper.kt
โ โ โโโ RemoteImageLoader.kt
โ โโโ viewModel/
โ โ โโโ FilterViewModel.kt
โ โโโ widget/
โ โโโ LocationAppWidgetProvider.kt
โโโ res/
โโโ layout/
โ โโโ activity_home.xml
โ โโโ activity_map.xml
โ โโโ activity_place_detail.xml
โ โโโ activity_my_page.xml
โ โโโ item_recent_place.xml
โโโ drawable/
โโโ menu/
โโโ values/
โโโ xml/
์ฑ์ ํต์ฌ ์๋ด ํ๋ฉด์ ๋๋ค.
๋ด๋น ์ญํ :
- ์ ๊ธํ๋ฉด ์ ํ์ ์ค์
- ํ์ฌ ์์น ์์ ๋ฐ ๊ฒฝ๋ก ๊ฐฑ์ ํ๋จ
- ์ฃผ๋ณ ์ฅ์/์ต๊ทผ ๋ฐฉ๋ฌธ ์ฅ์ ์ถ์ฒ ๋ชฉ๋ก ๊ตฌ์ฑ
- ์ ๋ ฌ/์นดํ ๊ณ ๋ฆฌ ํํฐ ์ฒ๋ฆฌ
- RoutesRepository์์ ๋ฐ์
Guide๋ฅผRecentPlaceUI ๋ชจ๋ธ๋ก ๋ณํ - ๋ฐฉํฅ ํ์ดํ, ๊ฑฐ๋ฆฌ, TTS ์๋ด ๋ฌธ๊ตฌ ์์ฑ
- ๋์ค๊ตํต ๋จ๊ณ ์ํ ๊ด๋ฆฌ
APPROACHING: ์ญ/์ ๋ฅ์ฅ๊น์ง ์ด๋ ์คBOARDED: ํ์น ์คALIGHTED: ํ์ฐจ ํ ๋๋ณด ์๋ด
[ํ์นํ์ด์],[๋ด๋ ธ์ด์],[๋ค์ ๋ฃ๊ธฐ]์ฒ๋ฆฌ- ์๋ก๊ณ ์นจ ๊ฐ์ ์ฌ์กฐํ ์ฒ๋ฆฌ
์ค์ ์ํ:
routeGuides: MutableMap<String, RoutesRepository.Guide>
transitStages: MutableMap<String, TransitStage>
nearbyPlaces: List<PlaceEntity>
latestRecommendations: List<RecentPlace>Google Routes API ์ ๋ด ๊ณ์ธต์ ๋๋ค.
๋ด๋น ์ญํ :
- ๋๋ณด/๋์ค๊ตํต ๊ฒฝ๋ก ์์ฒญ
- ๊ฐ๊น์ด ์ฅ์๋ ๋๋ณด ๊ฒฝ๋ก ์ฐ์
- ๋์ค๊ตํต ๊ฒฝ๋ก์์ ์ฒซ ํ์น ๋จ๊ณ ์ถ์ถ
- ๋ฒ์ค/์งํ์ฒ ๊ตฌ๋ถ
- ์ถ๋ฐ ์ ๋ฅ์ฅ/์ญ, ๋์ฐฉ ์ ๋ฅ์ฅ/์ญ, ๋ ธ์ ๋ช , ๋ฐฉ๋ฉด, ์ ๋ฅ์ฅ ์ ์ถ์ถ
- ์๋ด ๋ฌธ๊ตฌ ์์ฑ
- ๊ฒฝ๋ก ์บ์ ์ ์ฅ/๋ณต์
ํต์ฌ ๋ชจ๋ธ:
data class Guide(
val summary: String,
val instruction: String,
val firstFlow: FirstFlow,
val transitLine: String?,
val transitHeadsign: String?,
val departureStopName: String?,
val arrivalStopName: String?,
val stopCount: Int,
val transitInstruction: String?,
val ridingInstruction: String?,
val alightInstruction: String?
)HomeActivity์ MyPage์ ์ฅ์ ์นด๋ UI๋ฅผ ๋ด๋นํฉ๋๋ค.
๋ด๋น ์ญํ :
- ๋ฐฉํฅ ์์ด์ฝ/๊ฑฐ๋ฆฌ ํ์
- ์ฅ์๋ช /์์ฝ ํ์
- ํํธ ๋ฒํผ ํ์
- ๋์ค๊ตํต ์๋ด ์ค๋ช ํ์
- ํ์น/ํ์ฐจ/๋ค์ ๋ฃ๊ธฐ ๋ฒํผ ์ด๋ฒคํธ ์ ๋ฌ
์ฌ์ฉ์๋ณ SharedPreferences ๋ํผ์ ๋๋ค.
๋ด๋น ์ญํ :
- ์ฌ์ฉ์ ์ค์ ์ ์ฅ
- ๊ธ์จ ํฌ๊ธฐ, ์์ฑ ์๋ด, ์์น ๊ฐฑ์ ์ฃผ๊ธฐ ์ ์ฅ
- ๋ง์ง๋ง ์์น ์บ์ฑ
- ์ฆ๊ฒจ์ฐพ๊ธฐ ID Set ๊ด๋ฆฌ
- HomeActivity ํํธ ๊ณ ์ ๊ณผ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ํ ํตํฉ
ํต์ฌ ๊ท์น:
toggleFavorite(placeId)๊ฐ ์ฆ๊ฒจ์ฐพ๊ธฐ์ ํ ํํธ ์ํ๋ฅผ ํจ๊ป ๋ณ๊ฒฝpinnedPlaceId๋ ์ฃผ๊ธฐ์ ์์ฑ ์๋ด์ฉ ๋ํ ์ฅ์๋ก ์ฌ์ฉ
์ง๋ ์ค์ฌ ํ๋ฉด์ ๋๋ค.
๋ด๋น ์ญํ :
- Google Map ์ด๊ธฐํ
- ํ์ฌ ์์น ํ์
- ์ฃผ๋ณ ์ฅ์ ์กฐํ ๋ฐ ๋ง์ปค ํ์
- ์นดํ ๊ณ ๋ฆฌ/์ฆ๊ฒจ์ฐพ๊ธฐ ํญ ์ฒ๋ฆฌ
- ์ฅ์ ์ ํ ์ PlaceDetailActivity ์ง์
ํ๋กํ, ์ต๊ทผ ๋ฐฉ๋ฌธ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก ํ๋ฉด์ ๋๋ค.
๋ด๋น ์ญํ :
- Firebase/์บ์ ํ๋กํ ํ์
- ์ต๊ทผ ๋ฐฉ๋ฌธ ๋ชฉ๋ก ํ์
- ์ต๊ทผ ๋ฐฉ๋ฌธ ํํธ ํ ๊ธ
- ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก ํ์
- HomeActivity ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ง์
ํด๋ํฐ ์ฌ๋ถํ ํ ํ ์๋ด ํ๋ฉด์ผ๋ก ๋ค์ด๊ฐ ์ ์๋ ์๋ฆผ์ ํ์ํฉ๋๋ค.
๋ด๋น ์ญํ :
Intent.ACTION_BOOT_COMPLETED์์- ์๋ฆผ ์ฑ๋ ์์ฑ
- ์๋ฆผ ํด๋ฆญ ์ HomeActivity ์คํ PendingIntent ์ฐ๊ฒฐ
์ฑ ์คํ
โ
MainActivity
โ
LoginActivity / SignupActivity
โ
OnboardingActivity
โ
MapActivity
โโ ํ์ฌ ์์น ํ์ธ
โโ ์ฃผ๋ณ Places ์กฐํ
โโ ์ง๋ ๋ง์ปค ํ์
โโ ์ฅ์ ์ ํ โ PlaceDetailActivity
MyPageActivity
โโ ํ๋กํ ํ์ธ
โโ ์ต๊ทผ ๋ฐฉ๋ฌธ ํ์ธ
โโ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ธ
โโ HomeActivity ์ง์
HomeActivity
โโ ์ฃผ๋ณ ์ถ์ฒ/์ต๊ทผ ๋ฐฉ๋ฌธ ๋ชฉ๋ก ํ์
โโ ๋๋ณด ๋ฐฉํฅ ํ์ดํ ์๋ด
โโ TTS ๋ค์ ๋ฃ๊ธฐ
โโ ๋์ค๊ตํต ํ์น ์ ์๋ด
โโ ํ์นํ์ด์ โ ํ์น ์ค ์๋ด
โโ ๋ด๋ ธ์ด์ โ ๋ชฉ์ ์ง ๋๋ณด ์๋ด
โโ ํํธ โ ์ฆ๊ฒจ์ฐพ๊ธฐ/๊ณ ์ ๋๊ธฐํ
ํด๋ํฐ ์ฌ๋ถํ
โ
BootCompletedReceiver
โ
์๋ฆผ ํ์
โ
์๋ฆผ ํด๋ฆญ โ HomeActivity
ํ์ฑํํ API:
- Maps SDK for Android
- Places API (New)
- Routes API
API ํค ์ ํ:
- Android ์ฑ ์ ํ ์ฌ์ฉ
- ํจํค์ง๋ช ๊ณผ SHA-1 ๋ฑ๋ก
ํ์ ํญ๋ชฉ:
- Firebase Authentication ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ ๋ก๊ทธ์ธ ํ์ฑํ
- Cloud Firestore ํ์ฑํ
app/google-services.json๋ฐฐ์น
ํ๋ก์ ํธ ๋ฃจํธ์ local.properties์ ๋ค์ ๊ฐ์ ์ค์ ํฉ๋๋ค.
MAPS_API_KEY=YOUR_GOOGLE_MAPS_API_KEY
DEBUG_SHA1=AA:BB:CC:DD:...SHA-1 ํ์ธ:
./gradlew signingReportManifest ์ฃผ์ ๊ถํ:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />์ค๋ช :
- ์์น ๊ถํ: ์ฃผ๋ณ ์ฅ์ ์ถ์ฒ, ๊ฒฝ๋ก ์๋ด
- ์๋ฆผ ๊ถํ: Android 13 ์ด์ ๋ถํ ํ ํ ์๋ด ์๋ฆผ
- ๋ถํ ๊ถํ: ์ฌ๋ถํ ํ ์๋ฆผ ํ์
- Foreground Service ์์น ๊ถํ: ๋ฐฑ๊ทธ๋ผ์ด๋ ์์น ์ถ์ ๊ตฌ์กฐ
Debug ๋น๋:
./gradlew assembleDebugAPK ์์น:
app/build/outputs/apk/debug/app-debug.apk
์ค๊ธฐ๊ธฐ ์ค์น:
adb install -r app/build/outputs/apk/debug/app-debug.apk์ฑ ์คํ:
adb shell monkey -p com.example.seniorlocationapp 1- ์ธ์ฆ: ์ด๋ฉ์ผ ํ์๊ฐ์ โ ์จ๋ณด๋ฉ ์ ์ฅ โ ๋ก๊ทธ์์ โ ์ด๋ฉ์ผ ๋ก๊ทธ์ธ๊น์ง ํ์ธํฉ๋๋ค.
- ์ง๋ ๊ธฐ๋ณธ ํ๋ฆ: ์์น ๊ถํ ํ์ฉ ํ ํ์ฌ ์์น ์ด๋, ์ฃผ๋ณ ์ฅ์ ๋ง์ปค, ํ๋จ ์ถ์ฒ 3๊ณณ ํ์๋ฅผ ํ์ธํฉ๋๋ค.
- ํํฐ: ์ง๋ ์๋จ
ํํฐ๋ฒํผ โ ์นดํ ๊ณ ๋ฆฌ/๋ฐ๊ฒฝ/์์ ์ค ์ต์ ์ ์ฉ โ ์ง๋ ๋ง์ปค์ ์ถ์ฒ ๋ชฉ๋ก์ด ์กฐ๊ฑด์ ๋ง๊ฒ ๊ฐฑ์ ๋๋์ง ํ์ธํฉ๋๋ค. - ๊ฒ์/์์ธ: ์ฅ์ ๊ฒ์ โ ๊ฒฐ๊ณผ ํญ/๊ฑฐ๋ฆฌ์ ํ์ธ โ ์์ธ ํ๋ฉด์์ ์ฌ์ง, ํ์ , ๋ฆฌ๋ทฐ, ๊ฑฐ๋ฆฌ, ๊ธธ์ฐพ๊ธฐ ๋ฒํผ์ ํ์ธํฉ๋๋ค.
- ์ฆ๊ฒจ์ฐพ๊ธฐ ๋๊ธฐํ: ์์ธ ํ๋ฉด ํํธ ์ถ๊ฐ โ MyPage ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ โ HomeActivity ํํธ/๊ณ ์ ์ํ ๋ฐ์์ ํ์ธํฉ๋๋ค.
- ํ ์๋ด: MyPage์
์ ๊ธํ๋ฉด ๋ณด๊ธฐ๋ฒํผ์ผ๋ก HomeActivity ์ง์ โ ํฐ ๊ธ์จ ์๊ฐ, ์ถ์ฒ ๋ชฉ๋ก, ์ ๋ ฌ/์นดํ ๊ณ ๋ฆฌ ์นฉ, ์๋ก๊ณ ์นจ ์ํ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํฉ๋๋ค. - ์์ฑ/๋์ค๊ตํต ์๋ด: HomeActivity์์ ๋ฐฉํฅ ์์ญ์ ๋๋ฌ TTS๋ฅผ ํ์ธํ๊ณ , ๋์ค๊ตํต ๊ฒฝ๋ก์์๋
[ํ์นํ์ด์]โ[๋ด๋ ธ์ด์]โ[๋ค์ ๋ฃ๊ธฐ]ํ๋ฆ์ ํ์ธํฉ๋๋ค. - ๋ฐฑ๊ทธ๋ผ์ด๋/์์ ฏ: ์ค์ ์์ ์์น ์ ๋ฐ์ดํธ ๊ฐ๊ฒฉ ๋ณ๊ฒฝ โ ์์ ฏ์ ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ๊ณผ HomeActivity ์๋ด ๊ฐฑ์ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
- ์ฌ๋ถํ ์๋ฆผ: ์ฑ์ ํ ๋ฒ ์คํํ๊ณ ์๋ฆผ ๊ถํ์ ํ์ฉํ ๋ค ์ฌ๋ถํ โ โ์์น ์๋ด๋ฅผ ์์ํ ๊น์?โ ์๋ฆผ ํด๋ฆญ ์ HomeActivity ์ง์ ์ ํ์ธํฉ๋๋ค.
- ๋ก๊ทธ์ธ UI ์ ๋ฆฌ: ๋ก๊ทธ์ธ ํ๋ฉด์ ๋ฏธ๊ตฌํ ์์ ๋ก๊ทธ์ธ ๋ฒํผ์ด ๋ณด์ด์ง ์๊ณ ์ด๋ฉ์ผ ๋ก๊ทธ์ธ/ํ์๊ฐ์ ๋ง ๋ ธ์ถ๋๋์ง ํ์ธํฉ๋๋ค.
์ฆ๋ถ ๋ฆฌ์์ค ์บ์๊ฐ ๊นจ์ง ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
./gradlew clean
./gradlew assembleDebugํ์ธ ํญ๋ชฉ:
- Google Cloud์์ Maps SDK, Places API, Routes API ํ์ฑํ ์ฌ๋ถ
- API ํค์ Android ์ฑ ์ ํ ํจํค์ง๋ช /SHA-1 ์ผ์น ์ฌ๋ถ
local.properties์MAPS_API_KEY์ค์ ์ฌ๋ถ- ์ค์ ๋ณ๊ฒฝ ํ 5~10๋ถ ๋๊ธฐ
- ์ฑ์ ํ ๋ฒ ์ด์ ์คํํ๋์ง ํ์ธ
- Android 13 ์ด์์์ ์๋ฆผ ๊ถํ์ ํ์ฉํ๋์ง ํ์ธ
- ์ผ๋ถ ์ ์กฐ์ฌ ๋ฐฐํฐ๋ฆฌ ์ต์ ํ ์ ์ฑ ์ ๋ฐ๋ผ ๋ถํ ์๋ฆผ์ด ์ง์ฐ/์ ํ๋ ์ ์์
- ์์น ๊ถํ์ด ํ์ฉ๋์ด ์๋์ง ํ์ธ
- ๊ธฐ๊ธฐ์ GPS/์์น ์๋น์ค ํ์ฑํ ํ์ธ
- ์ค๋ด/์งํ์์๋ GPS ์ ํ๋๊ฐ ๋ฎ์ ์ ์์
- ์งํ์ฒ ์ถ๊ตฌ ๋ฒํธ๋ Routes API ์๋ด ๋ฌธ๊ตฌ์ ํฌํจ๋ ๋๋ง ์ถ์ถํฉ๋๋ค.
- ์งํ์ฒ ํ์น ์ค์๋ GPS๊ฐ ๋ถ์์ ํ ์ ์์ด ์ฌ์ฉ์์
[ํ์นํ์ด์],[๋ด๋ ธ์ด์]์๋ ๋ฒํผ์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. - Android ์ ์ฑ ์ ์ฌ๋ถํ ์งํ Activity๋ฅผ ์ง์ ๋์ฐ๊ธฐ๋ณด๋ค ์๋ฆผ ํด๋ฆญ ๋ฐฉ์์ผ๋ก HomeActivity์ ์ง์ ํฉ๋๋ค.
MainActivity๋ผ์ฐํ ์ ์ฑ ์ ์ต์ข ๋ฐฐํฌ ์ ๋ก๊ทธ์ธ/์จ๋ณด๋ฉ ์ํ์ ๋ง๊ฒ ์ ๊ฒ์ด ํ์ํฉ๋๋ค.
ํ์ต ๋ฐ ๋ฐ๋ชจ ๋ชฉ์ ์ ํ๋ก์ ํธ์ ๋๋ค.