전체 글 30

Charles Proxy 인증 만료 시 재설치안되던 경우

https://yk-coding-letter.tistory.com/37 Charles Proxy 사용법 + 암호화 해제 방법 개발을 하다보면 클라이언트에서 api 요청을 제대로 보냈는지, 그에 대한 response는 잘 왔는지 테스트하고 싶을 때가 있다. (postman이랑은 다른것은 postman에서 요청하는 request와 동일하게 클라이언 yk-coding-letter.tistory.com 에서 charles proxy의 설치 및 최초 사용법에 대해 설명했었다. 그러고 나서 1년이 지나 인증서가 만료가 되었다. (1년마다 만료되는건 너무 심한것 같다) mac의 `키체인 접근`에 들어가서 Charles Proxy CA 의 만료 시간을 보면 오늘 날짜보다 이전임을 통해 알수 있다. Charles Pro..

Programming 2023.12.06

[이슈 기록] Android 라이브러리 의존성 문제 해결하기

배경 Room 버전을 2.3.0 에서 2.4.0-alpha03 이상으로 업데이트 해야할 일이 생겼었다. 그런데 버전 올리고 빌드를 돌렸더니 갑자기 coroutine 과 rxjava쪽에서 에러가 발생했다고 뜬다. 컴파일 타임이 아닌 런타임에 에러가 발생했다. Room을 업데이트하는데 coroutine/rxjava에서 문제가 생겨서 굉장히 뜬금없다고 생각했다. 원인 라이브러리간에 의존성이 꼬여있었기 때문! kotlinx-coroutines-core의 버전과 kotlinx.coroutines-reactive의 버전은 동일해야한다고 한다. 관련 링크 내가 dependency에 추가한 paging-rxjava3에는 kotlin-coroutines-reactive 가 1.4.3 버전으로 들어가있다. 하지만 room..

Programming/Android 2022.10.03

Charles Proxy 사용법 + 암호화 해제 방법

개발을 하다보면 클라이언트에서 api 요청을 제대로 보냈는지, 그에 대한 response는 잘 왔는지 테스트하고 싶을 때가 있다. (postman이랑은 다른것은 postman에서 요청하는 request와 동일하게 클라이언트에서 개발한것이 전송되지 않았을 가능성도 고려할 수 있다. 그리고 관심갖지 못했던 다른 api 들에 대해서도 감지할 수 있다.) Charles 설치, 사용법과 암호화 해제법에 대해 작성하려 한다. 목차는 아래와 같다. 1. Charles 설치 2. Android 기기를 노트북과 network 연결 3. 노트북에 CA 설치 4. Android 기기에 CA 설치 5. SSL Proxy 설정 0. Charles Proxy에 대하여 Charles 와 같은 프록시 프로그램은 기기에서 발생하는 네..

Programming 2022.09.04

[이슈 기록] Android 에서 단일 모듈 -> 멀티 모듈로 변경할 때 만났던 빌드 에러 이슈

클린 아키텍쳐를 위하여 app - domain - data 의 Layer로 분리한다고 했을 때, app은 domain의 의존성을 갖고(usecase or repository interface 등), data는 domain의 의존성을 갖는다(repository interface를 상속해야함 등) 그런데 app 이 domain 의 의존성만 갖고 있으면 빌드 에러가 났었다. (data의 di에서 Repository interface의 구현체인 RepositoryImp 을 주입해주는데, domain의 의존성만으로 repositoryImp을 알 수 없기 때문이라고 생각한다) 따라서 app 모듈에서 domain과 data 모듈에 모두 의존성을 추가하니 문제가 해결되었다. --아무리 구글링해도 안나왔다. 한 4시간 ..

Programming/Android 2022.06.27

[이슈 기록] TagetSdk 30 -> 31 올리는 과정에서 까다로웠던 이슈 기록 android:exported needs to be explicitly specified for <activity> 이슈

