Flutter - 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 명령을 입력하면 연결된 장치 갯수 표시됨
- 안드로이드 스튜디오에서 연결한 기기를 선택 후 실행버튼 클릭
- 실제 기기에서 플러터 데모 앱 실행 완료
워치와 연결
- 워치 개발자 옵션 활성화
Comments powered by Disqus.