개발/AOS

    안드로이드 WorkManager

    안드로이드에서 백그라운드 작업을 다루기 위해 여러 선택지들이 있따. Firebase JobDispatcher, Job Scheduler, Alarm Manager, Broadcast Receiver 등이 있다. 하지만 AccessToken등을 리프레시 할 때는 앱이나 디바이스가 재시작 되어도, 태스크의 실행을 보장한다. 작업은 Worker 클래스를 통해서 정의한다. doWork() 메서드는 WorkManager에서 제공하는 백그라운드 스레드에서 비동기적으로 실행된다. doWork()에서 반환된 Result는 작업의 성공 여부를 알려주며 실패한 경우 WorkManager 서비스에 작업을 재시도해야 하는지 알려줍니다. Result.success(): 작업이 성공적으로 완료되었습니다. Result.failur..

    안드로이드 액티비티란?

    액티비티는 사용자에게 UI가 있는 화면을 제공하는 앱 컴포넌트이다. 화면에 출력되는 UI 구성의 가장 기본이 되는 요소애플리케이션 구성 요소로서, 일을 하기 위해 상호작용할 수 있는 화면을 제공하고 액티비티마다 창이 하나씩 주어져 이곳에 사용자 인터페이스를 끌어올 수 있다. 이 창은 일반적으로 화면을 가득 채우지만, 작은 창으로 만들어 다른 창 위에 띄울 수도 있다. onCreate(Bundle savedInstanceState) - 이 메서드는 액티비티 인스턴스가 최초로 생성될 때 호출되며, 대부분의 초기화 작업을 진행한다. 메서드의 매개변수(인자)는 동적 상태 정보를 포함할 수 있는 Bundle 객체가 전달된다. 그리고 동적 상태 정보는 직전에 생성되었다가 소멸된 동일한 액티비티의 인스턴스로부터 받으..

    안드로이드 Work Manager란

    현재 회사에서 안드로이드 클라이언트 단에서 OAuth2 JWT관리와, 네트워크 연결 관리 등을 개선해야할 일이 생겼다. 팀원들과 논의 결과 백그라운드에서 처리 하는 방향으로 결정 하였고, Work Manager를 공부하게 되었다. Google에서 2018년 안드로이드 릴리즈로 인해 복잡해진 백그라운드 처리를 해결하기 위해서 출시한 라이브러리이다. Work Manager를 이해하기 위해서는 먼저, 메모리와 기본 백그라운드 솔루션을 이해해야 한다. 1. 안드로이드 메모리 안드로이드가 처음 나왔을 때, 안드로이드 커널은 리눅스 커널을 기반으로 했다. 하지만, 안드로이드와 다른 모든 리눅스 커널 기반 시스템 주요 차이점은 안드로이드에서는 스왑 공간이라는 것이 없다. 리눅스의 스왑공간은 실제 메모리의 양이 가득차..

    안드로이드 프로가드 proguard란?

    프로가드의 필요성 : 1. 코드 난독화를 통해 디컴파일시 본인의 코드가 노출되는 것을 방지 할 수 있습니다. 2. 불필요한 메서드를 제거하여 멀티덱스를 피할 수 있습니다 - 멀티덱스란? 안드로이드 앱을 구성하는 코드는 컴파일 되어 덱스(dex) 파일로 만들어 집니다. 하나의 덱스(dex) 파일에는 최대 65536개의 메소드만 참조 할 수 있습니다. 만약 프로젝트의 코드가 65536개의 메소드를 초과하게 되면 덱스(dex)파일이 여러개가 생성됩니다. 그러면 멀티 덱스를 사용하여 컴파일 할 수 있지만, 빌드 과정에서 앱 내의 파일을 여러개의 덱스파일로 나누어야 하므로 빌드 속도가 느려지고 APK 의 용량이 커지게 됩니다. 가능하다면 프로가드를 설정해 주면 좋겠죠? 취약점 점검을 하면 주로 앱 위 변조(무결성..

    카카오 소셜로그인 Release APK 이슈 해결

    앱에서 카카오 소셜 로그인을 사용할 경우 release용, debug용 keystore가 따로 있기 때문에 각 keystore의 키 해시값을 넣어줘야 한다. 필자는 3개의 해시값을 넣어줬다. 1. 테스트용 APK 2. 릴리즈용 APK 3. 마켓 배포용 APK + 카카오 소셜로그인 API를 사용할 때 SHA1이 아닌 base64 인코딩된 형태의 키 해시를 넣어줘야 한다. SHA1키를 아래의 명령어를 통해 키 해시 값을 얻을 수 있다. echo (your SHA1 key) | xxd -r -p | openssl base64 예) echo A6:51:XX:E2:XX:C5:XX:DC:XX:93:XX:C9:XX:ED:XX:A7:XX:E1:XX:E6 | xxd -r -p | openssl base64

    리사이클러뷰가 NestedScrollView안에 있을 때 SmoothScrollToPosition이 동작 안할 경우 해결법

    해결책은 nestedscroll.smoothScrollTo(0,0) 여기에서 리사이클러뷰를 시작한 곳을 Y 위치로 지정해야 하기 때문에. 아래와 같이 두번째 매개변수에 헤당 코드를 넣어주면 된다. nestedScroll.smoothScrollTo (0, recycler.top )

    안드로이드 AWS Amplify + S3에 파일 업로드 Android uploads files with AWS Amplify + S3 (3/3) S3+앱 연동

    이제 S3와 앱만 연동하면 끝난다. 안드로이드 프로젝트에서 앱 레벨 그레들에 아래와 같이 추가한다. dependencies { ... implementation 'com.amplifyframework:aws-storage-s3:1.6.11' implementation 'com.amplifyframework:aws-auth-cognito:1.6.11' ... } 그리고 메니페스트에 관련 퍼미션을 추가해준다. 그리고 이전글에서 생성한 클래스에 Amplify.addPlugin(AWSCognitoAuthPlugin()) Amplify.addPlugin(AWSS3StoragePlugin()) 이 두줄을 추가해준다. (S3에 접근하기 위한 Conginito와 S3 Storage Plugin) class MyAmpl..

    안드로이드 AWS Amplify + S3에 파일 업로드 Android uploads files with AWS Amplify + S3 (2/3) S3버킷 생성

    이번 포스팅의 과정은 아래와 같다. 1. S3버킷 생성 2. AWS Cognito 생성 3. IAM 설정 안드로이드에서 Amplify SDK 세팅을 끝냈다면. S3 Console (s3.console.aws.amazon.com/s3/home?region=ap-northeast-2 에 들어가서 새 버킷을 만들어주자. (리전 선택은 자유~) 생성 방법은 매우 단순해서 생략 하도록 한다. AWS Cognito 설정하기 원래 AWS 를 연동하려면 AccessKey, SecretKey 로 접근해야 하지만 어디선가 보기에는 인증서가 앱에 탑재되므로 보안성이 낮아져, AWS 자체에서 제공하는 Cognito 서비스를 이용하여 인증 권한자를 추가하고, 이 정보를 앱에 탑재하는 방법을 사용한다. 아래 링크에서 Manage..

    안드로이드 AWS Amplify + S3에 파일 업로드 Android uploads files with AWS Amplify + S3 (1/3) 환경 세팅

    회사에서 안드로이드 클라이언트에서 S3에 파일을 업로드 기능을 구현했는데 Amplify 공식 문서가 매우 빈약하여 포스팅을 남겨본다. 크게 구현 과정은 아래와 같다. 1. 안드로이드 프로젝트에 Amplify SDK 세팅 2. S3 버킷 생성. 3. S3 버킷의 권한 설정. 4. S3 버킷과 안드로이드 프로젝트 연동. (공식문서에서 위 과정을 매끄럽게 설명하지 않고 있다;;) 아래와 같은 개발 환경이 필요하다. Node.js v10.x or later npm v5.x or later git v2.14.1 or later Android Studio version 4.0 or higher Android SDK API level 16 (Jelly Bean) or higher 터미널에서 npm을 통해 amplif..

    Android S3연동 하기(0) - S3란?

    AWS Amplify 스토리지 모듈은 퍼블릭, 보호 또는 프라이빗 스토리지 버킷에서 앱의 사용자 콘텐츠를 관리하기위한 간단한 메커니즘을 제공합니다. 스토리지 범주에는 다음에 대한 기본 지원이 제공됩니다. Amplify Storage 카테고리는 공개, 보호 또는 비공개 스토리지 버킷에서 앱의 사용자 콘텐츠를 관리하기위한 인터페이스를 제공합니다. 스토리지 범주에는 Amazon Simple Storage Service (S3)에 대한 기본 기본 지원이 제공됩니다. (단, Android API 레벨 16 (Android 4.1) 이상이어야만 한다.) Amplify란 ? AWS Amplify는 모바일 및 프런트 엔드 웹 개발자가 AWS에서 구동되는 안전하고 확장 가능한 풀 스택 애플리케이션을 개발하도록 지원하는 ..