[Android] Failed to instantiate test runner class ···
·
Android/이슈 처리
Failed to instantiate test runner class androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner Test 코드 실행 시 @Test 주석이 없어서 발생한 에러로 아래와 같이 설정을 하면 된다. @Test fun test() { }
[Android] An instance of PagingSource was re-used ···
·
Android/이슈 처리
기존 프로젝트에서 Hilt를 적용을 위해 코드를 수정하였는데 Paging3 Adapter의 refresh() 호출 시 앱이 죽는 현상이 발생했다. java.lang.IllegalStateException: An instance of PagingSource was re-used when Pager expected to create a new instance. Ensure that the pagingSourceFactory passed to Pager always returns a new instance of PagingSource. 에러의 내용은 Pager가 새로운 인스턴스를 만들 때 PagingSource의 인스턴스를 재사용한다는 것이다. 문제가 되는 코드는 아래와 같았다. Repository @Sing..
[Android] :app:hiltJavaCompileDebug
·
Android/이슈 처리
Hilt를 공부하던 중 다음과 같은 에러가 발생했다. Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException: Unsupported metadata version. Check that your Kotlin version is >= 1.0 해당 에러를 찾아보니 코틀린과 Hilt의 호환 문제가 있다는 것 같다. 내가 사용하던 버전은 코틀린 1.7.20, Hilt 2.40.1 이였는데, 코틀린 버전을 1.8.0, Hilt 버전을 2.44로 변경했더니 빌드에 성공했다.
[Android] Permission denied (publickey).
·
Android/이슈 처리
새로운 기기에 github 계정을 연결하고 commit 내용을 push 하려는데 아래 에러가 발생했다. 위 내용을 찾아보니 현재 기기의 SSH key가 git에 등록되지 않아서라고 한다. 우선, Terminal을 열고 ssh-keygen -t rsa -C "github 이메일"을 입력한다. 명령어를 입력하면 파일 위치에 대한 설정을 하게 되는데 그냥 엔터를 누르면 괄호 안의 경로 (Users/~/.ssh/id_rsa)에 ssh 파일이 생성된다. id_rsa.pub 파일을 열어서 내용을 복사한다. github 사이트의 Settings > Access > SSH and GPG keys 탭에 들어간다. 복사해 둔 키를 입력하면 끝. ssh -T git@github.com을 입력해서 접속 테스트를 해볼 수 있다..
[Android] 안드로이드 스튜디오의 사이드 바에서 commit 탭 추가하기
·
Android Studio
File > Settings > Version Control > Commit 에서 Use non-modal commit interface를 체크.
[Android] Paging3에서 데이터 없을 때 처리하기
·
Android/Paging3
Paging3는 PagingData를 PagingDataAdapter의 submitData로 전달하여 리스트를 표시한다. 만약 리스트에 표시할 데이터가 없는 경우 초기 화면을 표시해야 하지만, 데이터가 없어도 PagingData는 null이나 empty로 내려오지 않는다. 이럴 때 PagingDataAdapter의 addLoadStateListener를 사용하면 데이터가 없을 때 처리를 할 수 있다. addLoadStateListener는 CombinedLoadState로 현재 PagingData의 로딩 상태를 관찰한다. CombinedLoadStates의 LoadState 정보는 다음과 같다.(참고) • append 목록의 끝에서 데이터를 로드하는 상태 • prepend 목록의 시작 부분에서 데이터를 ..
[Android] adb로 기기의 해상도를 확인하고 변경하기
·
Android/ADB
안드로이드 개발을 하다 보면 해상도별로 앱이 어떻게 표시되는지 확인하고 싶을 때가 있다.이럴 때 adb를 사용하면 기기의 해상도를 쉽게 변경할 수 있다. adb의 명령어 중에서 adb shell wm 이라고 있는데, 이 명령어를 사용하면 안드로이드 기기의 Window Manager를 제어하고 관련 정보를 확인할 수 있다. 프롬프트에 아래와 같이 명령어를 입력하면 Window Manager의 명령어 리스트가 표시된다.이 중에서 size와 density는 각각 기기의 해상도와 화면 밀도를 담당한다.size : 기기 크기인 화면상의 총 픽셀 수(해상도)density : 기기 화면 밀도(dpi)기기 해상도adb shell wm size를 입력하면 해상도 값을 얻을 수 있다.해상도를 변경하고 싶다면 adb s..
[Android] Glide, 모서리 둥글게 처리하기
·
Android/Glide
.apply(RequestOptions.bitmapTransform(RoundedCorners(정수 값))) Glide를 사용해서 이미지를 표시할 때, 모서리를 둥글게 하려면 위의 코드를 추가하면 된다. Glide.with(this) .load(R.drawable.sample) .into(mBinding.ivMain) Glide.with(this) .load(R.drawable.sample) .apply(RequestOptions.bitmapTransform(RoundedCorners(80))) .into(mBinding.ivMain)
[Android] error: To use Coroutine features, you must ···
·
Android/이슈 처리
error: To use Coroutine features, you must add `ktx` artifact from Room as a dependency. androidx.room:room-ktx: Room 라이브러리를 사용하고 있었고, Dao에서 suspend를 추가하였는데 해당 에러가 발생했다. Dao를 선언할 때 suspend 키워드를 붙이면 Room에서 suspend 함수로 구현을 해주는데 해당 기능을 해주는 라이브러리가 없어서 발생한 에러인 것 같다. implementation "androidx.room:room-ktx:2.4.3" gradle에 추가하면서 문제를 해결됐다.
[Android] ADB로 Task와 Stack 확인하기
·
Android/ADB
adb shell "dumpsys activity activities" ( "" 없어도 됨 ) 터미널에서 위 명령어를 입력하면 연결된 기기에서 활성화된 앱에 대한 Activity 정보를 읽는다. 위 정보에 Task와 Stack이 포함되어 있어 해당 부분을 찾으면 된다. (Task와 Stack 이외의 정보들이 많기 때문에 오래 걸릴 수 있음) adb shell "dumpsys activity activities | grep -i Hist" 불필요한 정보는 필터링을 통해서 Stack에 대한 정보만 얻을 수 있다. adb shell dumpsys activity activities | grep -i $packageName | grep -i Hist 특정 앱에 대한 Stack 정보를 얻으려면 위 명령어를 사용하..
[Android] Paging3에서 아이템 삭제하기 + 로딩 처리
·
Android/Paging3
[Android] Paging3, 스크롤 시 로딩 화면 추가하기 [Android] Paging3 + Room + Flow 사용하기 [Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room) [Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면 ogyong.tistory.com 저번에 했던 스크롤 시 로딩 화면을 추가하는 것에 이어서 Paging3에서 아이템을 삭제하고, 삭제가 처리되는 동안 로딩 화면을 띄우는 것을 해보려고 한다. Room 삭제 쿼리 추가 @Dao interface SampleDao { ... /** * 아이템 삭제 */ @Query("DELETE FROM sample W..
[Android] Paging3, 스크롤 시 로딩 화면 추가하기
·
Android/Paging3
[Android] Paging3 + Room + Flow 사용하기 [Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room) [Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면이 뜨면서 리스트가 늘어나는 것을 ogyong.tistory.com 저번에 Paging3를 이용해서 리스트를 그려봤다. 여기에 추가로 스크롤을 해서 다음 페이지를 호출할 때 로딩 화면을 그려보려고 한다. Paging3 라이브러리는 LoadState 클래스를 통해 데이터의 로드 상태를 추적할 수 있다. 그리고 로드 상태가 변경되면 LoadState 값을 자동으로 알림 받는 LoadStateAdapter가 존재한다. ..