Android 16

Dagger란? -dagger 시작

Dagger2 란 무엇일까? Dagger는 자바와 안드로이드에서 의존성 주입을 구현하기 위해 사용하는 프레임 워크 입니다. 의존성 주입(Dependency Injection)이란? DI는 Dependency Injection의 약자로 의존성 주입을 의미합니다. 구성요소간의 의존 관계가 내부가 아닌 외부를 통해 정의되게 하는 디자인 패턴 중의 하나입니다. 의존성 주입의 목적은 객체를 생성하고 사용하는 관심사를 분리하는 것입니다. 위에 그림과 같이 내부가 아닌 외부에서 객체를 생성해서 주입하는 것을 의미합니다. 의존성 주입은 다음과 같은 장점이 있습니다. 코드의 재사용 리팩토링 쉬움 테스트 쉬움 보일러플레이트 코드 감소 의존성을 주입할수 있는 방법은 여러가지가 있습니다. * 직접 의존성 주입하기 : 작은 프..

Android 2020.04.21

안드로이드Q 개인정보 보호정책 변경사항

안드로이드 Q 버전부터는 더이상 사용자가 재설정할 수 없는 디바이스 식별자를 제공하지 않습니다. 권한을 가진 앱은 READ_PRIVILEGED_PHONE_STATE 권한을 가져야하나 Google Play 스토어에 등록된 앱은 해당 권한을 선언할수 없습니다. 즉, 일반적인 앱들은 접근이 불가능합니다. 기존에 사용되었던 값들은 아래와 같은 값들을 반환하게 됩니다. TelephonyManager getDeviceId() - null getImei() - null getMeid() - null Build getSerial() - unknown SERIAL - unknown WifiInfo getMacAddress() - 02:00:00:00:00:00 권장 사항 https://developer.android.c..

Android 2020.01.06

[Android] Fake gps 앱 및 모의위치 탐지

