| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- interrupt context
- DMA
- 디스크 축소
- context switch
- 디스크립터
- sscanf
- activities
- Shared Folder
- 멀티프로세싱
- intents
- 젠킨스
- pagefile.sys
- memcmp
- 환경 변수
- 프레임버퍼
- fscanf
- HDR
- 속도저하
- usb2.0
- 소캣
- layouts
- makefile
- jenkins
- gparted
- 문자형 디바이스 파일
- fprintf
- interrupt handler
- context
- sprintf
- ubuntu
- Today
- Total
do{학습}while
AOSP) Android.bp 작성하는 법 본문
이전에 AOSP 빌드 시스템에 대해서 설명하면서 Android.bp를 언급한적이 있습니다. AOSP 빌드 스크립트 중 하나인 Android.bp를 자세히 알아보고 빌드스크립트를 어떤 방식으로 작성하는지 알아보겠습니다.
Android.bp의 기본적인 구조
<빌드 타입> {
<속성>: <값>,
<속성>: <값>,
...
}
기본적으로 Android.bp는 빌드 타입을 정하여 빌드 목적을 정하고 key:value 형태로 빌드 속성들을 설정해줄 수 있습니다.
빌드 타입
빌드 타입은 모듈의 유형을 정의합니다. 정의된 빌드 타입에 따라 출력 파일의 타입도 결정되게 됩니다.
빌드 타입을 나열하면..
package
- 프로젝트나 특정 디렉토리 내의 라이선스 정보를 지정하고 관리
- Android.bp 파일에서 package 모듈 타입은 Makefile에서의 include 명령어와 비슷한 역할을 합니다.
android_app
- 안드로이드 앱을 빌드할때 사용되는 빌드 타입
- 출력 : .apk 파일 (android application package)
android_library
- 안드로이드 라이브러리를 빌드할때 사용되는 빌드 타입
- .aar 형태로 다른 앱에서 .aar 파일에 포함된 리소스 코드 혹은 매니페스트을 사용 가능
- 출력 : 리소스 코드, 매니페스트 등을 포함한 .aar (android archive)
java_library
자바 코드로 구성된 빌드하여 라이브러리를 생성하는 빌드 타입
출력 : .jar (java archive)
cc_default
- C/C++ 코드의 기본적인 설정을 정의
- 소스파일, 컴파일러 플래그, 라이브러리 의존성 등을 설정
cc_library
- C/C++ 코드로 구성된 파일을 빌드하는 빌드 타입
- 출력 : .so (동적 라이브러리), .a (정적 라이브러리)
cc_binary
- C/C++ 코드로 구성된 파일을 빌드하는 빌드 타입
- 출력 : .exe (실행 가능한 가능한 바이너리 파일)
rust_library
- rust 코드로 구성된 파일을 빌드하는 빌드 타입
prebuilt_aar / prebuilt_apk
- 이미 생성된 AAR, APK 파일 참조하여 빌드 스크립트에 포함
- 출력 : 미리 빌드된 .aar, .apk
속성
빌드 시스템(Soong)에는 미리 정의된 다양한 속성들이 존재합니다. 이 속성들은 각 빌드 타입에 따라 다르게 사용됩니다.
공통 속성(모든 모듈에 적용 가능)
name
- 모듈의 이름을 정의
- 예 : name: "my_library"
srcs
- 모듈에서 사용할 소스 파일들의 목록을 정의
- 예: srcs: ["src/**/*.java", "src/**/*.kt"]
src 디렉토리 하위에 존재하는 모든 .java, .kt파일들을 모듈 빌드 시 포함하겠다는 의미
sdk_version
- 모듈이 사용할 Android SDK 버전을 지정
- 예: sdk_version: "29"
min_sdk_version:
- 모듈에서 지원할 최소 Android SDK 버전을 설정
- 예: min_sdk_version: "21"
static_libs
- 정적 라이브러리의 의존성을 정의
- 예: static_libs: ["mylib_static"]
shared_libs
- 동적 라이브러리의 의존성을 정의
- 예: shared_libs: ["mylib_shared"]
external_include_dirs
- 외부 헤더 파일 경로를 정의
- 예: external_include_dirs: ["external/include"]
resource_dirs
- Android 리소스 파일이 있는 디렉토리를 정의
- 예: resource_dirs: ["res"]
exclude_srcs
- 빌드에서 제외할 소스 파일을 정의
- 예: exclude_srcs: ["src/exclude/*.java"]
exclude_shared_libs
- 빌드에서 제외할 동적 라이브러리를 정의
- 예: exclude_shared_libs: ["exclude_lib_shared"]
manifest
- AndroidManifest.xml 파일의 경로를 지정
- 예: manifest: "AndroidManifest.xml"
compile_multilib
- 32비트 또는 64비트 빌드 옵션을 설정 ("both", "32", "64" 중 선택)
- 예: compile_multilib: "both"
Package에 사용되는 속성
default_applicable_licenses
- 기본 라이선스 정의
- 예 : default_applicable_licenses: ["Android-Apache-2.0"]
디렉토리 내의 모든 모듈과 파일이 Android-Apache-2.0 라이선스를 따름
android_library에 사용되는 속성
libs
- Java 또는 Kotlin에서 사용하는 라이브러리 의존성을 설정
- 예: libs: ["androidx.core_core", "androidx.appcompat_appcompat"]
static_libs
- 정적으로 연결될 라이브러리의 목록을 정의
- 예: static_libs: ["mylib_static"]
resource_dirs
- 리소스 파일을 포함하는 디렉토리 목록을 정의
- 예: resource_dirs: ["res"]
aidl
- AIDL 파일의 경로를 정의
- 예: aidl: ["src/**/*.aidl"]
cc_library (C/C++ 라이브러리 빌드에 사용)
defaults
- cc_default모듈의 설정을 참조
- 예 : defaults: ["<cc_default모듈의 이름>"]
shared_libs
- 이 라이브러리가 의존하는 동적 라이브러리들을 정의
- 예: shared_libs: ["liblog", "libc"]
static_libs
- 이 라이브러리가 의존하는 정적 라이브러리들을 정의
- 예: static_libs: ["libutils"]
cflags
- C/C++ 컴파일러에 전달할 플래그를 정의
- 예: cflags: ["-Wall", "-Werror"]
include_dirs
- 추가 헤더 파일 경로를 정의
- 예: include_dirs: ["include", "external/include"]
android_app (APK 빌드 모듈에 사용)
privileged
- 시스템 권한이 필요한 앱인지 여부를 정의
- 예: privileged: true
certificate
- APK 서명에 사용할 인증서를 지정
- 예: certificate: "platform"
aaptflags
- aapt 도구에 전달할 추가 플래그를 정의
- 예: aaptflags: ["--no-compress"]
java_library (Java 라이브러리 빌드에 사용)
jars
- 빌드 시 추가할 외부 JAR 파일을 지정
- 예: jars: ["prebuilt/mylib.jar"]
lint
- Java Lint 옵션을 설정
- 예: lint: { fatal: ["NewApi"] }
prebuilt_aar / prebuilt_apk (미리 빌드된 AAR/APK 모듈)
aar
- 미리 빌드된 AAR 파일의 경로를 지정
- 예: aar: "libs/mylib.aar"
apk
- 미리 빌드된 APK 파일의 경로를 지정
- 예: apk: "prebuilt/app.apk"
rust_library (Rust 라이브러리 빌드에 사용)
crate_name
- Rust crate의 이름을 지정
- 예: crate_name: "mylib"
features
- 활성화할 Rust crate의 기능 목록을 지정
- 예: features: ["serde", "async"]
Android.bp를 공부하고...
Android.bp는 Android.mk에 비해 구조적으로 더 명확하게 정리되어 있다고 느꼈습니다. 빌드 시스템에서 무엇을 빌드하려고 하는지 한눈에 파악하기 쉬웠고, 모듈에 관련된 속성들이 그룹화 시킬 수 있어 가독성이 높아졌다는 느낌을 받았습니다.
참고
https://source.android.com/docs/setup/reference/androidbp?hl=ko
Android.bp 파일 형식 | Android 오픈소스 프로젝트 | Android Open Source Project
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Android.bp 파일 형식 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 디자인적으로 Android.bp 파일은 간단
source.android.com
https://ci.android.com/builds/submitted/12336103/linux/latest/view/soong_build.html
Artifact Viewer
ci.android.com
'AOSP' 카테고리의 다른 글
| AOSP) 안드로이드 시스템 내 SDK 생성 (1) | 2024.09.05 |
|---|---|
| AOSP) 모바일 앱을 위한 SDK 개발해보기 (2) | 2024.09.02 |
| AOSP) 빌드 시스템 [3] : 빌드 중, 빌드 끝 (0) | 2024.08.29 |
| AOSP) 빌드 시스템 [2] : Product, Board, Module 정보 전달 (0) | 2024.08.28 |
| AOSP) 빌드 시스템[1] : Build System (0) | 2024.08.27 |