배경 TargetSdk 31부터는 Activity나 Service, broadcast receiver에서 인텐트 필터를 사용하지만 명시적으로 선언된 android:exported 값이 없으면 Android 12 이상을 실행하는 기기에 앱을 설치할 수 없다. ( Reference : https://developer.android.com/about/versions/12/behavior-changes-12?hl=ko#exported ) 하지만 나는 Manifest 파일을 잘 작성 했음에도 android:exported needs to be explicitly specified for . Apps targeting Android 12 and higher are required to specify an expli..

Programming/Android 2022.05.30

Android + CI/CD 적용하기 - CD편 (feat.Github Actions)

CI 에서는 yml 파일을 어떻게 작성하는가에 시간을 많이 썼었다면 CD 에서는 보안파일을 어떻게 외부에 노출시키지 않고, 자동화를 적용하는지에 신경을 많이 썼다. 쿠링 레파지토리의 release 브랜치에 Push 또는 PR이 있을 때 이를 어디에 배포할지에 대한 고민을 첫 번째로 했었고 후보는 플레이스토어에 바로 배포 AWS S3에 apk를 배포 firebase 등에 apk 배포 가 있었다. 플레이스토어에 바로 배포하는 방법도 존재하긴 하지만 바로 검토를 올리는것은 조심스러워서 일단 apk/aab를 받아보기로 했다. 플레이스토어에 출시노트나 다른 세세한 설정들을 만져야 할 때 직접 손으로 하는게 낫다고도 생각했다. 3번째인 firebase에 올리는것이 유력 후보였는데 Github Actions 내에서 ..

Programming/Github 2022.03.11

Android + CI/CD 적용하기 - CI편 (feat.Github Actions)

CI/CD는 Continuous Integration 과 Continuous Deploy(or Delivery) 의 줄임말로, 지속적인 통합과 배포를 의미한다. CI란 CI (Continuous Integration) 개발 + 빌드 + 테스트를 자동화 하는것 (안정화 된 앱 추출) 무엇을 하는것인가? 배포할 브랜치에서 빌드가 잘 되는지 로직 오류 검증을 위한 테스트 코드를 실행하고 결과를 확인 컨벤션 및 코드 스타일 규칙을 지켰는지 CD란 CD (Continuous Deployment) 배포를 자동화 하는것 대표적인 프로세스는 무엇이 있는가? (Android에서) 구글 플레이스토어에 들어가 관련 앱 파일을 업로드 관련된 내용을 팀원들에게 공유 히스토리 관리 및 다음 버전 대비 최근 내가 꾸준하게 관리하고..

Programming/Github 2022.03.09

[번역] RecyclerView를 Wrapping했을 때 퍼포먼스 이슈 - feat.NestedScrollView

Bartek Lipinski의 Medium 게시물 https://medium.com/android-news/android-dev-tip-4-91b7757b1f0a Android Dev Tip #4 The performance of wrapping content in RecyclerView medium.com 을 번역한 내용입니다. 오타 또는 오역이 있다면 댓글로 남겨주시면 수정하겠습니다. [Tip] When RecyclerView is wrapping its content, it’s not recycling anymore. Every record in the dataset has an item View kept in memory for as long as the RecyclerView is in the ..

Programming/Android 2022.03.04

메모리 누수 이슈 기록 (LocationListener)

LocationListener, LocationManager를 이용하여 현재 위치를 실시간으로 업데이트하는 기능을 구현하고 있는데 LocationManager쪽에서 계속 Leak이 발생했었다. 나는 Fragment 쪽에서 LocationListener 인터페이스를 implement하고 있었다. destroy될 때 locationManager.removeUpdate() 를 하지 않으면 Leak이 발생할 수 있다는 건 이해가 됐는데, 그렇다면 난 onStop() 쪽에서 removeUpdate()했는데도 왜 발생하는건지 의아했다. 시도 1 LocatoinManager를 destroyView할 때 null로 처리를 안해서 그런가? 싶어서 lateinit var locationManager: LocationMan..

Programming/Android 2022.01.30

[Android] 첫 오픈소스 라이브러리 배포 - HoldableSwipeHandler 원리 및 출시 후기

Holdable Swipe을 시작하게 된 계기 쿠링 앱에서 추가 기능을 개발하다가 디자인 요구사항 중에 RecyclerView에서 부분 스와이프(partial swipe)가 필요하다는 것을 알게 되었다. 경험해보지 않은 UI였지만 RecyclerView에서 Expandable Recyclerview, 한 View의 스와이프처리 가능 여부는 알고 있었기에 기본적으로 제공되는/이미 다른 누군가가 만들어 놓은 Open Source Library를 쓰면 금방 구현할 수 있으리라 생각했다. 그렇게 구글링을 하던 도중 몇몇 비슷한 고민을 하고 있던 Stack Overflow글이나 블로그들을 보게 되었고 ItemTouchHelper를 이용해서 ViewHolder를 완전히 넘겨버리는 것은 가능하지만, partial-s..

Programming/Android 2022.01.03