전체 글 103

[Android] 앱 배포 실패, 그 원인은 SoLoader ? (ft.giphy)

배포를 하려다가 플레이 콘솔에서 배포 실패가 떴었어요 에러 메시지는 아래와 같았습니다 하나 이상의 앱에 결함이 있는 SoLoader SDK 버전이 포함되어 있으므로 앱이 다운되어 사용성이 저하됩니다 64비트 전용 기기에서 비정상 종료를 일으키는 SoLoader SDK 버전이 앱에 통합되어있습니다 공식문서에도 친절하게 나와있습니다 :) https://support.google.com/googleplay/android-developer/answer/12576726?hl=ko 잘못된 SoLoader 버전이 있는 앱 수정하기 - Play Console 고객센터도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요support.google.com 에러 수정방법 1️⃣ 앱이 SoLoader SDK에 직접 종속..

📱 Android 2024.10.11

[Android] Clean Architecture

공식 문서에서 권장하는 앱 아키텍처는 아래와 같습니다 우선 각 계층에 대해 알아보고 권장 앱 아키텍처의 주요 목표에 대해 알아보겠습니다   1. Presentation Layer / UI Layer (사용자 인터페이스 관련 책임)   - Fragment, Activity- ViewModel : UI 관련 데이터를 관리, UI와 비즈니스 로직(도메인 레이어) 간의 연결 역할  2. Domain Layer (비즈니스 로직 관련 책임)   - UseCase: 도메인 레이어의 핵심 구성 요소로 비즈니스 로직을 수행하는 단위로,데이터 레이어에서 데이터를 가져와 비즈니스 로직을 처리한 후, 결과를 UI 레이어에 전달합니다.확장성과 재사용성을 고려해서 주로 하나의 비즈니스 로직당 하나의 use case를 두는 것이 ..

카테고리 없음 2024.10.09

[Android / Glide] Glide override / Glide 이미지 크기 조정

overrideoverride는 이미지의 크기를 강제로 지정하여 로드할 때 사용되는 메서드입니다우선 함수 원형을 보자면,paramater로 width, height을 받아서 크기를 조절해줍니다  @NonNull @CheckResult public T override(int width, int height) { if (isAutoCloneEnabled) { return clone().override(width, height); } this.overrideWidth = width; this.overrideHeight = height; fields |= OVERRIDE; return selfOrThrowIfLocked(); } 만약 width, height이 같..

📱 Android 2024.10.08

[Android] DiffUtil / AsyncListDiffer / ListAdapter 사용법

같은 예제로 DiffUtil / AsyncListDiffer / ListAdapter을 사용하자면 아래와 같습니다  DiffUtilpackage com.example.co_timerimport android.view.LayoutInflaterimport android.view.ViewGroupimport androidx.recyclerview.widget.AsyncListDifferimport androidx.recyclerview.widget.DiffUtilimport androidx.recyclerview.widget.ListAdapterimport androidx.recyclerview.widget.RecyclerViewimport androidx.recyclerview.widget.Recycler..

카테고리 없음 2024.09.29

[Android] onBackPressedDispatcher 뒤로가기 제어하기 (ft. DialogFragment)

Android API 33에서 onBackPressed() 메서드가 deprecated 되면서 onBackPressedDispatcher가 생겼습니다 Activity의 생명주기와 함께 작동하고, 해당 callback을 선언해서 사용하면 됩니다   DialogFragment에서 back 버튼을 눌러도 다이얼로그가 사라지지 않게 하려면 어떻게 해야할까요?1. onBackPressedDispatcher 콜백 추가2. handleOnBackPressed를 override해서 아무 동작도 하지 않도록 설정  override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstance..

📱 Android 2024.09.19

[Android / Retrofit] End of input at line 1 column 1 path $

🐛 End of input at line 1 column 1 path $- Retrofit에서 내려오는 응답이 비어있을 경우에 발생하는 에러 각 상황에 따라 2가지 해결방법이 있습니다🔑  1) NullOnEmptyConverterFactory- Retrofit Module에 addConverterFactory에 NullOnEmptyConverterFactory를 추가합니다, 추가하면 빈 응답은 null로 변환하여 반환됩니다 🔑 2) Response (Response에 데이터가 필요 없는 경우 ex) @Delete ) - 응답 값이 필요하지 않는 요청이라면 Response로 선언합니다 - 데이터를 받을 수 없으므로, 받아야하는 경우엔 사용이 적합하지 않습니다

🐛 버그 2024.09.13

[Android] Bitmap crop with Rect

자르려면 필요한 값 자르려는 원본 이미지(bitmap) , 자를 영역의 정보 (좌표 및 크기) Rect(x,y,width,height)자를 영역의 시작 좌표 = x, y자를 영역의 너비,높이 = width, heightval rect = Rect(x, y, width, height)val cropBitmap = Bitmap.createBitmap(자르려는 원본 이미지, rect.left, rect.top, rect.width(), rect.height()) Rect 클래스의 주요 구성 요소좌표 (Coordinates):left: 사각형의 왼쪽 경계top: 사각형의 위쪽 경계right: 사각형의 오른쪽 경계bottom: 사각형의 아래쪽 경계

📱 Android 2024.06.13

[Bug / RecyclerView] java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionNotificationHolder

🐛 SwipeRefreshLayout에서 refresh시 발생 주 원인  : 데이터 변경 시 리사이클러뷰의 뷰 홀더와 실 데이터가 불일치 SwipeRefreshLayout에서 refresh 발생 시 Adapter의 아이템을 clear 하고 새로 그렸는데, 이 과정에서 문제가 발생한 거 같다  시도한 방법 1. bindViewHolder할 때 holder.bind(아이템목록[position])을 holder.bind(아이템목록[absoluteAdapterPosition])으로 변경  -> 똑같이 에러 발생 2. refresh후 데이터 가져올 때 clear()를 시키지 않고, 데이터를 가져온 후 기존의 데이터와 바꿈!  -> 성공 🔑 recyclerView는 기존의 뷰 홀더를 재사용하려고 하지만, cl..

🐛 버그 2024.05.20

이미지 수난기

까먹기 않기 위해 우선 적어두고,, 나중에 다시 정리할 예정입니다 1. clipRect(Rect rect)현재 클립 영역을 지정된 사각형으로 설정합니다.지정된 사각형 내부의 영역만 그려집니다.사각형 외부의 영역은 그려지지 않습니다.2. clipOutRect(Rect rect)현재 클립 영역에서 지정된 사각형 영역을 제외합니다.지정된 사각형 외부의 영역만 그려집니다.사각형 내부의 영역은 그려지지 않습니다. public static Bitmap createBitmap(@NonNull Bitmap source, int x, int y, int width, int height) { throw new RuntimeException("Stub!");}  createScaledBitmap 메서드Android의 ..

📱 Android 2024.05.16