Android
-
Android) 안드로이드 고유 식별자 뭘로할까?Android 2021. 6. 7. 23:51
앱 설치 시 사용자 디바이스의 행동을 추적하기 위한 Device Unique Key를 생성하는 여러 방법들을 알아보려고 합니다. 1. Secure Android ID val androidId = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID) 디바이스가 최초 부팅 시에 생성됨 초기화 전까지는 삭제 되지 않고 저장되어 있어 디바이스 식별에 유용 기기를 초기화하면 값이 바뀜 READ_PHONE_STATE 권한 필요 2. Serial Number android.os.Build.SERIAL로부터 값을 받아 올 수 있음 안드로이드 2.3부터 사용 가능 전화 기능이 없는 디바이스의 경우 유일한 값을 반환하지만, 전화 기능이..
-
Android) 앱 서명 키 안전하게 보안하는 방법Android 2021. 5. 30. 13:15
이전 포스팅에서 release 모드에서 앱을 테스트해보는 방법을 알아봤습니다. signingConfigs { release { storeFile file('keystore 경로') storePassword '비밀번호' keyAlias 'keyAlias 이름' keyPassword '비밀번호' } } 기본 방법은 위와 같은데, 이처럼 keystore 정보가 노출된 채로 Git이나 외부에 공유된다면 악용될 가능성이 있거나 보안상 좋지 않겠죠? 그래서 별도의 파일을 생성해서 keystore 정보를 관리하는 것을 권장하고 있습니다. 1. 프로젝트의 루트 디렉토리에 keystore.properties 파일을 생성합니다. 2. keystore.properties 파일 안에 keystore의 정보를 넣어줍니다. //..
-
Android) logcat의 ResourceType Warning 지우는 방법Android 2021. 5. 26. 12:49
진행하던 프로젝트의 배포 주기가 다가옴에 따라 릴리즈를 하고 테스트를 하고 있었는데, 언제부턴가 위와 같은 warning들이 무수히 많이 logcat에 노출되었습니다. Solution Android Studio의 Run -> Edit Configuration Installation Options -> Deploy를 "Default APK"로 바꿔줍니다. 저 같은 경우는 Deploy가 app bundle로 설정되어 있어 있었고, 위의 방법으로 해결할 수 있었습니다.
-
Android) Firebase Analytics 알아보기Android 2021. 5. 24. 19:13
다양한 analytics SDK(Google Analytics, Firebase Analytics, Yahoo Flurry, Facebook)가 분석을 위해 제공되고 있는데, 그중 하나인 Firebase Analytics에 대해 글을 작성해보겠습니다. Firebase Analytics 기본적으로 무료이고 모바일 중심. Big Query는 유료. 퍼넬 분석 : 퍼넬 분석은 깔때기 분석으로 사용자 가입에서부터 최종 목표인 주문 결제까지 이루도록 단계별로 이탈률을 분석하여 서비스를 개선하고, 이탈률을 줄이는 데 사용. 코호트 분석 : 데이터를 집단으로 나누어서 분석하는 방법으로 일일 사용자 데이터(DAU: Daily Active User) 그래프가 있을 때, 일일 사용자가 연령별로 어떻게 분포가 되는지 등을 ..
-
Android) Debug 모드에서는 작동하는데 Release 모드에서 Crash 발생할때 (Debug, Release 차이점)Android 2021. 5. 23. 14:48
배포한 앱이 긴 심사기간을 거쳐 어제 출시가 되었습니다. 디버그 모드에서 테스트도 여러 번 해봤기 때문에 별 걱정 없이 기쁜 마음으로 앱을 설치하고 켜는 순간 엥? 키자마자 앱이 죽어버렸습니다.. 즉, 디버그 모드에서는 작동하지만, 릴리즈 모드에서는 앱이 죽는다.. 어제 하루종일 삽질한 내용들을 정리해보겠습니다. 디버그 모드 실행파일에 디버깅 정보를 삽입하여 언제든지 디버깅을 할 수 있도록 하며 Debug 서브 폴더에 실행파일을 만들어줌. 디버깅 정보가 들어가 있기 때문에 실행파일 상태를 확인할 수 있다. 디버그 빌드와 릴리즈 빌드에서 서로 실행 결과가 다른 경우 -> 특히 디버그 빌드에서는 괜찮은데 릴리즈 빌드에서만 오류가 발생하여 앱이 죽는 경우가 있는데, 이런 경우는 대부분 메모리가 깨진 경우 발생..
-
Android) Navigation을 사용해 startActivityForResult 구현하기Android 2021. 4. 21. 16:16
안드로이드에서 생성한 Activity로부터 결과를 받아서 호출한 Activity에서 사용하려면 startActivityForResult() 메소드를 사용해야 합니다. 새로 호출된 Activity에서 setResult()를 통해 돌려줄 결과를 저장하고 finish()로 Activity를 종료합니다. 이후 그 결과는 호출했던 Activity의 onActivityResult() 메소드를 통해 전달되게 됩니다. 그럼 Navigation 라이브러리를 사용하는 경우 어떻게 결과를 받아올 수 있을까요? 예를들어 위와 같은 nav_graph가 있습니다. 메인 화면(main_fragment)에서 프로필(profile_fragment) 화면으로 가기 위해서 로그인(login_fragment)을 통한 인증을 해야 이동할 수..
-
Android) Dagger Hilt - @ViewModelInject, @Assited, @ApplicationComponent is Deprecated(2.33-beta)Android 2021. 4. 18. 13:31
Dagger Hilt Dagger Hilt를 사용하여 의존성 주입을 할 때 다음과 같이 코드를 작성했습니다. // ViewModel class SkinViewModel @ViewModelInject constructor( private val skinRepository: SkinRepository, private val dispatchers: BaseProvider, @Assisted private val savedStateHandle: SavedStateHandle ) : ViewModel() { // Something() } // Module @Module @InstallIn(ActivityComponent::class) abstract class AnalyticsModule { @Binds abst..
-
Android) MediaPlayer 재생 지연 오류Android 2021. 4. 13. 17:22
어제 MediaRecorder에 관한 내용을 포스팅했었습니다. MediaRecorder를 이용해서 녹음을 완료했을 때, MediaPlayer를 이용해서 녹음 파일을 재생시키면 잠깐의 delay후에 재생이 되는 것을 확인할 수 있었습니다. 구글링을 열심히 해봤는데 제가 발견한 키워드는 SoundPool 그리고 MediaPlayer를 onCreate()가 아닌 onStart() 혹은 onResume()에서 재생해보는 것입니다. 특징을 조금 살펴보면 아래와 같다고 하네요. MediaPlayer는 상대적으로 음악과 같이 음원의 길이가 긴 것들을 한 번에 하나씩 재생하는데 용이한 구조 SoundPool은 반대로 게임의 효과음처럼 짧으면서 여러 개를 동시에 재생할 필요가 있는 것들을 다룰 때 유용 저는 1분까지의 ..