[Android][Compose] WorkManager & AlarmManger로 특정 시간에 백그라운드 작업 예약하기
·
Android/기타
안드로이드에서는 백그라운드 작업을 돕는 요소들이 있다. 그 요소들 중에서 AlarmManager와 WorkManager를 다뤄 보려고 한다. AlarmManager는 안드로이드 프레임워크에서 제공하는 API로 시스템 레벨의 알람 서비스에 접근하게 해 준다. 정확한 시간에 대한 작업이 필요한 경우에 사용되며, WorkManager가 없던 시절에는 BroadcastReceiver나 JobScheduler를 함께 사용하여 백그라운드 작업을 수행했다. WorkManager는 백그라운드에서의 작업을 보장하는 안드로이드 Jetpack 라이브러리이다. 사용자가 화면을 벗어나거나, 앱이 종료가 되더라도 예약한 기능을 안정적으로 수행할 수 있다. 또한 기기의 상태(네트워크 연결, 저장공간, 충전 상태)와 같은 제약 조건..
[Android] Could not create task ':app:kspDebugKotlin'.
·
Android/이슈 처리
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'. > Could not create task ':app:kspDebugKotlin'. > Cannot query the value of task ':app:kspDebugKotlin' property 'classpathSnapshotProperties.useClasspathSnapshot' because it has no value available.프로젝트를 새로 만들고 의존성을 추가 후 앱을 실행했더니 위와 같은 에러가 발생했다. 의존성을 추가하고 sync에서 문제가 발생하지 않아서 조금 헤매었는데, 이 에러는 KGP와 KSP의 버전이 불일치할 때 자주 나타..
[Android] 인앱 업데이트(in-app update) 적용하기
·
Android/기타
인앱 업데이트 | Other Play guides | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 인앱 업데이트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 사용자는 기기에서 앱을 최신 상태로developer.android.com플레이스토어에 앱을 최신 버전으로 배포했을 때, 앱을 사용하던 유저에게 업데이트 할 것을 알리고 싶을 때가 있다. 인앱 업데이트(in-app update)는 이것을 가능하게 하는 Google Play Core 라이브러리 기능이다.◾ 업데이트 방식1. 유연한 업데이트(Flexible udpates)유연한 업데이트는 사용자가 업데이트를 하는 동안 앱을 사용하는 경우에 적합하다. 이..
[Android] WebView에서 다운로드 동작이 안 되는 이유
·
작업 일지
공지사항 화면을 WebView로 관리하고 있는데, 게시글 중에서 apk를 다운로드할 수 있는 링크를 클릭했는데 아무 이벤트가 동작하지 않는 문제가 생겼다. 신기한 점은 다른 WebView에서 똑같은 url로 같은 화면을 띄우는데, 다운로드 동작이 정상적으로 되었다. 해당 부분을 찾아보니 WebView를 사용할 때 WebViewClient를 적용한 경우 WebView의 기본 동작을 WebViewClient의 shouldOverrideUrlLoading()이 대신 수행한다고 한다. 그래서 WebViewClient를 적용 안 한 WebView의 경우 다운로드와 같은 특수 MIME 타입은 자동으로 외부 브라우저로 넘겨 처리를 하기 때문에 다운로드가 정상으로 동작한다. 하지만 WebViewCilent를 적용하면 ..
[Android] Multi Module + build-logic + hilt
·
Android/Architecture
최근에 프로젝트에 새로 들어가면서 구조를 설계하게 되었다. presentation-domain-data로 틀을 잡고 다른 필요한 부분(common 등)은 모듈로 추가하는 방식을 썼는데, 이번에 Now In Android(NIA)의 구조를 참고하면서 그 내용을 정리해 봤다. NIA와 차이가 있는데, feature-core 대신 feature-domain-data로 틀을 잡고 core 모듈에 common과 di 등을 두는 걸 생각했다.◾ 모듈 생성하기File > New > New Module을 통해 모듈을 생성할 수 있다.모듈을 생성할 때 Templates 항목에 여러 가지가 있는데, 사용하는 항목들은 아래와 같다. 1. Phone&Tablet앱 실행에 필요한 모든 요소(Activity, Manifests,..
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #2
·
Android/UI
[Android] kizitonwose/Calendar 캘린더 라이브러리 사용기 #1GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Android and Kotlin Multiplatform. - kizitonwose/Calendargithub.com캘린ogyong.tistory.com지난번 kizitonwose/Calendar, 캘린더 라이브러리 사용기 #1에 이어서 몇 가지 기능을 추가해 보려고 한다.- CalendarVie..
[Android] 배송 순서 최적화하기 with TSP
·
작업 일지
개요운영하고 있는 앱의 기능 중에서 사용자가 배송 순서를 설정할 수 있는데, 고객사에서 이 배송 순서를 현재 사용자 위치에서 가장 가까운 곳을 자동 설정하여 순서를 정렬해 줄 수는 없냐고 요청이 왔다. 이 내용을 들었을 때 현재 위치 좌표와 배송지의 좌표를 알고 있으니 두 좌표 간의 직선거리를 구하면 바로 될 거 같은데..? 라는 생각이 들었다. 예전에 아래 작업을 했던 게 도움이 된 것 같다.(※ 교통 상황같은 변수는 고려하지 않았다.) [Android] 내비게이션의 다음 경로 정보 구하기#1프로젝트에서 내비게이션을 사용하여 다음 경로까지의 거리 값과 회전 정보를 구해야하는 일이 생겼다. 개발 과정과 사용하게 된 API에 대해서 정리를 해본다. 사용 API ◾ 카카오내비 길찾기 SDKogyong.tis..
[Android] Firebase Storage로 파일 관리
·
Android/Firebase
Android에서 Cloud Storage 시작하기 | Cloud Storage for Firebase이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 Android에서 Cloud Storage 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Cloud Storagefirebase.google.comFirebase Cloud Storage는 문서, 사진 등의 콘텐츠를 저장할 수 있는 객체이다. 이미지를 업로드하고 다운로드할 수도 있고, 앱을 사용하는 중에 특정 시점의 로그가 필요한 경우 파일 형태로 만들어서 확인해 볼 수도 있다.Firebase 설정Cluad Storage를 설정하는 부분에서 allow read, write:..
[Android] Firebase Crashlytics로 비정상 종료 확인하기
·
Android/Firebase
Firebase Crashlytics를 사용하면 '비정상 종료', '심각하지 않은 오류', 'ANR' 오류에 관한 내용을 Firebase 콘솔에서 확인할 수 있다. Crashlytics를 사용하기에 앞서서 안드로이드 앱에 Firebase를 추가하고 google-services.json을 프로젝트에 추가해야 한다. 이후에 Crashlytics를 사용할 수 있다.앱에 Crashlytics SDK 추가build.gradle.kts(Module: app)에 안드로이드용 Crashlytics 라이브러리의 종속 항목을 추가한다.dependencies { // Firebase implementation(platform("com.google.firebase:firebase-bom:33.1.2")) im..
[Android] 릴리즈 모드로 빌드하기
·
Android Studio
안드로이드 앱을 빌드하는 방법으로 디버그와 릴리즈 모드가 있다. 여기서 릴리즈는 사용자에게 앱을 배포하고 운영하는 데 사용되는 모드인데, 안드로이드 스튜디오에서는 기본적으로 디버그 모드로 앱이 빌드 되도록 설정되어 있다. 디버그 모드로 빌드되는 기본 설정을 릴리즈 모드로 변경해보려고 한다.1. signingkey 생성2. Project Structure에서 Signing Config 설정3. Build Variants에서 release로 변경SigningKey 생성Build > Generate Signed App Bundle / APK > Create new 에서 SigningKey를 생성한다.이 때 파일 경로와 Alias, Password는 Project Structure에서 등록해야 하기 때문에 기억..
[Android] adb로 연결된 모든 기기의 해상도 변경하기
·
Android/ADB
adb를 사용해서 pc에 연결된 모든 기기의 해상도를 변경하는 방법을 찾아봤다.Bash 스크립트에서 현재 연결된 모든 기기의 목록을 가져 온 다음, for 문을 통해 각 기기의 해상도를 변경해주면 된다. 윈도우 환경에서 간편하게 Bash Shell을 사용하기 위해 Git Bash를 사용했다.다음은 연결된 모든 기기의 해상도를 1080x1920으로 변경하는 예시이다.// 연결된 기기 목록 가져오기 devices=$(adb devices | grep -w "device" | awk '{print $1}')// 해상도 설정resolution= "1080x1920"// 해상도 변경for device in $devices; d..
[Android][Compose] MaterialCalendarView를 Compose에서 사용하기
·
작업 일지
기존 xml로 작업한 PWFB 프로젝트를 Compose로 변경하면서 기존에 구현했던 캘린더 UI를 어떻게 구현해야 할까 고민이 많았다. 캘린더는 MaterialCalendarView를 사용하고 있었는데, 다른 캘린더 라이브러리나 직접 구현하는 것보다는 기존 코드를 덜 수정하는 방향으로 진행하고 싶었다. Compose에는 AndroidView라는 컴포저블이 있는데, Compose에서 아직 사용할 수 없는 UI 요소를 사용하는 경우에 쓰인다. AndroidView 컴포저블을 사용해서 MaterialCalendarView를 사용할 수 있었다.AndroidView@Composable@UiComposablefun AndroidView( factory: (Context) -> T, modifier: M..