Android 컴 파일 시스템 의 Android. bp, Blueprint, Soong
9603 단어 Android
Android 컴 파일 시스템 의 Android. bp, Blueprint, Soong
본 고 는 Android Nougat (7.0) 에 도 입 된 Android. bp 와 관련 된 도구 체인 을 간단하게 소개 한다.
간단 한 소개
Android. bp 는 Android. mk 의 설정 파일 을 바 꾸 는 데 사 용 됩 니 다.Blueprint 프레임 워 크 를 사용 하여 해석 한 다음 Ninja 파일 로 변환 합 니 다.
Android. mk 와 달리 Android. bp 는 순수한 설정 파일 로 분기, 순환 등 프로 세 스 제어 가 포함 되 지 않 으 며 산수, 논리 연산 도 할 수 없습니다.이와 함께 닌 자 파일 도 마찬가지다.이 로 인해 새로운 문제 와 수요 가 생 겼 다. 안 드 로 이 드 프로젝트 에서 컴 파일 을 선택 하고 설정 을 해석 하 며 Ninja 로 전환 하 는 등 Soong 이 생 겨 났 다. Soong 은 사실 Makefile 컴 파일 시스템 의 핵심, 즉
build/make/core/
아래 의 내용 에 해당 한다.Android. bp 의 의미 정의 와 해석 을 제공 하고 Ninja 파일 로 변환 합 니 다.이 밖 에 Soong 은 하나의
androidmk
명령 을 컴 파일 하여 Android. mk 를 수 동 으로 Android. bp 로 변환 할 수 있 습 니 다.이것 은 선택, 순환 등 복잡 한 절 차 를 제어 하지 않 는 Android. mk 에 만 적 용 됩 니 다.Blueprint 와 Soong 은 모두 Golang 이 쓴 프로젝트 입 니 다.Android Nougat 를 시작 으로
prebuilts/go/
디 렉 터 리 에 Golang 에 필요 한 실행 환경 을 추가 해 컴 파일 할 때 사용 합 니 다.Android. bp 및 관련 지원, Android Nougat 부터 가입, Android Oreo (8.0) 부터 기본 으로 시작 합 니 다.Android Nougat 버 전에 서 사용 하려 면 컴 파일 을 실행 할 때 변 수 를 추가 해 야 합 니 다.
make 'USE_SOONG=true'
블 루프 린 트 단독 컴 파일
Soong 을 사용 하면 Android 컴 파일 초기 준비 단계 에서 실행
build/soong/soong.bash
환경 준 비 를 합 니 다.그 중에서 Blueprint 를 out
디 렉 터 리 로 컴 파일 하고 설치 합 니 다.안 드 로 이 드 프로젝트 를 컴 파일 할 때 안 드 로 이 드 bp 관련 툴 체인 이 자동 으로 컴 파일 되 므 로 신경 쓸 필요 가 없다 는 것 이다.Soong 은 Android 와 강 한 관 계 를 가 진 프로젝트 이 고 Blueprint 는 상대 적 으로 독립 적 이어서 따로 컴 파일 하고 사용 할 수 있 습 니 다.
Blueprint 를 컴 파일 하려 면 먼저 Golang 환경 을 갖 춰 야 합 니 다.그리고 다음 절차 에 따라 명령 을 집행 한다.
go get github.com/google/blueprint
cd $GOPATH/src/github.com/google/blueprint
./bootstrap.bash
./blueprint.bash
ls bin
새로 생 성 된
bin
디 렉 터 리 에는 실행 가능 한 파일 4 개가 포함 되 어 있 습 니 다.문서 가 적 고 도움말 명령 도 명령 에 대한 설명 을 포함 하지 않 기 때문에 그 역할 은 문 자 를 보고 의 미 를 살 수 밖 에 없다.
툴 체인 관계
Android. mk, Android. bp, Soong, Blueprint, Ninja, 그들 사이 에는 도대체 어떤 관계 가 있 습 니까?다음은 이 몇 가지 개념 간 의 역할 관 계 를 간단 한 방식 으로 표현 한다.
Android.bp --> Blueprint --> Soong --> Ninja
Makefile or Android.mk --> kati --> Ninja
(Android.mk --> Soong --> Blueprint --> Android.bp)
Blueprint 는 Android. bp 를 생 성, 해석 하 는 도구 로 Soong 의 일부분 입 니 다.Soong 은 Android 컴 파일 을 위 한 도구 로 Blueprint 는 파일 을 해석 하 는 형식 일 뿐 Soong 은 내용 의 의 미 를 설명 합 니 다.
Android. mk 는 Soong 에서 제공 하 는
androidmk
을 통 해 Android. bp 로 변환 할 수 있 으 나 간단 한 설정 만 가능 합 니 다.현재 Oreo 의 컴 파일 프로 세 스 는 여전히 kati 를 사용 하여 전환 되 고 있 습 니 다.기 존 Android. mk, 기 존 Android. bp 는 각각 Ninja 로 전환 된다.Android. mk 와 다른 Makefile 에서 파일 을 생 성 합 니 다
out/build-.ninja
.안 드 로 이 드 bp 에서 생 성 된다 out/soong/build.ninja
.그 밖 에 작은 out/combined-.ninja
파일 을 생 성하 여 두 사람 을 조합 하여 집행 입구 로 삼 는 다.결국 Ninja 파일 이 야 말로 원본 코드 컴 파일 을 직접 제어 하 는 도구 입 니 다.
Android.bp
샘플 과 기본 개념
// Android.bp sample
cc_defaults(
deps = [
"libc",
],
)
cc_library(
name = "cmd",
srcs = [
"main.c",
],
)
subdirs = ["subdir1", "subdir2"]
앞의 사례 에서
cc_library
이런 ()
앞의 것 이 바로 모듈 (module) 이다.여기 서 module 의 개념 은 Android. mk 에서 module 의 개념 에 직접 대응 합 니 다.그리고 =
앞의 name
, srcs
등 이 바로 이 모듈 의 속성 (property) 이다.subdirs
파일 등급 의 최상 위 속성 으로 지정 하면 2 차 디 렉 터 리 에 있 는 Android. bp 를 찾 습 니 다.Android. mk 에서 자주 사용 하 는 것 과 유사 합 니 다 include $(call all-subdir-makefiles)
.모듈 은 속성 을 계승 할 수 있 습 니 다.
cc_defaults
은 파일 에 있 는 모든 모듈 의 부모 모듈 로 공용 속성 을 지정 할 수 있 습 니 다.상기 코드 에서 cc_library
모듈 은 지정 되 지 않 았 지만 deps
속성 이 포함 되 어 있 습 니 다.문법
Blueprint 파일 의 문법 은 설정 파일 일 뿐 입 니 다.
변수 와 속성 은 모두 동적 으로 강 한 유형 으로 값 을 부여 할 때 확 정 됩 니 다.변수 유형 은 네 가지 밖 에 없다.
true
또는 false
["string1", "string2"]
{key1: "value1", key2: ["value2"]}
// line
과 블록 주석 /* block */
을 지원 합 니 다.조작 부 호 는 할당
=
을 제외 하고 +
만 있 습 니 다.상용 공구
컴 파일 과정 에서 관련 이 많 지만 개발 과정 에서 수 동 으로 실행 해 야 할 명령 은 많 지 않다.
하 나 는 포맷 도구
bpfmt
입 니 다.gofmt 와 유사 하여 Blueprint 파일 을 포맷 할 수 있 습 니 다.(사실 코드 는 기본적으로 gofmt 에서 복 사 된 것 이다.)예 를 들 어 현재 디 렉 터 리 와 하위 디 렉 터 리 에 있 는 모든 Android. bp 를 포맷 합 니 다.
bpfmt -w .
또 하 나 는
androidmk
안 드 로 이 드. mk 를 안 드 로 이 드. bp 로 전환 하 는 일 을 맡 았 다.사실 현 단계 에 서 는 Android. bp 를 쓰 는 것 을 배 울 필요 가 없 으 며, Android. mk 를 써 서 전환 해도 된다.androidmk Android.mk > Android.bp
Android. mk 변환 Android. bp 인 스 턴 스
다음은 AOSP 의 간단 한 모듈
system/core/sdcard/Android.mk
을 사례 로 한다. LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := sdcard.cpp fuse.cpp
LOCAL_MODULE := sdcard
LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror
LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser
LOCAL_SANITIZE := integer
include $(BUILD_EXECUTABLE)
이것 은 바 이 너 리 실행 가능 한 파일 을 컴 파일 하 는 작은 모듈 로 내용 이 매우 간단 하 다.실행
androidmk Android.mk > Android.bp
을 통 해 Android. bp 로 전환 할 수 있 습 니 다. cc_binary {
srcs: [
"sdcard.cpp",
"fuse.cpp",
],
name: "sdcard",
cflags: [
"-Wall",
"-Wno-unused-parameter",
"-Werror",
],
shared_libs: [
"libbase",
"libcutils",
"libminijail",
"libpackagelistparser",
],
sanitize: {
misc_undefined: ["integer"],
},
}
행 수가 많아 졌 지만 그 의 미 는 더욱 명확 해 졌 다 는 것 을 알 수 있다.이 모듈 은
sdcard
이라는 모듈 로 원본 코드 는 두 개의 cpp 파일 이 있 고 라 이브 러 리 에 의존 하 는 것 은 네 개 입 니 다. cc_binary
이면 include $(BUILD_EXECUTABLE)
에 해당 한다.전환 전후 에 있어 야 할 정 보 는 모두 있 는데 표현 방식 이 바 뀌 었 을 뿐이다.메모: Android. mk 에 복잡 한 논리 가 포함 되 어 있 으 면 결 과 를 바 꾸 는 데 문제 가 있 을 수 있 습 니 다. 결과 파일 의 설명 을 참조 하 십시오.
Android. bp 가
cc_binary
, cc_library
와 같은 모듈 을 얼마나 지원 하 는 지 에 대해 서 는 각 모듈 이 name
, cflags
와 같은 속성 을 얼마나 지원 하 는 지 에 대해 서 는 Soong 의 문서 만 찾 을 수 있 습 니 다.문서.
현재 (2017 년) 전체 Android. bp 도구 체인 은 문서 가 극도로 부족 한 단계 에 있다.공식 적 으로 불쌍 한 README 을 제외 하고 코드 와 주석 만 볼 수 있 고 이미 존재 하 는 Android. bp 를 참고 할 수 있 습 니 다.
또한, 이미 Soong 컴 파일 을 사용 한 항목 에서
out/soong/.bootstrap/docs/soong_build.html
모든 사용 가능 한 모듈 과 속성 을 설명 합 니 다.이것 은 두 눈 에 먹칠 하 는 증상 을 다소 완화 시 켰 기 때문에 너무 힘 든 것 은 아니다.실제로 전체 Soong 은 여전히 발전기 에 있 고 구 글 은 거 리 낌 없 이 수정 하 며 호환성 을 전혀 고려 하지 않 았 다.8.0.0 에 쓴 Android. bp 는 8.0.1 에 컴 파일 에 실 패 했 을 수도 있 습 니 다.이것 은 아마도 문서 와 컴 파일 이 연 결 된 진의 일 것 이다.Soong 이 완전히 성숙 해 지면 안 드 로 이 드 개발 홈 페이지 에 상세 한 정보 가 있 을 지도 모른다.이 사 이 트 는 AOSP 의 android - 8.0.0 - r9 에서 컴 파일 된 soong 을 제공 합 니 다.build. html, 참고 만 가능 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.