라이브러리란?
라이브러리란 소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것이다. 라이브러리는 동작하는 완전한 프로그램이 아닌 특정 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어 형태로 존재하는 프로그램이다.
안드로이드 라이브러리
안드로이드 라이브러리는 구조적으로 안드로이드 앱 모듈과 동일하다.
안드로이드 라이브러리에는 소스코드, 리소스 파일, 안드로이드 manifest 등 앱을 빌드하는데 필요한 모든 것이 포함되어 있다.
하지만 이는 기기에서 실행되는 apk로 컴파일 되는 것이 아닌 안드로이드 앱 모듈의 종속 항목으로 사용할 수 있는 AAR로 컴파일 된다.
AAR파일은 다음과 같은 기능을 제공한다.
- 리소스와 manifest 파일이 포함되어 있을 수 있다. 이를 통해 kotlin / java 클래스 및 메서드 외에도 layout, drawble 같은 공유 리소스 번들로 구성할 수 있다.
- AAR 파일은 앱 모듈의 C/C++ 코드에서 사용할 C/C++ 라이브러리를 포함할 수 있다.
라이브러리를 만드는 목적
안드로이드에서 라이브러리를 사용하는 이유는 뭘까?
라이브러리 모듈은 다음과 같은 상황에 유용하다.
- 활동, 서비스, UI 레이아웃 등 일부 구성요소를 동일하게 사용하는 여러 앱을 빌드하는 경우
- 핵심 구성요소를 공유하는 여러 apk 변형(무료 or 유료버전)에 있는 앱을 빌드 하는 경우
이 두가지 모두 재사용하려는 파일을 라이브러리 모듈로 만들어 각 앱 모듈의 종속 항목으로 라이브러리를 추가 할 수 있다.
이를 이용하면 공통 기능들에 대해 코드 중복을 최소화하고 일관성을 유지할 수 있다. 또한 유지보수성을 높일 수 있다.
USB 탐지 / 디버깅 탐지 코드 라이브러리화
여러 앱에 usb 탐지, 디버깅 탐지 코드를 적용하기 위해서 이를 라이브러리화 하려고 한다.
라이브러리화 하게 되면 중복된 코드를 여러 프로젝트에 작성할 필요 없이 라이브러리를 추가하면되기 때문이다. 따라서 AAR을 생성하고자 한다.
안드로이드 라이브러리 생성
작성한 코드를 라이브러리로 만들기 위한 과정은 다음과 같다.
- 라이브러리 즉 aar로 생성 할 프로젝트 작성
- 프로젝트에서 aar 추출
- 다른 프로젝트에 aar (라이브러리) 적용
라이브러리 생성 코드 구현
- USB 탐지코드를 라이브러리화 하기 위해서 LibraryTest 프로젝트를 생성한다.
- 해당 라이브러리에서는 레이아웃과 관련된 사항을 담을 필요가 없기 때문에 No Activity를 선택하였다.
- 프로젝트 이름과 패키지 이름을 자유롭게 설정한다.
- 생성한 프로젝트에서 File → New → New Module 을 통해 새로운 모듈을 생성한다.
- New Module → Android Library를 선택한 후 자유롭게 Module의 이름을 설정한다.
- mylibrary 모듈이 새롭게 생성된 것을 볼 수 있다.
- 생성한 module > java > com.example.mylibrary 에 USB 탐지 클래스를 생성하고 코드를 작성한다.
프로젝트 AAR 추출
module내에 코드를 다 작성했다면 Build > Make Module 로 aar 파일을 추출한다.
생성한 aar 파일은 android project > 작성한 라이브러리 이름 > build > outputs > aar 경로에 존재하게된다.
프로젝트 AAR 적용
- 생성한 aar 파일을 적용하기 위해 새로운 프로젝트를 생성 후 File > Project Structure 로 들어간다.
- Dependecies > app > add Dependency > 2 JAR/AAR Dependency 를 선택한다.
- Step 1 에 추출한 aar 파일이 저장되어있는 경로를 작성한 후 OK 를 클릭한다.
- 이처럼 aar 파일 dependencies가 추가된 것을 볼 수 있다.
- 라이브러리를 활용하기 위해 import 한 후 UsbConnectionReceiver 를 사용하면 된다.
라이브러리 활용 결과
aar에 담긴 내용은 USB Receiver를 등록한 뒤 USB action을 감지하는 코드이다.
따라서 에뮬레이터를 돌려 로그를 확인하면 다음과 같이 결과가 나온다.
이처럼 aar만 추가하여 코드 전문을 추가 작성하지 않고도 코드를 활용할 수 있다.
import 한 라이브러리 코드
활용한 코드에서 라이브러리 클래스를 누르면 다음과 같이 작성한 aar 로 추출한 코드가 나온다.
이 코드는 read-only로 수정할 수 없다.
궁금증
항상 aar 추출을 하고 프로젝트에 파일을 넣는다면 버전관리는 어떻게 하는걸까?
라이브러리의 업데이트는 어떻게 관리하는지 궁금해졌다.
다음편에..
'Android > 공부' 카테고리의 다른 글
[Android] MockWebServer로 Mock API 활용하기 (2) | 2024.09.25 |
---|---|
[Android] XML 과 Compose 렌더링 방식의 차이 (0) | 2024.09.23 |
[Android/공부] JNI 활용 안드로이드 디버깅 / USB 탐지 (JAVA) (0) | 2024.07.11 |
[Android/공부] 안드로이드 소스 코드 난독화 R8 / Proguard (1) | 2024.07.10 |
[Android] Flow란? LiveData와 Flow 비교 (0) | 2023.11.13 |