Android

Android

Android Talkback Ordinal Number(ScreenReader 서수 읽기)

이번 기능은 상당히 어이없는 해결책을 가져왔다.(그런걸 왜 가져왔냐..?고 하면 할 말은 없다 ㅋㅋㅋ😂) 문제의 시작요구사항은 이렇다. RecyclerView 각 아이템에 포커스를 주면 해당 아이템이 총 몇 개 중 몇번 째인지 읽어주는 것이었다. 정말 간단한 기능이다. 나는 onBindViewHolder에서 setContentDescription을 통해 해당 문자열을 설정해주었다. 그런데 스크린리더가 읽는 텍스트는 약간 달랐다.예를 들면, 총 10개 중 일번 째라고 읽는 것이 아니겠는가? 이상한 점을 찾았을 지 모르겠다. 첫번째, 두번째, 세번째가 아닌 일번 째, 이번 째, 삼번 째와 같은 형식으로 읽어버리는 것이었다. 문제 발생 지점나는 나름 수동으로 문자열 리터럴을 만들어 설정해주었는데 여기서 정말..

Android

Android Room 오적용기(misapplied)

먼저 이번 글에서는 코드가 등장하지 않는다. 이번 오적용기가 나에겐 나름 Room을 제대로 사용해본 경험이라 작성해둔 코드가 아쉽기도 하다. 하지만, 언젠가는 갈아엎어야 될 코드가 되어버렸다. 왜 그렇게 됐을까? 현재 상황 파악의 중요성내가 연동해야할 백엔드는 어떤 상황인가?를 너무 간과했다. 대부분 앱 서비스는 회사에서 서버를 두고 앱이 해당 서버와 통신하게 된다. 그리고 해당 백엔드에서 가져온 데이터로 로컬 DB를 구성해 앱에서 사용한다. 하지만, 나의 경우는 각각 지역의 로컬 서버가 존재하고해당 서버에서 DB 파일을 다운로드받아 Room으로 사용하는 것이었다. 더욱 심화되는 문제와 해결 불가능한 상황까지각 로컬 서버는 모두 같은 Table 버전을 갖고 있을 것이라 생각했었다. 하지만 로컬 서버들은 ..

Android

Android AES-128 Encryption with Random IV in Java

사실 이 문제는 회사에 들어와 가장 먼저 고민했던 문제였다. 로그인 시, 아이디와 패스워드를 암호화해 전송해야 했기 때문이다. 전에 Google Play Console 여기저기를 누르다보니 SHA 방식의 암호화를 지나치듯 본 기억이 있었다. 짧은 AES 방식 소개하지만 SHA는 복호화할 수 없는 방식이기에 AES 방식을 사용하기로 했다. AES 암호화 방식은 key 값의 길이에 따라 바뀌는데 16바이트이면 AES-128, 32바이트이면 AES-256이 된다. 대신 IV(Initialization Vector)의 길이는 AES-128, AES-256 둘 모두 16바이트로 동일하다. Random IV를 적용해보기여기서 재밌는 기능을 하나 추가해보자. 바로 IV를 매번 random하게 생성하는 것이다. 그리고..

Android

Android Progressbar not spinning(not animated)

오늘은 저번 글에 이어 저사양 디바이스를 타겟팅해 앱을 개발하던 중 발견하게 된 증상을 공유해본다.(갤럭시와 같은 휴대폰 중 저사양 디바이스가 아닌 안드로이드 TV용 박스를 가지고 개발했다.) 나는 이 증상을 처음 보고 적잖이 당황했었다. 뭐랄까.. 지금까지 알던 세상이 부정당한 느낌..? 항상 되던 것이 안되니 말이다. 원인이런 끔찍한 현상이 생긴 원인이 뭘까? 바로 Animation 길이 배율 설정(Animator duration scale)이다. 평소에는 신경도 안 쓸 설정 메뉴이지만, 저사양 기기에서는 성능을 올리기 위해서인지 꺼져 있었다. 이거... 어디 있는 메뉴일까? 정답은 개발자 옵션에 있다. 기본 설정이 1x로 되어있는 디바이스가 대부분일텐데 내가 개발했던 녀석은 사용 안함이 기본이었다...

Android

Android White Screen Before Splash Screen Resolved

이번 글은 저사양 기기를 타겟팅하여 개발하던중 발견하게된 이슈이다.문제의 시작권한 처리를 위해 회사 로고가 중앙에 들어간 스플래시 화면을 추가했다.해당 앱은 기기 설정에 상관없이 다크 테마 색상이 적용된 것처럼 color resource가 설정되어 있었다.(스플래시 화면도 마찬가지이다.)그런데 앱을 시작하면 흰색 화면이 보이고 나서 스플래시 화면이 보였다.문제 해결가장 먼저 해결법을 찾게된 글은 아래 링크였다.https://github.com/crazycodeboy/react-native-splash-screen/issues/338 White screen before splash screen · Issue #338 · crazycodeboy/react-native-splash-screenAfter sev..

