no image
kotlin jetpack compose 컴포즈 기본 활용하기
0. 서론내 앱이  어느정도 갈무리가 된 지금 Compose에 대해 공부하고 있읍니다.사실 swift가 선언형이라서 선언형을 조금이라도 익숙한 kotlin에서 연습하려고 미리 공부하는중 근데 이게 kotlin 처음 배울 때처럼 공식문서에서 개념을 찾아서 쓰기가 너무 짜증나더라구요 구글링해봤자? 2023년도 글인데 글에서는 변경된 것도 많아서.. 어쩔 수 없이 xml 에서의 변경점에 대해서 적어보려 합니다.  기본 전제   xml로 어느 정도 프로젝트를 진행한 사람 정도가 되겠구요 ㅋㅋ 이제 2년차인 noob이라서.. 세상에 날고기는 분들 많은데 그냥 공부할 거 정리할 겸 적어보려 합니다.  1. 본론먼저 변경점에 대해서 간략히 말하자면, 더 편하고 직관적으로 바뀐게 생각보다 많더라구요?1) cornerR..
2025.03.09
no image
kotlin - Suspension functions can be called only within coroutine body 코루틴
0. 서론특정 화면에서 이런저런 API를 사용하고, 두개의 데이터를 받아올 때 까지 기다린다음 해야하는 기능들도 있어서, 구현중 비동기 처리를 하면서 왜 이건 되고 이건 안될까? 하는의문이 있었음.. 왜 이건 안될까의 하나는 ⬇️android.os.NetworkOnMainThreadExceptionSuspension functions can be called only within coroutine bodywithContext(Dispatchers.Main) {} 했잖아!!!!그래도 백스레드에서 메인스레드 동작들을 하지말라는 오류가 계속 나옴. 근데 아에 CoroutineScope로 빼서 Main에서 동작하면 또 됨. 근데 이 부분에서 동기처리로 되는건지는 잘 모르겠음한 마디로 기초 쌓아서 배운게 아니라 ..
2025.02.15
no image
kotlin OKHttp3 토큰 자동 갱신 요청
안녕하세요 0. 서론 오늘은 로그인 세션을 보안을 지키며 유지하면서 구현했었떤 토큰 자동 갱신에 대한 부분임안드로이드 kotlin에서는 보통 Retrofit을 많이쓰긴하는데 이상하게 처음에 손을 안대다 보니 잘안써지게 됨.뭐 상관은 없으니 레지고. 1. 본론(1) OkhttpProvider.kt먼저 이 자동 갱신은 앱에서 1개만 있으면 되니 Object로 만들었음 이 객체에는 실제 토큰을 재발급하는 API함수와이 OKHttpClient에다가 넣은 accessToken이 만료됐을 경우 재발급 받은 후 기존 API를 다시 요청하는 함수임.  먼저 JWT 형식이고Access토큰은 일정 시간이 지나면 못씀.   (2) 함수 설명함수는 이런 형식임로직순서를 본다면 먼저 1. accessToken을 요청함 2. B..
2025.01.31
no image
kotlin Error occurred while mirroring video: ffmpeg version v4.5-dev-2008-g90da43557f / FFMpeg 안드로이드 동영상 좌우 반전처리
안녕하세요 디버깅 시간..? 과 비슷하지만 그 전에 동영상 좌우반전 처리와 + 관련된 버그 찾기 시간임.  0. 서론이미지는 bitmap으로 변환해서 x축을 -1f 만 해도 쉽게 좌우 반전이 되지만, 영상은 어떻게 해야할까.. 싶음 영상은 2가지 방법? 정도를 제안해줌1. 처음 녹화때부터 Camera에 접근해서 좌우 반전된 카메라를 사용하기2. 녹화된 영상을 사후에 좌우 반전 처리하기  근데 Claude에 의하면, (거의 프롬프트 다루기 석사급임 ㅋㅋ)  녹화 전에 Preview나 VideoCapture 설정 시점에서 미리 좌우 반전을 하는 것 ..CameraX 최신 버전에서는 VideoCapture의 미러링 설정 방식이 좀 다릅니다. 출처: Claude라는데 아무리 봐도 CameraX라이브러리를 써가지..
2025.01.30
no image
kotlin 안드로이드 File 손상된 파일 다운로드 받기
안녕하세요 오늘은 0. 서론파일이 손상됐을 때 다시 다운로드 받기 (File 데이터 클래스로) 임 일단 URL에서 파일을 다운로드 받는 로직에서 갑자기 BAD_DECRYPT 이런 오류가 나옴..근데 솔직히 내가 비밀키를 뭐 바꾼것도아니고, 암호화-복호화, 해싱에 대해서 손댄것도 아니라서 킹리적 갓심으로 -> '파일 다운로드 받을 때 손상됐다.'라는 생각이 듦. GPT나 클라우드도 복호화가 안되는 것 파일이 손상됐거나, 읽어들일 수 없는 파일이 가장 큰 이유라는 설명. 1. 본론 일단 복호화할 때 이를 cache로 저장하는데val tempFile = File.createTempFile("temp_", null, context.cacheDir) connection.inputStream.use { inp..
2025.01.29
no image
kotlin 안드로이드 unit test, test 사용하기
안녕하세요. 오늘은 방대한 프로젝트에서 내가 만든 기능을 구현하고 잘 작동하는지 테스트할 때 매번 app build하고 힘들잖아요 그럴때를 위해 필요한 유닛 테스트. 1. 서론 사실 androidTest는 뭐 로딩을 만들어놓은 dialogFragment를 테스트해본다거나, 아니면 뭐 앱의 프로세스가 종료된 후 처리에 대해서,api 통신하기 번거로우니 등의 이유겠죠 아무튼 이런 곳에서 쓰는건데요 2 androidTest저는 잘 안쓰게 되는 androidTest부터 보자면 여기서는 annotation을 사용해야합니다 compose처럼요. 먼저 저는 특정 기능이 끝나면 나오는 dialogFragment가 오류 없이 잘 동작하는지 보고 싶었고, test가 지나가면서 찰나에 나오는 UI를 보고 싶었습니다. @Ru..
2025.01.28
no image
kotlin 화면전환시 캐시파일 사라짐 (cache에 넣은 .tmp 자동삭제 )
오늘은 개발 과정 중에 File형식의 데이터들이 어느 순간 사라져버리는 상황에 대해 기록해놓으려고 합니다. 1. 상황 보안을 위해 사용자 개인의 파일을 File형식의 데이터로 복호화해서 data class로 담아 사용하던 중, 갑자기 이런 로그가 나오면서 앱이 Crash되는 상황Load failed for [/data/user/0/com.example.exampleProject/cache/decrypted_8586103720381587663.tmp] with dimensions [195x195] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 3 root causes: java.io.FileNo..
2025.01.27
no image
kotlin 네트워크 형식, 보안 체크 하기
이번엔 앱의 보안에 대해서 조치를 취하다가 간단한 자동 로그아웃을 구현하려고 합니다.비밀번호가 없는 네트워크나 "WEP" 보안형식의 네트워크일 경우를 체크해서 AlertDialog창을 띄운다거나, 로그아웃 예정 메시지를 알려주는 거죠.0 간단한 내용1. 전부 AOS 운영체제의 service딴으로 접근하는거라 의존성 추가는 필요 X2. 별도의 class로 분리해서 화면전환 시 빠르게 사용하려고 구현했구요1. WifiManager.kt class WifiManager(private val context: Context) { ...} 비전공자로 기본 토대가 조금 부족하다고 느꼈는데, 클린 코드에서 코드의 재사용성을 높이기 위해 object와 class를 만들어 사용할 때 뭔 차이일까.. 싶었는데 이 부분에서 ..
2024.12.31
no image
kotlin 디버깅 시간 [RequestTokenManager] getToken() -> NETWORK_ERROR. App: com.example.practice_project, Service: oauth2:email openid profileaoav: Error when calling server using GmsNetworkStack.
서론[RequestTokenManager] getToken() -> NETWORK_ERROR. App: com.example.practice_project, Service: oauth2:email openid profileaoav: Error when calling server using GmsNetworkStack.라는 생전 처음 보는 오류..어디서 생겼나면val currentUser = Firebase.auth.currentUser if (currentUser == null) { firebaseAuth = FirebaseAuth.getInstance() launcher = registerForActivityResult(ActivityResultCon..
2024.12.13