안드로이드 앱은 Manifest file, App Resource, App Component로 구성된다.
Manifest file과 App Resource는 xml을 이용하고 App Component는 코틀린을 이용해 작성한다.
APK
APK는 Android Application Package의 약자로 apk 파일에는 안드로이드 앱의 모든 콘텐츠가 들어있다.
Manifest file
apk 안에 있는 "사용설명서" 같은 개념으로 안드로이드 시스템이 실행된 앱의 Manifest file을 읽고 적혀있는 대로 동작한다.
Activity
화면 정보가 담겨있다. 안드로이드 앱에서 activity는 화면 또는 페이지라고 생각하면 된다.
Layout
액티비티에서 표시해야하는 UI의 생김새가 담겨있다. App Resource 중 하나이다.
App Component
안드로이드 앱 필수 기본 구성요소로 앱에 표시해야하는 정보와 앱의 동작이 담겨 있다. 액티비티는 앱 컴포넌트 중 하나이다.
xml은 크게 element와 attribute로 구성된다.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
위의 코드에서 TextView는 element이며, attribute로는 layout_width, layout_height, text등이 있다.
한마디로 Attributes는 element가 어떤 특성을 갖는지 표시하는 값이다.
MainActivity에서 새로운 액티비티를 띄우기 위해서는 아래와 같은 코드를 사용한다.
var intent = Intent(this, 액티비티이름::class.java)
startActivity(intent)
Intent는 개별 앱 컴포넌트 간에 런타임 바인딩을 제공하는 객체인데 쉽게 말해서 어떤 작업을 하겠다라는 의도를 표현하는 용도이다. 주로 다른 액티비티를 시작할 때 사용한다.
Intent(this, 액티비티이름::class.java)
this는 현재 코드가 적혀있는 곳을 의미한다. 인텐트를 생성할때 첫번째 값은 출발지 액티비티, 두번째 값은 도착지 액티비티를 적어주면 된다. 여기서 this를 명확하기 명시하기 위해서
this@출발지액티비티이름 으로 작성도 가능하다.
var button = view as Button
여기서 as는 코틀린에서 타입을 변경해서 사용하겠다라는 문법이다. 즉 타입 캐스팅이다.
앱 개발 중 웹뷰를 사용하는 일이 있을때 인터넷 연결이 가능하게 하려면 AndroidManifest.xml 파일에 아래와 같이 코드 2줄을 추가해야한다.
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...
>
<activity ...>
...
</application>
</manifest>
파이어베이스 애널리틱스를 사용하면 사용자들이 언제, 어떻게 앱을 사용하는지 알 수 있다.
애널리틱스뿐만 아니라 크래시리틱스, 클라우드 메시징, 동적링크 같은 기능들도 제공한다.
AAB는 앱의 모든 컴파일된 코드와 리소스를 ㅗㅍ함하고 APK 생성 및 서명을 구글 플레이에 맡기는 방식이다. 구글 플레이에서 자동으로 기기별로 최적화된 apk를 생성해서 설치를 지원하고 보안 수준도 좋기때문에 apk의 다음 세대로 볼 수 있다. AAB는 구글플레이에서만 설치할 수 있는 방식이라서 AAB파일을 개인적으로 전달해도 설치가 불가능하다.
(2021년 8월 부터 구글 플레이에 앱을 업로드할 때는 APK 형식은 사용이 불가능하고 AAB만 사용이 가능하다.)