APK 빌드와 디바이스 연결
APK 빌드 과정, 디바이스 연결에 대해 알아보자.
디바이스와 연결하여 테스트 할 때 어떤 동작을 하는지 알아보자.
빌드
빌드란?
Android에서의 빌드는 개발자가 소스 코드를 작성한 후 앱 설치 파일
APK
를 만들기까지의 실행 과정을 의미한다.
Android는 기본적으로 Linux 커널 위에 여러 소프트웨어 스택이 쌓인 형태로 Linux의 빌드와 동일하다고 생각하면 된다.
- Linux에서의 빌드는 소스 코드를 기계어로 컴파일 한 후 사용되는 라이브러리와의
Link
를 수행하여 실제 실행 파일로 만드는 과정을 의미한다.
빌드 도구
빌드 도구는 외부 라이브러리 추가 및 업데이트 등의 설정 시간을 단축시킨다. 또한 테스트 실행 및 호환성 체크까지 진행한다.
Android에서 사용되는 빌드 도구는 maven
, gradle
등이 있으며 구글에서는 gradle
의 사용을 권장하고 있다.
gradle
내부의 빌드 스크립트를 작성하여
- 앱의 의존성
- 라이브러리
- 리소스 파일
- 빌드 설정
등을 진행한다.
빌드 진행
빌드 프로세스는
gradle
빌드 도구가 수행한다. 빌드 프로세스는 앱의 소스 코드와 별도 스크립트를 결합하여APK
파일을 생성한다.
- 코틀린 컴파일러는
.kt
파일/ 자바 컴파일러는.java
파일을.class
바이트코드파일로 변환한다.가상 머신(Virtual Machine)에서 실행되기 위한 코드다. 바이트코드는 소스 코드와 기계어(머신 코드)의 중간 형태로, 직접 실행 가능한 바이너리 코드보다 더 추상화된 형태를 가지고 있다.
Android SDK
의dx
도구를 사용하여.class
파일들을.dex
파일로 변환한다.dx
: Android SDK에 포함된 유틸리티로, Java 바이트코드 파일(.class 파일)을 Dalvik 바이트코드 파일(.dex 파일)로 변환하는 역할을 한다.dex
: dex(Dalvik Executable 파일)은 Android 운영체제에서 실행하기 위한 바이트코드 파일이다. Dalvik 또는 ART 가상 머신에서 실행된다.
- Dalvik 또는 ART에서 효율적으로 메모리를 관리
- 여러 .class 파일의 내용을 포함하여, 애플리케이션의 로딩 시간을 단축
- 실행 선능을 향상시키기 위해 다양한 최적화 적용
-
Android 리소스 패키징 도구(
aapt(Android Asset Packaging Tool)
)와gradle
사용하여 리소스 파일 및 외부 라이브러리 모듈을.dex
파일과 함께 APK 파일로 패키징합니다. APK
파일은 서명되어야 Android 디바이스에서 실행될 수 있다.APK
파일에 서명하기 위해서는 디지털 인증서를 사용해야 한다.APK
파일에 서명하는 작업은 빌드 과정에서gradle
에 설정된 값에 따라 자동으로 수행한다.
이렇게 서명된 APK
가 만들어질 수 있다.
APK 설치 및 실행
- 애플리케이션
- 애플리케이션 : 사용자가 설치하고 실행하는 앱
- 앱 실행 : 사용자가 앱을 실행하는 단계
- 애플리케이션 프레임워크
- 애플리케이션이 동작하기 위해 필요한 기본 서비스와 클래스들이 포함된 계층. 개발자는 이 계층을 통해 시스템 자원과 서비스를 활용한다.
- 라이브러리 및 Android 런타임
- 라이브러리 : 애플리케이션이 동작하기 위해 필요한 기본 서비스와 클래스들이 포함된 계층. 개발자는 이 계층을 통해 시스템 자원과 서비스를 활용한다.
- Android 런타임 : ART(Android Runtime)와 Dalvik 가상 머신이 포함되어 있다. 이 런타임 환경은 앱이 실행되는 동안 바이트코드를 실행할 수 있게 해준다.
- 하드웨어 추상화 계층 (HAL)
- 하드웨어와 소프트웨어 간의 인터페이스를 제공한다. HAL을 통해 Android 시스템이 다양한 하드웨어 기능을 제어할 수 있다.
- 리눅스 운영체제 (커널)
- Android의 기본 운영체제. 리눅스 커널은 메모리 관리, 프로세스 관리, 네트워크 스택, 드라이버 등 기본적인 시스템 기능을 제공한다.
- 하드웨어
- Android 기기의 물리적인 구성 요소. CPU, GPU, 메모리, 센서 등 다양한 하드웨어가 포함된다.
- APK와 실행파일
- 설치 파일(APK) : Android 애플리케이션 패키지 파일로, 앱을 배포하고 설치하기 위한 파일 형식이다.
- AOT (Ahead-Of-Time) : 설치 시점에 APK를 실행 파일로 변환하는 컴파일 방법이다. 이 방식은 애플리케이션이 실행될 때 성능을 향상시킨다.
- JIT(Just-In-Time) : 실행 시점에 바이트코드를 기계어로 변환하는 컴파일 방법다. 이 방식은 애플리케이션의 실행 속도를 최적화한다.
- 실행파일 : APK 파일이 AOT 또는 JIT 컴파일을 통해 변환된 파일로, 실제로 Android 기기에서 실행되는 파일이다.
설치된 APK
는 안드로이드 런타임과정을 따라 초기 JIT
방식을 활용하여 앱을 설치한 후, 이후 자주 사용하는 앱을 AOT
방식을 활용하여 컴파일하는 방식으로 진행된다.
스마트폰과 연결 (USB)
-
PC에 USB로 스마트폰과 연결한다.
-
스마트폰 설정 메뉴에서
빌드 번호
를 검색한다.
- 빌드번호를 연속으로 클릭
- 설정에 개발자 옵션이 추가되고, 개발자 옵션에서
USB 디버깅
을 활성화
- flutter doctor 명령을 입력하면 연결된 장치 갯수 표시됨
- 안드로이드 스튜디오에서 연결한 기기를 선택 후 실행버튼 클릭
- 실제 기기에서 플러터 데모 앱 실행 완료
워치와 연결
- 워치 개발자 옵션 활성화