앱에서 네트워크 위치 및 gps 위치가 아닌 모의 위치를 사용하는 것을 탐지하려면 아래와 같이 작성 하면 됩니다. 1. 현재 기기에 MockSetting 옵션이 ON 인지를 검사하여 탐지 하는 방법 12345678910111213public static boolean isMockSettingsON(Context context){ boolean isMockLocation=false; try{ if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ AppOpsManager opsManager=(AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE); isMockLocation=(opsManager.checkOp(Ap..

Android 2019.07.02

[Android]Retrofit을 이용한 apk 파일 다운로드 및 설치

개발 도중 플레이스토어에 올라가있지 않은 앱을 업데이트 하기위하여 앱에서 노티를 띄워 apk파일을 받아 설치하는 것을 구현하였습니다. 백그라운드에서 다운로드를 하고 notification에 progress를 업데이트 하기위해 아래와 같은 코드를 작성해야합니다. 1. Project Setup build.gradle에 retrofit의존성을 추가해줍니다. 1 implementation 'com.squareup.retrofit2:retrofit:2.5.0' Manifest에 아래와 같은 권한을 설정합니다. 1 2 3 4 5 6 7 또한 Android 7.0(Nougat / API 24)부터 Intent로 URI 파일 경로 전송시 "file://" 노출되어 있으면 FileUriExposedException 오류..

Android 2019.06.26

FileUriExposedException 오류 File Provider 로 해결

Android 7.0 이상부터 파일공유 정책이 변경되었습니다. Android 7.0 이상에서 File 경로를 Uri로 변경하고자 할 경우 아래와 같은 오류를 맞이하게 됩니다. Android 7.0 이상에서는 앱 외부에서 file://URI의 노출을 금지하는 StricMode API 정책을 적용합니다. ㅠㅏ일 URI를 포함하는 인텐트가 앱을 떠나면 FileUriExposedException 예외와 함께 오류가 발생합니다. 애플리케이션 간에 파일을 공유하려면 content://URI를 보내고 이 URI에 대해 임시 액세스 권한을 부여해야 합니다. 이 권한을 가장 쉽게 부여하는 방법은 FileProvider 클래스를 사용하는 방법입니다. res/xml/file_paths.xml 생성 AndroidManifes..

Android 2019.06.25

안드로이드 4대 컴포넌트란 무엇인가? -Service

서비스(Service)란? UI없이 백그라운드에서 실행되는 기능을 말합니다. 예를 들면 노래를 켜고 웹 서핑을 하는 상황이 있습니다. 우리가 음악을 듣는 어플을 사용할 때 보통 어플에 들어가 노래를 켜고 다른 화면으로 가거나 화면을 끄거나 다른 어플리케이션을 사용합니다. 그럼에도 불구하고 노래를 들을 수 있는건 백그라운드에서 노래를 틀어주는 작업을 수행하고 있기 때문입니다. 하지만 이러한 작업을 서비스를 사용하지 않고 별도의 스레드를 생성해 백그라운드 작업을 하면 문제가 발생합니다. 쓰레드로 백그라운드 작업을 하다가 앱에서 back 키를 눌러 액티비티를 모두 종료할 시 앱 프로세스의 우선순위가 낮아져 LMK(low memory killer)가 프로세스를 강제로 종료 할 수 있습니다. 이 때 쓰레드도 종료..

Android 2019.03.30

[Android] Context 란?

Context의 정의 Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. Application 환경에 대한 전역 정보를 접근하기 위한 인터페이스.추상 클래스이며 실..

Android 2019.01.09

안드로이드 4대 컴포넌트란 무엇인가? - Activity

개발자가 되기위한 첫 걸음 Activity(액티비티)란?액티비티는 UI 화면을 담당하는 컴포넌트이다. 안드로이드 액티비티가 화면에 UI를 표시하는 역할을 수행한다고 해서 자체적인 그리기 기능이 실행되어 화면을 그리는 것이 아니다. VIew 또는 ViewGroup의 다양한 조합을 화면에 배치함으로써, UI를 표시하는 것입니다. 이러한 관점에서 보면 액티비티는 화면에 UI를 표시하기 위한 틀이라는 개념이 될 수 있습니다. 따라서 하나의 UI는 하나의 Activity라는 말이 됩니다. 하나의 애플리케이션은 하나 이상의 액티비티가 느슨하게 서로 묶여 있는 형태로 구성됩니다. 각각의 액티비티는 여러 가지 작업을 수행하기 위해 또 다른 액티비티를 시작할 수 있습니다. 새로운 액티비티가 시작될 때마다 이전 액티비티는..

Android 2019.01.09

안드로이드 4대 컴포넌트란 무엇인가?

개발자가 되기위한 첫 걸음 안드로이드 4대 컴포넌트안드로이드의 4대 컴포넌트란?안드로이드의 주요 4대 컴포넌트는 액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(Broadcast Receiver), 콘텐트 프로바이더(Content Provider)를 말합니다. 각 컴포넌트들은 하나의 독립된 형태로 존재하며, 정해진 역할을 수행합니다. 또한 각 컴포넌트들은 인텐트(Intent)라는 일종의 메시지 객체를 사용하여 상호 통신을 합니다. 이들 중에서 가장 많이 사용하는 것은 액티비티이지만 나머지 컴포넌트도 매우 중요하므로 어떤 기능을 하는지 알아둬야 합니다. 다음 그림은 안드로이드 애플리케이션을 구성하는 안드로이드 4대 컴포넌트를 그림으로 나타낸 것입니다. 당연하겠지만 이 중에서 가장 ..

Android 2019.01.09

Parcelable vs Serializable

안드로이드 앱을 개발할 때 종종 하나의 액티비티 에서 다른 액티비티 로 데이터를 전달하기 위해 인텐트에 전달할 데이터를 추가 합니다.복잡한 클래스의 객체를 이동하려는 경우 Serializable 또는 Parcelable 를 사용하여 직렬화 하여 인텐트에 추가 해야 합니다. Serializable 이란 무엇인가?serial(직렬의) + ~able(~가능한) Serializable Serializable 은 Android SDK 가 아닌 표준 Java 의 인터페이스 입니다. 이 인터페이스를 구현한 클래스의 객체는 이제 한 액티비티 에서 다른 액티비티 로 이동할 준비가 됩니다. 다음 코드에서 이 인터페이스를 사용하는 것이 얼마나 간단한 지 알 수 있습니다. 12345678910111213141516171819..

Android 2019.01.09