Android.bp 파일 형식

디자인적으로 Android.bp 파일은 간단합니다. 여기에는 조건문 또는 제어 흐름 구문이 포함되어 있지 않습니다. 모든 복잡성은 Go로 작성된 빌드 로직에 따라 처리됩니다. Android.bp 파일의 구문과 의미는 가능한 경우 Bazel BUILD 파일과 유사합니다.

모듈

Android.bp 파일의 모듈은 name: "value", 형식의 속성 모음이 뒤따르는 모듈 유형으로 시작하며, 형식은 다음과 같습니다.

cc_binary {
    name: "gzip",
    srcs: ["src/test/minigzip.c"],
    shared_libs: ["libz"],
    stl: "none",
}

모든 모듈에는 name 속성이 있어야 하며 반복될 수 있는 네임스페이스 및 사전 빌드 모듈의 name 속성 값을 제외하고 값은 전체 Android.bp 파일에 걸쳐 고유해야 합니다.

srcs 속성은 모듈을 빌드하는 데 사용된 소스 파일을 문자열 목록으로 지정합니다. 모듈 참조 구문 ":<module-name>"을 사용하여 genrule 또는 filegroup과 같은 소스 파일을 생성하는 다른 모듈의 출력을 참조할 수 있습니다.

유효한 모듈 유형과 속성의 목록은 Soong 모듈 참조를 확인하세요.

유형

변수와 속성은 강타입(strongly typed)으로, 변수는 첫 번째 할당에 따라 동적으로 입력되고 속성은 모듈 유형에 따라 정적으로 설정됩니다. 지원 유형은 다음과 같습니다.

  • 부울(true 또는 false)
  • 정수(int)
  • 문자열("string")
  • 문자열 목록(["string1", "string2"])
  • 지도({key1: "value1", key2: ["value2"]})

지도에는 중첩된 지도를 포함한 모든 유형의 값이 포함될 수 있습니다. 목록과 지도에는 마지막 값 다음에 쉼표가 뒤에 올 수 있습니다.

Glob

파일 목록을 가져오는 속성(예: srcs)에서 glob 패턴을 취할 수도 있습니다. Glob 패턴은 일반 UNIX 와일드 카드 *를 포함할 수 있습니다(예: *.java). Glob 패턴은 또한 0개 이상의 경로 요소와 일치하는 하나의 ** 와일드 카드를 경로 요소로 포함할 수 있습니다. 예를 들어 java/**/*.javajava/Main.javajava/com/android/Main.java 패턴 모두와 일치합니다.

변수

Android.bp 파일에는 최상위 수준 변수 할당이 포함될 수 있습니다.

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
    name: "gzip",
    srcs: gzip_srcs,
    shared_libs: ["libz"],
    stl: "none",
}

변수는 하위 Blueprint 파일과 마찬가지로 선언된 파일의 나머지 부분으로 범위가 지정됩니다. 변수는 하나의 예외를 제외하고는 변경할 수 없으며, 참조되기 전에만 += 할당을 사용하여 추가될 수 있습니다.

주석

Android.bp 파일은 C 스타일 다중 행 /* */ 및 C++ 스타일 단일 행 // 주석을 포함할 수 있습니다.

연산자

문자열, 문자열 목록 및 지도는 + 연산자를 사용하여 추가할 수 있습니다. + 연산자를 사용하여 정수를 더할 수 있습니다. 지도를 추가하면 두 지도에 키 조합이 생성되고 두 지도에 있는 키의 값이 추가됩니다.

조건문

Soong은 Android.bp 파일에서 조건문을 지원하지 않습니다. 대신 조건문이 필요한 빌드 규칙의 복잡성은 고급 언어 기능을 사용할 수 있고 조건문에서 발생하는 암시적 종속 항목을 추적할 수 있는 Go에서 처리됩니다. 대부분의 조건문은 지도 속성으로 변환되며 여기서 지도의 값 중 하나가 선택되어 최상위 속성에 추가됩니다.

아키텍처 전용 파일을 지원하는 예는 다음과 같습니다.

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

형식 지정 도구

Soong에는 gofmt와 비슷한 Blueprint 파일의 표준 형식 지정 도구가 포함됩니다. 현재 디렉터리에 있는 모든 Android.bp 파일의 형식을 재귀적으로 다시 지정하려면 다음을 실행합니다.

bpfmt -w .

표준 형식에는 4칸 들여쓰기, 다중 요소 목록의 모든 요소 다음에 오는 새 행, 목록과 지도의 후행 쉼표가 포함됩니다.