안드로이드(28)
-
android 개발팀에서 husky로 git hook 공유하기
사건의 발단 현재 우리팀은 commit-msg title에 prefix로 브랜치 구분(feature / chore / hotfix…etc) 을 적용하고, commit-msg content에 티켓 넘버를 자동으로 붙이는 hook을 적용중이다. hook은 기본적으로 공유가 안 되어서, 굳이굳이 ignore를 풀고.. 브랜치를 변경할 때마다 복잡한 cli 명령어를 쓰고…(매번 까먹어서 확인해야한다) 암튼 이런 짓을 해야하는데 husky 라는 node 모듈을 쓰면 hook의 공유가 가능하다는 것을 알게되었다! 게다가 앞으로 추가될(지 모를) 노드 모듈들과도 npm install 이 명령어 하나만으로 묶일 수 있다는 것! 물론 웹 개발자들과 다르게.. 안드로이드는 노드 모듈을 사용할 일이 많지않아서 npm ins..
2024.04.19 -
Retrofit API Test
대부분 restful API를 사용하는 안드로이드 네이티브 개발자들이라면Retrofit을 쉽게 사용할것이다. 구현 자체는 어렵지 않으나… API 개발은 프로젝트에서 독립적인 영역이고,때문에 시간이 지남에 따라 API의 변경이라든지, 구조의 변경..뭐 이런게 있을 수 있다. 변경 정도면 양반이고….API가 없는 상태에서 개발을 시작하게 되는 경우도 드물지 않다…… 이 말은 즉슨, mock test가 필수적이라는것 MockWebServer 전제 조건Retrofit 기반이므로 미리 준비되어 있어야 한다req /response 객체 있어야 한다단위 테스트의 기본을 이해해야 한다 구현 방법dependency 추가testImplementation ("com.squareup.okhttp3:mockwebserver: ..
2024.01.03 -
메모리 누수를 해결하는 조금 더 자세한 방법
이전에 관련된 글을 작성한 적 있으므로, 중복된 항목에 대해서 이유를 자세하게 적지는 않겠다. Inner class와 익명 class밖의 클래스보다 inner class의 주기가 더 길면 생기는 문제암시적 참조를 주의할것class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) val button = findViewById(R.id.myButton) button.setOnClickListener { // This is an anonymous inner class // I..
2024.01.03 -
Android SSL Pinning
Pinningssl 인증서에 의존하는 서비스나 사이트의 보안을 향상시키기 위한 선택적 메커니즘피닝을 쓰면 암호화 id와 호스트를 연결할 수 이씀.pinning은 보안 연결을 설정할때 허용할 특정 id를 클라이언트에 알려줌 SSL Pinning호스트를 해당 인증서 또는 공개 키와 연결하는 프로세스호스트의 인증서 / 공개키를 알게되면, 이를 해당 호스트에 pin→ 사전에 정의된 공개키가 아니면 모두 거부! 이걸 왜 쓰나요?ca로 인증받는 방식에서 끝나게되면, 디바이스의 루트 ca를 해킹하게 되거나, android trust store에 등록하게 되면, 중간에서 중간자 공격이 가능해짐→ 이를 막기위함!중간자 공격으로부터 보호할 수 있고ca손상에 영향을 받지 않으며 민감 정보를 보호할 수 있다 SSL Pinni..
2023.12.15 -
Android의 모듈식 접근 방식
모듈의 종류App Module : 메인 모듈. ui, android 구성요소, 부트스트랩 코드 포함Feature Module : 각각 앱의 기능을 담당하는 모듈. 독립적으로 개발하고 테스트가 필요한 친구들을 이렇게 구분함Library Module : 네트워크 계층, 데이터베이스 서비스 또는 유틸리티 클래스와 같은 재사용 가능한 구성 요소Dynamic Feature Module(DFM) : 필요하지 않은 기능은 다운을 받지 않는 등, 선택적인 기능을 위한 동적 모듈 (ex : 앱 초기 설치 후 필요하지 않은 기능인 온보딩 모듈 등) 예시 앱 모듈:app기능 모듈: feature_login, feature_dashboard라이브러리 모듈: network,database동적 기능 모듈:feature_extra..
2023.12.15 -
MenuProvider
setHasOptionsMenu() , onCreateOptionsMenu(), onOptionsItemSelected() 는 Deprecated 되었다……………. 그렇다면 대체제는 무엇일까? MenuProvider4개의 메소드를 포함한 인터페이스이다 onCreateMenu : menu를 inflate하는 부분onMenuItemSelected : option메뉴를 클릭할 때 발생하는 부분onPrepareMenu : menu item을 customizing하는 부분. visibility나 menuItem의 customize를 할 수 있다onMenuClosed : 메뉴 닫히면 발생하는 부분 MenuHostComponentActivity, AppCompatActivity에 implement된 인터페이스. me..
2023.12.15