Android

Android APK Decompile(Proguard 적용 확인)

필요해진 배경“요즘 다 앱 번들(.aab)로 배포하고 테스터 초대하지 않나?”라고 생각할 수 있지만 나는 이번에 APK 형태로 업체에 설치파일로만 배포하는 상황이 생겼다.그래서 스플래시 화면에서 설치 비밀번호가 없으면 다음 화면으로 넘어가지 않도록 했고이와 더불어 멋대로 Decompile 되지 않도록 Proguard 난독화를 사용했다.물론 난독화 설정을 켜고 릴리즈 빌드를 하면 적용이 될 거라 생각했지만 혹시 모르니 확인하는 과정을 거쳤다.이제 시작해보자.가장 먼저 내가 참고한 블로그 링크를 첨부한다.https://chelsea-kbj.tistory.com/9 [Mac] 안드로이드 APK 파일 Decompile 하기저는 주로 쇼핑몰 앱 개발 및 운영을 하는 아이폰/안드로이드 앱 개발자입니다. 요즘 보안에..

Android

Android UDP 통신해보기 in Kotlin

이번 기능은 사실 이전에 생각조차 해보지 않은 기능이었다. 기존 HTTP, TCP 기반 통신에 익숙해져 있었기 때문이다. 그리고 내가 연동해야할 센서는 0으로 1바이트를 보내면 지속적으로 특정값을 형식에 맞게 보내주는 녀석이었다. 그럼 바로 코드를 공유해보도록 하겠다. private fun fetchUdpData() = CoroutineScope(Dispatchers.Default).launch { println("started fetch") val socket = DatagramSocket() val address = InetAddress.getByName(someIp.split(":")[0]) val packet = DatagramPacket( "0".toByteArray(), "0".toByteAr..

Android

Android ListAdapter submitList not refreshing

문제의 발단 최근 프로젝트에서 요즘 많이 쓰이는 ListAdapter(feat.DiffUtil)을 사용해보게 되었다. 나는 멤버변수로 MutableList를 가지고 있었고, 해당 리스트를 add, remove로 수정하고 submitList의 파라미터로 전달했다. 그런데 RecyclerView가 새로고침되지 않았다. 발생 원인 ListAdapter에게 submitList로 리스트를 전달하면 ListAdapter 내부의 AsyncListDiffer 멤버변수의 submitList를 호출한다. 해당 메소드는 멤버로 이전에 전달받은 list를 가지고 있고, 기존 멤버변수와 전달받은 파라미터의 list를 비교한다. 만약 두 리스트가 같다면 함수를 리턴한다. (여기서 같다는 의미는 메모리 주소가 같다는 것을 의미한다..

Android

Android Selector 사용 시 주의사항

글을 쓰게 된 배경 MaterialSwitch 사용 중 track과 thumb 색상을 앱 테마에 맞춰야했다. 더 정확히 말하면 trackTint와 trackThumb를 바꿔주어야 했고 이 때 Android resource color directory에 selector를 사용해야 했다. 처음에는 위와 같이 selector를 정의했는데 trackTint가 적용되지 않은 것처럼 보였다. 당시 추측으로는 몇 가지 상태값이 빠져있어서 원하는대로 동작하지 않는다고 생각해 상태값을 모두 추가해주었는데도 변함이 없었다. 그렇게 찾게된 공식문서에서 내가 만든 selector는 충실히 본인의 역할을 하고 있었다는 사실을 깨닫게 되었다. 문제의 원인 https://developer.android.com/guide/topic..

Android

Android Change TextField Cursor Color

이번에는 material 라이브러리를 사용하면서 겪었던 커서 색상 변경에 관련한 에피소드를 하나 풀어보려 한다. 일단 내가 현재 사용하는 버전은 1.9.0 버전이다. Material EditText 사용법 흔히 사용하는 EditText를 material 라이브러리에선 TextInputEditText로 대체하는데 이를 TextInputLayout으로 감싸서 사용한다. Theme 설정하기 나의 경우에는 boxStrokeColor는 xml에서 속성으로 설정이 가능했지만 cursor 색상을 설정할 수가 없었다. (물론, 코드 상으로도 말이다.) 그럼 cursor color는 어디서 바꿔? 답만 말하자면 colorControlActivated 속성의 색상을 바꿔주어야 한다. material에는 여러 속성의 색상이..

BonusTrack02.dev
'Android' 카테고리의 글 목록 (2 Page)