공개 운영체제인 리눅스 기반
자바나 코틀린 사용
안드로이드 운영체제의 주요 부분과 라이브러리, 구글에서 만든 앱 등의 코드는 대부분 공개
안드로이드 스마트폰은 구글뿐 아니라 여러 제조업체에서 생산가능
플레이 스토어뿐 아니라 다양한 방법으로 배포 가능
모든 응용 프로그램이 평등하다는 사상을 바탕으로, 모바일에 기본으로 탑재된 앱과 개발자가 만든 앱이 똑같은 환경에서 똑같은 API이용
자바는 개발자가 컴파일하면 클래스 파일이 만들어져 자바 가상 머신에서 실행되지만 안드로이드는 DEX 파일로 컴파일 함 그리고 DEX 파일을 해석하는 ART에서 실행
아이폰은 애플에서만 제작 가능하지만 안드로이드폰은 구글, 삼성, 화웨이 등 다양한 제조업체에서 만들 수 있어서 개발자는 몇 가지 더 신경 써야함. ex)크기, 각 핸드폰마다 제대로 동작하는지 점검
안드로이드 버전이 오르면서 새로운 기능이 추가되거나 기존 API가 변경, 제거 등 앱 개발에 영향을 미쳐 개발자는 변경된 사항을 파악해 앱에 적용해야 함. 새로 추가된 API를 적용하지 않으면 새 버전을 탑재한 폰에서 앱이 동작하지 않을 수 있음
컴포넌트 : 정의하면 애플리케이션의 구성요소로 애플리케이션이 아니라 애플리케이션을 구성하는 단위이다. 안드로이드에서는 클래스로 컴포넌트를 개발, 즉 하나의 클래스가 하나의 컴포넌트가 된다.
하지만 모든 클래스가 컴포넌트는 아닌데 클래스는 크게 컴포넌트 클래스와 일반 클래스로 구분한다. 둘 다 개발자가 만든 클래스지만 런타임 때 생명주기를 누가 관리하는가에 따라 차이가 있다. 앱이 실행될 때 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자 코드에서 한다면 일반 클래스이다. but 생명주기를 안드로이드 시스템에서 관리한다면 컴포넌트 클래스이다.
액티비티 : 화면을 구성하는 컴포넌트로 앱이 실행되면 액티비티에서 출력한 내용이 안드로이드폰에 나옴
서비스 : 백그라운드 작업을 하는 컴포넌트로 화면과 상관없이 백그라운드에서 장시간 실행하는 업무 당담
콘텐츠 프로바이더 : 앱의 데이터를 공유하는 컴포넌트로 예시로 카톡 프로필 변경할 때 갤러리 앱의 사진 이용 가능
브로드캐스트 리시버 : 시스템 이벤트가 발생할 때 실행되는 컴포넌트로 예시로 부팅완료, 배터리 방전 같은 상황
4가지 컴포넌트를 구분하는 방법은 개발자가 클래스 만들 때 지정된 클래스를 상속받아야 하는데 이 상위 클래스를 보고 구분할 수 있다.
컴포넌트는 앱 안에서 독립된 실행 단위이기 때문에 컴포넌트끼리 서로 종속되지 않아 코드 결합이 발생하지 않는다. 때문에 앱 실행 시점이 다양할 수 있다. 따라서 안드로이드 앱에는 메인 함수 개념이 없다고 봐도 무방하다. 또한 애플리케이션 라이브러리를 사용할 수 있다. ex)카톡에서 카메라 앱을 실행해 사진을 찍은 뒤 전송한다. 리소스를 활용한 개발도 특징중 하나인데 리소스란 코드에서 정적인 값을 분리한 것으로 코드가 짧아져 개발 생산성과 유지,보수성이 좋아진다.
그래들 빌드 설정 파일
그래들은 안드로이드의 빌드 도구로 앱을 빌드하는데 필요한 설정을 이 파일에 등록한다. 2개가 있는데 하나는 프로젝트 수준이며 하나는 모듈 수준이다. 이 안에는 자동으로 설정이 되어 있는데 이 값을 수정하거나 새로 추가하면서 빌드 환경을 설정한다.
빌드 설정으로는
컴파일 버전 설정, 앱의 식별자 설정, SDK버전 설정, 앱의 버전 설정, 컴파일 옵션, 라이브러리 설정등이 있다.
메인 환경 파일(AndroidManifest.xml)은 안드로이드 앱의 메인 환경 파일이다. 거기에 있는 는 매니페스트 파일의 루트 태그이며 태그는 앱 전체를 대상으로 하는 설정이다. XML의 속성값이 @로 시작하면 리소스를 의미한다. 여기서 액티비티 컴포넌트는 태그, 서비스는 태그, 브로드캐스트 리시버는 태그, 콘텐츠 프로바이더는 태그로 등록한다. 컴포넌트 하나당 태그 하나로 등록해야 한다.
리소스 폴더는 앱의 리소스를 등록하는 목적으로 사용한다.
drawable : 이미지 리소스, layout : UI구성에 필요한 XML리소스, mipmap : 앱 아이콘 이미지, values : 문자열 등의 값으로 이용되는 리소스
res폴더 아래에 리소스를 만들면 자동으로 R.java 파일에 상수 변수로 리소스가 등록되며 코드에서는 이 상수 변수로 리소스를 이용한다. 리소스 파일명은 R.java 파일에 변수명으로 사용되므로 자바의 이름 규칙에 어긋나는 파일명은 정의할 수 없다. ex) 숫자로 시작하거나, 영어 대문자 사용 불가
코틀린과 자바는 다른 언어이지만 코틀린 컴파일러가 .kt파일을 컴파일하면 자바 바이트코드가 만들어져 JVM위에서 돌아갈 수 있기 때문에 자바를 대체할 목적으로 만든 언어라 볼 수 있다.