Android 규칙

<ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

규칙

android_binary

규칙 소스 보기
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)

Android 애플리케이션 패키지 파일 (.apk)을 생성합니다.

암시적 출력 타겟

  • name.apk: Android 애플리케이션 디버그 키로 서명된 zipaligned가 포함된 경우 애플리케이션을 개발하고 디버그하는 데 사용할 수 있습니다. 디버그 키로 서명한 경우에는 애플리케이션을 릴리스할 수 없습니다.
  • name_unsigned.apk: 이 파일을 릴리스 전에 릴리스 키로 서명할 수 있는 공개될 수 있습니다.
  • name_deploy.jar: 다음이 포함된 Java 보관 파일 이 타겟의 임시 폐쇄입니다.

    배포 jar에는 이 타겟의 런타임 클래스 경로를 검색한 클래스 로더 연습할 수 있습니다

  • name_proguard.jar: 다음을 포함하는 Java 보관 파일 ProGuard를 실행한 결과 name_deploy.jar입니다. 이 출력은 proguard_specs 속성 값이 지정합니다.
  • name_proguard.map: 매핑 파일의 결과 name_deploy.jar에서 ProGuard를 실행합니다. 이 출력은 proguard_specs 속성 값이 지정하고 proguard_generate_mapping 또는 shrink_resources가 설정되어 있는지 확인합니다.

Android 규칙의 예는 examples/android 디렉터리에서 확인할 수 있습니다. Bazel 소스 트리

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

바이너리 타겟에 연결할 다른 라이브러리의 목록입니다. 허용되는 라이브러리 유형은 android_library입니다. android 제약 조건이 있는 java_library 및 다음을 위한 .so 네이티브 라이브러리를 래핑하거나 생성하는 cc_library Android 타겟 플랫폼
srcs

라벨 목록 기본값은 []입니다.

대상을 만들기 위해 처리된 소스 파일의 목록입니다.

.java 유형의 srcs 파일이 컴파일됩니다. 가독성을 위해 생성된 .java 소스 파일을 srcs에 추가했습니다. 대신 종속된 규칙 이름을 다음과 같이 srcs에 넣습니다. 참조하세요.

.srcjar 유형의 srcs 파일이 압축해제되어 있습니다. 컴파일합니다 이것은 genrule 또는 빌드 확장 프로그램).

assets

라벨 목록 기본값은 []입니다.

패키징할 애셋 목록입니다. 이것은 일반적으로 glob assets 디렉터리 또한 다른 규칙( 파일) 또는 다른 패키지의 내보낸 파일을 다운로드할 수 있습니다. 단, 이러한 모든 파일이 assets_dir 디렉터리에 있습니다.
assets_dir

String; 기본값은 ""입니다.

assets의 파일 경로를 제공하는 문자열입니다. assetsassets_dir 쌍은 패키징된 항목을 설명합니다. 두 속성 중 하나만 제공하거나 둘 다 제공하지 않아야 합니다.
crunch_png

Boolean; 기본값은 True입니다.

PNG 크런칭 실행 여부 이는 9-패치 처리와는 별개입니다. 나인 패치 처리는 완료되었습니다. 이는 더 이상 사용되지 않는 aapt 버그: aapt2에서 수정되었습니다.
custom_package

String; 기본값은 ""입니다.

Java 소스가 생성될 Java 패키지입니다. 기본적으로 패키지는 BUILD 파일이 있는 디렉터리에서 추론됩니다. 선택합니다. 다른 패키지를 지정할 수 있지만 클래스 경로가 다른 클래스 경로와 충돌할 수 있으므로 감지됩니다.
debug_key

라벨 기본값은 "@bazel_tools//tools/android:debug_keystore"입니다.

디버그 APK에 서명하는 데 사용할 디버그 키 저장소가 포함된 파일입니다. 일반적으로 기본 키가 아닌 다른 키를 사용하려는 경우 이 속성을 생략해야 합니다.

경고: 프로덕션 키는 사용하지 마세요. 엄격하게 보호되며 소스 트리에 보관되지 않습니다.

debug_signing_keys

라벨 목록 기본값은 []입니다.

디버그 APK에 서명하는 데 사용할 파일 목록, 디버그 키 저장소입니다. 일반적으로 기본 키가 아닌 다른 키를 사용하려는 경우 이 속성을 생략해야 합니다.

경고: 프로덕션 키는 사용하지 마세요. 엄격하게 보호되며 소스 트리에 보관되지 않습니다.

debug_signing_lineage_file

라벨 기본값은 None입니다.

debug_signing_keys의 서명 계보가 포함된 파일입니다. 일반적으로 기본 키가 아닌 다른 키를 사용하려는 경우 이 속성을 생략해야 합니다.

경고: 프로덕션 키는 사용하지 마세요. 엄격하게 보호되며 소스 트리에 보관되지 않습니다.

densities

문자열 목록 기본값은 []입니다.

APK 빌드 시 필터링할 밀도입니다. 이렇게 하면 APK 크기를 줄일 수 있습니다. 해당하는 호환 화면 섹션이 아직 상위 집합을 포함하지 않는 경우 매니페스트에 추가됩니다. 있습니다.
dex_shards

Integer; 기본값은 1입니다.

덱싱을 분해해야 하는 샤드 수입니다. 이로 인해 앱 설치 및 시작 시간을 희생시키면서 덱싱 속도가 훨씬 빨라집니다. 이 바이너리가 클수록 더 많은 샤드를 사용해야 합니다. 처음에는 25로 시작하는 것이 좋습니다. 있습니다.

각 샤드는 최종 앱에서 하나 이상의 dex를 얻습니다. 따라서 릴리스 바이너리에는 1을 초과하여 설정하지 않는 것이 좋습니다.

dexopts

문자열 목록 기본값은 []입니다.

class.dex 생성 시 dx 도구의 추가 명령줄 플래그 'Make 변수' 대체 적용 Bourne 셸 토큰화.
enable_data_binding

Boolean; 기본값은 False입니다.

true인 경우 이 규칙은 데이터 바인딩 표현식에 포함된 resource_files 속성. 이 방법이 없으면 설정에 따라 데이터 결합 표현식이 빌드 실패를 일으킵니다.

데이터 결합으로 Android 앱을 빌드하려면 다음 작업도 해야 합니다.

  1. 전이적으로 이 규칙에 종속되는 모든 Android 규칙에 이 속성을 설정합니다. 종속 항목이 리소스를 통해 규칙의 데이터 결합 표현식을 상속하기 때문입니다. 있습니다. 따라서 이러한 표현식을 파싱하려면 데이터 결합으로 빌드해야 합니다.
  2. 모든 타겟에 데이터 결합 런타임 라이브러리의 deps = 항목 추가 이 속성을 설정하는 것입니다. 이 라이브러리의 위치는 Depot 설정에 따라 다릅니다.
incremental_dexing

Integer; 구성 불가 기본값은 -1입니다.

증분 덱싱을 사용하거나 사용하지 않고 타겟을 빌드하도록 강제하여 기본값을 재정의합니다. --incremental_dexing 플래그에 사용할 수 있습니다.
instruments

라벨 기본값은 None입니다.

계측할 android_binary 타겟입니다.

이 속성을 설정하면 android_binary가 테스트로 처리됩니다. 사용할 수 있습니다 android_instrumentation_test 대상에서 이 대상을 test_app 속성입니다.

javacopts

문자열 목록 기본값은 []입니다.

이 타겟의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

key_rotation_min_sdk

String; 기본값은 ""입니다.

APK의 순환된 서명에 필요한 최소 Android 플랫폼 버전 (API 수준)을 설정합니다. APK의 서명을 생성하는 데 사용해야 합니다. APK의 원래 서명 키 모든 이전 플랫폼 버전에 사용됩니다.
main_dex_list

라벨 기본값은 None입니다.

텍스트 파일에는 클래스 파일 이름 목록이 포함되어 있습니다. 이러한 클래스 파일에 의해 정의되는 클래스는 기본 class.dex에 배치해야 합니다. e.g.:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
multidex="manual_main_dex"와 함께 사용해야 합니다.
main_dex_list_opts

문자열 목록 기본값은 []입니다.

기본 dex 목록 빌더에 전달할 명령줄 옵션입니다. 이 옵션을 사용하여 기본 dex 목록에 포함된 클래스에 영향을 줍니다.
main_dex_proguard_specs

라벨 목록 기본값은 []입니다.

보관해야 하는 클래스를 결정하는 데 Proguard 사양으로 사용되는 파일 기본 dex를 생성합니다. multidex 속성이 legacy로 설정된 경우에만 허용됩니다.
manifest

라벨 필수

Android 매니페스트 파일의 이름으로, 일반적으로 AndroidManifest.xml입니다. resource_files 또는 애셋이 정의된 경우 정의되어야 합니다.
manifest_values

사전: 문자열 -> String; 기본값은 {}입니다.

매니페스트에서 재정의할 값의 사전입니다.

매니페스트의 모든 ${name} 인스턴스가 다음 값으로 대체됩니다. 이름과 일치하는 단어입니다.

applicationId, versionCode, versionName minSdkVersion, targetSdkVersionmaxSdkVersion는 매니페스트에서 상응하는 속성도 재정의합니다. 및 uses-sdk 태그

packageName는 무시되며 둘 중 하나에서 설정됩니다. applicationId(지정된 경우) 또는 매니페스트의 패키지입니다.

manifest_mergerlegacy로 설정된 경우 applicationId, versionCode, versionName에서 실행할 작업 영향을 미치지 않습니다.

multidex

String; 기본값은 "native"입니다.

코드를 여러 dex 파일로 분할할지 여부입니다.
가능한 값은 다음과 같습니다.
  • native: dex 64K 색인 제한 시 코드를 여러 dex 파일로 분할 초과되었습니다. 런타임 시 멀티덱스 클래스를 로드하기 위한 네이티브 플랫폼 지원을 가정합니다. 이 기능은 Android L 이상에서만 작동합니다.
  • legacy: dex 64K 색인 제한 시 코드를 여러 dex 파일로 분할 초과되었습니다. 멀티덱스 클래스가 애플리케이션 코드를 통해 로드된다고 가정합니다 (즉, 네이티브 플랫폼 지원).
  • manual_main_dex: dex 64K일 때 코드를 여러 dex 파일로 분할 색인 한도를 초과했습니다. 기본 dex 파일의 콘텐츠는 는 main_dex_list 속성을 포함해야 합니다.
  • off: 색인 한도에 도달합니다.
nocompress_extensions

문자열 목록 기본값은 []입니다.

APK에 압축되지 않은 상태로 남겨둘 파일 확장자 목록입니다.
package_id

Integer; 기본값은 0입니다.

이 바이너리의 리소스에 할당할 패키지 ID입니다.

자세한 내용은 AAPT2의 --package-id 인수를 참고하세요. 이렇게 하면 해야 함)는 일반적으로 설정되지 않은 상태로 유지되어 기본값이 127이 됩니다. (0x7F).

plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 지정된 모든 java_plugin 플러그인 속성은 애플리케이션이 실행될 때마다 빌드됩니다 리소스 생성: 플러그인은 타겟.
proguard_apply_dictionary

라벨 기본값은 None입니다.

proguard의 매핑으로 사용할 파일입니다. 행으로 구분된 '단어' 파일 클래스 및 멤버 이름을 변경할 때 난독화됩니다.
proguard_apply_mapping

라벨 기본값은 None입니다.

proguard의 매핑으로 사용할 파일입니다. proguard_generate_mapping에 의해 생성된 매핑 파일은 동일한 매핑을 새 빌드에 적용하는 데 재사용됩니다.
proguard_generate_mapping

Boolean; 구성 불가 기본값은 False입니다.

Proguard 매핑 파일을 생성할지 여부입니다. 매핑 파일은 proguard_specs가 다음과 같은 경우에만 생성됩니다. 지정합니다. 이 파일에는 원본과 난독화된 클래스, 메서드 및 필드 이름을 사용합니다.

경고: 이 속성을 사용하는 경우 Proguard 사양에는 -dontobfuscate 또는 -printmapping

proguard_specs

라벨 목록 기본값은 []입니다.

Proguard 사양으로 사용할 파일입니다. 이 파일은 Proguard에서 사용할 사양 집합을 설명합니다.
resource_configuration_filters

문자열 목록 기본값은 []입니다.

리소스 구성 필터 목록(예: 'en') 이 포드는 클러스터의 'en'에 있는 앱에만 apk가 적용됩니다. 구성할 수 있습니다 유사 현지화를 사용 설정하려면 다음을 포함합니다. en_XA 또는 ar_XB 유사 언어
resource_files

라벨 목록 기본값은 []입니다.

패키징할 리소스 목록입니다. 이것은 일반적으로 glob res 디렉터리
genrules에서 생성된 파일은 다음을 통해 참조할 수 있습니다. 라벨도 여기에 표시됩니다. 유일한 제한사항은 생성된 출력은 동일한 'res'에 있어야 합니다. 다른 디렉터리에 리소스 파일이 포함되어 있습니다
shrink_resources

Integer; 기본값은 -1입니다.

리소스 축소를 수행할지 여부입니다. 바이너리에서 사용하지 않는 리소스는 삭제됩니다. 이 기능은 로컬 리소스 (예: manifestresource_files 속성) ProGuard가 필요합니다. Gradle 리소스 축소기와 거의 동일한 방식으로 작동합니다. (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

주목할 만한 차이점:

  • values/의 리소스 및 파일 기반 리소스가 삭제됩니다. 리소스
  • 기본적으로 strict mode 사용
  • 사용하지 않는 ID 리소스 삭제는 aapt2에서만 지원됩니다.
를 통해 개인정보처리방침을 정의할 수 있습니다. 리소스 축소가 사용 설정된 경우 name_files/resource_shrinker.log 수행된 분석 및 삭제에 대해 자세히 설명하는 정보도 생성됩니다.

가능한 값은 다음과 같습니다.

  • shrink_resources = 1: Android 리소스 축소를 사용 설정합니다.
  • shrink_resources = 0: Android 리소스 축소를 사용 중지합니다.
  • shrink_resources = -1: 축소는 --android_resource_reduceing 플래그가 포함됩니다.

aar_import

규칙 소스 보기
aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)

이 규칙을 사용하면 .aar 파일을 android_library 및 규칙 android_binary

    aar_import(
        name = "google-vr-sdk",
        aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar",
    )

    android_binary(
        name = "app",
        manifest = "AndroidManifest.xml",
        srcs = glob(["**.java"]),
        deps = [":google-vr-sdk"],
    )

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

aar

라벨 필수

이 타겟에 종속되는 Android 타겟에 제공할 .aar 파일입니다.
exports

라벨 목록 기본값은 []입니다.

이 규칙을 사용하는 규칙으로 내보낼 대상입니다. java_library.exports.
srcjar

라벨 기본값은 None입니다.

AAR에서 컴파일된 JAR 파일의 소스 코드가 포함된 JAR 파일

android_library

규칙 소스 보기
android_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)

이 규칙은 소스를 컴파일하고 .jar 파일로 보관처리합니다. Android 런타임 라이브러리 android.jar가 암시적으로 사용됩니다. 컴파일 클래스 경로를 지정합니다.

암시적 출력 타겟

  • libname.jar: Java 보관 파일입니다.
  • libname-src.jar: 다음이 포함된 보관 파일 소스('source jar')를 실행합니다.
  • name.aar: Android 'aar' Java 보관 파일이 포함된 번들 리소스를 제공합니다 임시 폐쇄가 포함되어 있지 않습니다.

Android 규칙의 예는 examples/android 디렉터리에서 확인할 수 있습니다. Bazel 소스 트리

다음 예는 idl_import_root 설정 방법 //java/bazel/helloandroid/BUILD에 다음을 포함시킵니다.

android_library(
    name = "parcelable",
    srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable

    # MyParcelable.aidl will be used as import for other .aidl
    # files that depend on it, but will not be compiled.
    idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable

    # We don't need to specify idl_import_root since the aidl file
    # which declares bazel.helloandroid.MyParcelable
    # is present at java/bazel/helloandroid/MyParcelable.aidl
    # underneath a java root (java/).
)

android_library(
    name = "foreign_parcelable",
    srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable
    idl_parcelables = [
        "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable
    ],

    # We need to specify idl_import_root because the aidl file which
    # declares android.helloandroid.OtherParcelable is not positioned
    # at android/helloandroid/OtherParcelable.aidl under a normal java root.
    # Setting idl_import_root to "src" in //java/bazel/helloandroid
    # adds java/bazel/helloandroid/src to the list of roots
    # the aidl compiler will search for imported types.
    idl_import_root = "src",
)

# Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement.
android_library(
    name = "foreign_interface",
    idl_srcs = [
        "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface
        "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface
    ],

    # As above, idl_srcs which are not correctly positioned under a java root
    # must have idl_import_root set. Otherwise, OtherInterface (or any other
    # interface in a library which depends on this one) will not be able
    # to find CallbackInterface when it is imported.
    idl_import_root = "src",
)

# MyParcelable.aidl is imported by MyInterface.aidl, so the generated
# MyInterface.java requires MyParcelable.class at compile time.
# Depending on :parcelable ensures that aidl compilation of MyInterface.aidl
# specifies the correct import roots and can access MyParcelable.aidl, and
# makes MyParcelable.class available to Java compilation of MyInterface.java
# as usual.
android_library(
    name = "idl",
    idl_srcs = ["MyInterface.aidl"],
    deps = [":parcelable"],
)

# Here, ServiceParcelable uses and thus depends on ParcelableService,
# when it's compiled, but ParcelableService also uses ServiceParcelable,
# which creates a circular dependency.
# As a result, these files must be compiled together, in the same android_library.
android_library(
    name = "circular_dependencies",
    srcs = ["ServiceParcelable.java"],
    idl_srcs = ["ParcelableService.aidl"],
    idl_parcelables = ["ServiceParcelable.aidl"],
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

링크할 다른 라이브러리의 목록입니다. 허용되는 라이브러리 유형은 android_library입니다. android 제약 조건이 있는 java_librarycc_library 네이티브 라이브러리 .so 래핑 또는 생성 대상 플랫폼용입니다.
srcs

라벨 목록 기본값은 []입니다.

.java 또는 .srcjar 파일의 목록은 타겟이 생성됩니다

.java 유형의 srcs 파일이 컴파일됩니다. 가독성을 위해 생성된 .java 소스 파일을 srcs에 추가했습니다. 대신 종속된 규칙 이름을 다음과 같이 srcs에 넣습니다. 참조하세요.

.srcjar 유형의 srcs 파일이 압축해제되어 있습니다. 컴파일합니다 이것은 genrule 또는 빌드 확장 프로그램).

srcs을 생략하면 이 규칙에서 deps을(를) 내보냅니다(자세한 내용은 자세한 내용은 java_library의 내보내기 종속 항목 내보내기에 대한 정보). 그러나 이 동작은 지원 중단 예정 그것에 의존하지 않도록 하세요.

assets

라벨 목록 기본값은 []입니다.

패키징할 애셋 목록입니다. 이것은 일반적으로 glob assets 디렉터리 또한 다른 규칙( 파일) 또는 다른 패키지의 내보낸 파일을 다운로드할 수 있습니다. 단, 이러한 모든 파일이 assets_dir 디렉터리에 있습니다.
assets_dir

String; 기본값은 ""입니다.

assets의 파일 경로를 제공하는 문자열입니다. assetsassets_dir 쌍은 패키징된 항목을 설명합니다. 두 속성 중 하나만 제공하거나 둘 다 제공하지 않아야 합니다.
custom_package

String; 기본값은 ""입니다.

Java 소스가 생성될 Java 패키지입니다. 기본적으로 패키지는 BUILD 파일이 있는 디렉터리에서 추론됩니다. 선택합니다. 다른 패키지를 지정할 수 있지만 클래스 경로가 다른 클래스 경로와 충돌할 수 있으므로 감지됩니다.
enable_data_binding

Boolean; 기본값은 False입니다.

true인 경우 이 규칙은 데이터 바인딩 표현식에 포함된 resource_files 속성. 이 방법이 없으면 설정에 따라 데이터 결합 표현식이 빌드 실패를 일으킵니다.

데이터 결합으로 Android 앱을 빌드하려면 다음 작업도 해야 합니다.

  1. 전이적으로 이 규칙에 종속되는 모든 Android 규칙에 이 속성을 설정합니다. 종속 항목이 리소스를 통해 규칙의 데이터 결합 표현식을 상속하기 때문입니다. 있습니다. 따라서 이러한 표현식을 파싱하려면 데이터 결합으로 빌드해야 합니다.
  2. 모든 타겟에 데이터 결합 런타임 라이브러리의 deps = 항목 추가 이 속성을 설정하는 것입니다. 이 라이브러리의 위치는 Depot 설정에 따라 다릅니다.
exported_plugins

라벨 목록 기본값은 []입니다.

java_plugin 목록 (예: 주석) 프로세서)가 포함되어 있습니다.

지정된 java_plugin 목록이 마치 라이브러리가 명시적으로 이 라이브러리를 선언한 것처럼 이 라이브러리에 직접 종속됩니다. plugins의 라벨

exports

라벨 목록 기본값은 []입니다.

exports 속성을 통해 도달한 모든 규칙의 종료 은 exports로 타겟팅할 수 있습니다.

exports는 속한 규칙의 직접 종속 항목이 아닙니다.

exports_manifest

Integer; 기본값은 1입니다.

매니페스트 항목을 android_binary 대상으로 내보낼지 여부 이 타겟에 종속된 광고 항목을 가져올 수 있습니다 uses-permissions 속성은 내보내지지 않습니다.
idl_import_root

String; 기본값은 ""입니다.

idl을 포함하는 Java 패키지 트리의 루트에 대한 패키지 상대 경로 확인할 수 있습니다

이 경로는 다음과 같은 유휴 소스를 처리할 때 가져오기 루트로 사용됩니다. 이 라이브러리에 종속됩니다.

idl_import_root를 지정하면 idl_parcelablesidl_srcs는 객체의 Java 패키지에서 지정한 경로에 있어야 합니다. idl_import_root 미만을 나타냅니다. idl_import_root 조건: 지정되지 않은 경우 idl_parcelablesidl_srcs이(가) 모두 지정된 경로를 찾을 수 있습니다.

를 참조하세요. 예시를 참조하세요.

idl_parcelables

라벨 목록 기본값은 []입니다.

가져오기로 제공할 Android IDL 정의 목록입니다. 이 파일은 모든 이 라이브러리에 종속되는 android_library 타겟 또는 전이적 클로저를 통해 작성되지만, Java로 변환되지 않음 컴파일할 수 있습니다

다음에 직접 해당하는 .aidl 파일만 이 라이브러리의 .java 소스 (예: 맞춤 Parcelable의 구현입니다. 그렇지 않으면 idl_srcs가 다음과 같아야 합니다. 있습니다.

AIDL 컴파일러가 이러한 파일을 찾을 수 있도록 적절하게 배치해야 합니다. idl_import_root 설명을 참조하세요. 를 참조하세요.

idl_preprocessed

라벨 목록 기본값은 []입니다.

가져오기로 제공할 전처리된 Android IDL 정의 목록입니다. 이 파일은 모든 이 라이브러리에 종속되는 android_library 타겟 또는 전이적 클로저를 통해 작성되지만, Java로 변환되지 않음 컴파일할 수 있습니다

다음에 직접 대응하는 .aidl 파일만 전처리됨 이 라이브러리의 .java 소스 (예: 맞춤 Parcelable의 구현) 그렇지 않은 경우에는 idl_srcs를 사용합니다. Java 인터페이스로 변환해야 하는 Android IDL 정의 및 idl_parcelable 사용 사전 처리되지 않은 AIDL 파일의 경우

idl_srcs

라벨 목록 기본값은 []입니다.

Java 인터페이스로 변환할 Android IDL 정의 목록입니다. Java 인터페이스가 생성된 후 함께 컴파일됩니다. srcs의 콘텐츠로 바꿉니다.

이 파일은 모든 이 라이브러리에 종속되는 android_library 타겟 또는 임시 폐쇄를 통해 이루어집니다.

AIDL 컴파일러가 이러한 파일을 찾을 수 있도록 적절하게 배치해야 합니다. idl_import_root 설명을 참조하세요. 를 참조하세요.

javacopts

문자열 목록 기본값은 []입니다.

이 타겟의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

manifest

라벨 기본값은 None입니다.

Android 매니페스트 파일의 이름으로, 일반적으로 AndroidManifest.xml입니다. resource_files 또는 애셋이 정의된 경우 정의되어야 합니다.

Boolean; 기본값은 False입니다.

런타임이 아닌 컴파일에만 이 라이브러리를 사용합니다. neverlink로 표시된 규칙의 출력은 다음에서 사용되지 않습니다. .apk 생성. 이 라이브러리는 런타임 환경을 만들 수 있습니다
plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 지정된 모든 java_plugin 플러그인 속성은 애플리케이션이 실행될 때마다 빌드됩니다 리소스 생성: 플러그인은 타겟.
proguard_specs

라벨 목록 기본값은 []입니다.

Proguard 사양으로 사용할 파일입니다. 이는 Proguard에서 사용할 사양 집합을 설명합니다. 지정된 경우 이 라이브러리에 따라 모든 android_binary 타겟에 추가됩니다. 여기에 포함된 파일에는 멱등적 규칙, 즉 -dontnote, -dontwarn, -keep으로 시작하는 규칙을 가정합니다. 다른 옵션은 android_binary의 proguard_specs를 사용하여 자동 논리가 아닌 병합을 보장해야 합니다.
resource_files

라벨 목록 기본값은 []입니다.

패키징할 리소스 목록입니다. 이것은 일반적으로 glob res 디렉터리
genrules에서 생성된 파일은 다음을 통해 참조할 수 있습니다. 라벨도 여기에 표시됩니다. 유일한 제한사항은 생성된 출력은 동일한 'res'에 있어야 합니다. 다른 디렉터리에 리소스 파일이 포함되어 있습니다

android_instrumentation_test

규칙 소스 보기
android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)

android_instrumentation_test 규칙은 Android 계측 테스트를 실행합니다. 데이터 커리큘럼 내의 에뮬레이터를 시작하고, 테스트 중인 애플리케이션과 테스트 애플리케이션을 설치하고, 테스트 패키지에 정의된 테스트를 실행할 수 있습니다.

test_app 속성은 테스트가 포함된 android_binary입니다. 이 android_binary을(를) 차례대로 다음을 통해 테스트 중인 android_binary 애플리케이션을 지정합니다. Instruments 속성 중 하나를 사용하세요.

# java/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_lib",
    srcs = ["Lib.java"],
    manifest = "LibraryManifest.xml",
    resource_files = glob(["res/**"]),
)

# The app under test
android_binary(
    name = "hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_lib"],
)
# javatests/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_test_lib",
    srcs = ["Tests.java"],
    deps = [
      "//java/com/samples/hello_world:hello_world_lib",
      ...  # test dependencies such as Espresso and Mockito
    ],
)

# The test app
android_binary(
    name = "hello_world_test_app",
    instruments = "//java/com/samples/hello_world:hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_test_lib"],
)

android_instrumentation_test(
    name = "hello_world_uiinstrumentation_tests",
    target_device = ":some_target_device",
    test_app = ":hello_world_test_app",
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

support_apks

라벨 목록 기본값은 []입니다.

계측 테스트가 시작되기 전에 기기에 설치할 다른 APK입니다.
target_device

라벨 필수

테스트를 실행해야 하는 android_device입니다.

이미 실행 중인 에뮬레이터나 실제 기기에서 테스트를 실행하려면 다음 인수: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

라벨 필수

테스트 클래스가 포함된 android_binary 타겟입니다. android_binary 타겟은 테스트할 타겟을 지정해야 합니다. instruments 속성

android_local_test

규칙 소스 보기
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)

이 규칙은 로컬에서 규칙 android_library개를 단위 테스트하기 위한 것입니다. (기기와는 다름) Android Robolectric 테스트 프레임워크에서 작동합니다. 자세한 내용은 Android Robolectric 사이트를 참고하세요. Robolectric 테스트를 작성할 수 있습니다.

암시적 출력 타겟

  • name.jar: 테스트의 Java 보관 파일입니다.
  • name-src.jar: 소스가 포함된 보관 파일 ('소스 jar')을 입력합니다.
  • name_deploy.jar: 적합한 Java 배포 보관 파일 (명시적으로 요청된 경우에만 빌드됨)입니다.

android_local_test와 함께 Robolectric을 사용하려면 다음을 추가하세요. Robolectric 저장소WORKSPACE 파일에 추가합니다.

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-bazel-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
이렇게 하면 Robolectric에 필요한 maven_jar 규칙을 가져옵니다. 그런 다음 각 android_local_test 규칙은 @robolectric//bazel:robolectric입니다. 아래 예를 참고하세요.

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:android-all",
    ],
)

android_library(
    name = "sample_test_lib",
    srcs = [
         "Lib.java",
    ],
    resource_files = glob(["res/**"]),
    manifest = "AndroidManifest.xml",
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

테스트할 라이브러리 목록 및 연결할 추가 라이브러리 목록 보낼 수 있습니다 전이적의 Android 규칙에서 선언된 모든 리소스, 애셋, 매니페스트 파일 테스트에서 이 속성의 클로저를 사용할 수 있습니다.

deps에서 허용되는 규칙 목록은 android_library입니다. aar_import, java_import, java_libraryjava_lite_proto_library.

srcs

라벨 목록 기본값은 []입니다.

대상을 만들기 위해 처리된 소스 파일의 목록입니다. 아래에 설명된 특별한 경우를 제외하고 필수입니다.

.java 유형의 srcs 파일이 컴파일됩니다. 가독성을 위해 생성된 .java 소스 파일을 srcs에 추가했습니다. 대신 종속된 규칙 이름을 다음과 같이 srcs에 넣습니다. 참조하세요.

.srcjar 유형의 srcs 파일이 압축해제되어 있습니다. 컴파일합니다 이것은 genrule 또는 빌드 확장 프로그램).

해당 기간 동안 다른 모든 파일은 무시됩니다. 위에 설명된 파일 형식의 파일이 하나 이상 있어야 합니다. 그렇지 않은 경우 오류가 발생합니다

srcs 속성은 필수이며 다음과 같은 경우일 수 없습니다. runtime_deps가 지정되었습니다.

custom_package

String; 기본값은 ""입니다.

R 클래스가 생성될 Java 패키지입니다. 기본적으로 패키지가 유추됩니다. BUILD 파일이 있는 디렉터리에서 삭제됩니다. 이 속성을 사용하는 경우 test_class도 사용해야 할 수 있습니다.
densities

문자열 목록 기본값은 []입니다.

APK 빌드 시 필터링할 밀도입니다. 해당하는 호환 화면 섹션이 아직 매니페스트에 포함된 상위 집합 StarlarkListing입니다.
enable_data_binding

Boolean; 기본값은 False입니다.

true인 경우 이 규칙은 데이터 바인딩 참조는 이 테스트에서 사용하는 데이터 바인딩이 사용 설정된 종속 항목에 사용됩니다. 제외 이 설정은 데이터 결합 종속 항목에 필요한 바이너리 수준 코드 생성이 없으므로 빌드 실패가 발생할 수 있습니다
javacopts

문자열 목록 기본값은 []입니다.

이 라이브러리의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

jvm_flags

문자열 목록 기본값은 []입니다.

이 바이너리를 실행하기 위해 생성된 래퍼 스크립트에 포함할 플래그 목록입니다. $(location) 적용 및 "Make 변수" 대체 Bourne 셸 토큰화.

Java 바이너리의 래퍼 스크립트에 CLASSPATH 정의가 포함됨 (종속된 모든 jar를 찾기 위해) 올바른 Java 인터프리터를 호출합니다. 래퍼 스크립트에 의해 생성된 명령줄에는 기본 클래스 다음에 "$@"가 와야 하므로 다른 클래스를 인수를 사용합니다. 그러나 명령어에서 클래스 이름 앞에 지정해야 합니다. 행입니다. jvm_flags의 콘텐츠가 래퍼에 추가됨 스크립트를 추가합니다.

이 속성은 *_deploy.jar영향을 미치지 않습니다. 출력됩니다.

manifest

라벨 기본값은 None입니다.

Android 매니페스트 파일의 이름으로, 일반적으로 AndroidManifest.xml입니다. resource_files 또는 애셋이 정의된 경우 또는 테스트 중인 라이브러리에는 minSdkVersion 태그가 있습니다.
manifest_values

사전: 문자열 -> String; 기본값은 {}입니다.

매니페스트에서 재정의할 값의 사전입니다. 다음에서 ${name}의 인스턴스 이 사전의 이름에 해당하는 값으로 대체됩니다. applicationId, versionCode, versionName minSdkVersion, targetSdkVersionmaxSdkVersion는 상응하는 속성도 재정의합니다. 매니페스트와 사용하여 SDK에 알려야 합니다. packageName는 무시되며 둘 중 하나에서 설정됩니다. 조건: applicationId 매니페스트의 패키지입니다. manifest_values를 사용하기 위해 규칙에 매니페스트가 없어도 됩니다.
nocompress_extensions

문자열 목록 기본값은 []입니다.

리소스 APK에 압축되지 않은 상태로 남겨둘 파일 확장자 목록입니다.
plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 이 규칙이 적용될 때마다 이 속성에 지정된 모든 java_plugin이(가) 실행됩니다. 빌드됩니다 라이브러리는 또한 종속 항목으로부터 플러그인을 상속할 수 있습니다. exported_plugins 리소스 이 규칙의 결과 jar에 포함됩니다.
resource_configuration_filters

문자열 목록 기본값은 []입니다.

리소스 구성 필터 목록(예: 'en') 이 포드는 클러스터의 'en'에 있는 앱에만 apk가 적용됩니다. 구성할 수 있습니다
resource_jars

라벨 목록 기본값은 []입니다.

지원 중단됨: 대신 java_import 및 deps 또는runtime_deps를 사용하세요.
resource_strip_prefix

String; 기본값은 ""입니다.

Java 리소스에서 삭제할 경로 프리픽스입니다.

지정된 경우 이 경로 접두어는 resources의 모든 파일에서 제거됩니다. 속성 리소스 파일이 이 디렉터리에 없으면 오류입니다. 그렇지 않은 경우 기본값인 경우 리소스 파일의 경로는 소스 파일의 Java 패키지로 로직을 사용합니다. 예를 들어 stuff/java/foo/bar/a.txt 위치는 foo/bar/a.txt입니다.

runtime_deps

라벨 목록 기본값은 []입니다.

런타임 시에만 최종 바이너리 또는 테스트에 사용할 수 있는 라이브러리입니다. 일반 deps와 마찬가지로 런타임 클래스 경로에 표시되지만 컴파일 시간 클래스 경로가 아닌 이들을 사용합니다. 런타임에만 필요한 종속 항목은 확인할 수 있습니다 종속 항목 분석 툴은 runtime_depsdeps.
stamp

Integer; 기본값은 0입니다.

빌드 정보를 바이너리로 인코딩할지 여부입니다. 가능한 값은 다음과 같습니다.
  • stamp = 1: --nostamp 빌드 이 사용하지 않는 것이 좋습니다. 그러면 원격 캐싱이 중단될 가능성이 있기 때문입니다. 바이너리 및 여기에 종속된 모든 다운스트림 작업을 처리합니다.
  • stamp = 0: 빌드 정보를 항상 상수 값으로 바꿉니다. 이 빌드 결과 캐싱이 잘 되고
  • stamp = -1: 빌드 정보의 삽입은 --[no]stamp 플래그

스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다.

test_class

String; 기본값은 ""입니다.

테스트 실행기가 로드할 Java 클래스입니다.

이 속성은 실행할 Java 클래스의 이름을 지정합니다. 확인할 수 있습니다 이 설정은 매우 드뭅니다. 이 인수를 생략하면 Java 클래스 이름이 이 name android_local_test 규칙이 사용됩니다. 테스트 클래스는 org.junit.runner.RunWith로 주석을 달아야 합니다.

use_launcher

Boolean; 기본값은 True입니다.

바이너리가 맞춤 런처를 사용해야 하는지 여부입니다.

이 속성을 false로 설정하면 launcher 속성 및 관련 --java_launcher 플래그 이 타겟에서 무시됩니다.

android_device

규칙 소스 보기
android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)

이 규칙은 주어진 지정할 수도 있습니다 이 에뮬레이터는 bazel 실행을 통해 시작할 수 있습니다. 생성된 스크립트를 직접 실행하여 실행합니다. 기존 android_device 규칙을 따를 수도 있습니다.

이 규칙은 bazel 테스트 및 blaze를 위한 --run_under 플래그에 적합한 대상입니다. 실행할 수 있습니다 에뮬레이터를 시작하고 테스트/실행 중인 타겟을 에뮬레이터에 복사합니다. 이를 테스트하거나 적절히 실행합니다.

android_device는 기본 system_image는 X86 기반이며 최대 I686 CPU 아키텍처에 최적화되어 있습니다. KVM을 사용하려면 다음을 추가하세요. tags = ['requires-kvm'] android_device 규칙에 추가합니다.

암시적 출력 타겟

  • name_images/userdata.dat: 에뮬레이터를 시작하기 위한 이미지 파일과 스냅샷이 포함되어 있습니다.
  • name_images/emulator-meta-data.pb: 에뮬레이터에 전달하는 데 필요한 직렬화된 정보가 포함되어 있습니다. 다시 시작합니다

다음 예는 android_device를 사용하는 방법을 보여줍니다. //java/android/helloandroid/BUILD에 다음 포함:

android_device(
    name = "nexus_s",
    cache = 32,
    default_properties = "nexus_s.properties",
    horizontal_resolution = 480,
    ram = 512,
    screen_density = 233,
    system_image = ":emulator_images_android_16_x86",
    vertical_resolution = 800,
    vm_heap = 32,
)

filegroup(
    name = "emulator_images_android_16_x86",
    srcs = glob(["androidsdk/system-images/android-16/**"]),
)

//java/android/helloandroid/nexus_s.properties에는 다음이 포함됩니다.

ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju

이 규칙은 이미지와 시작 스크립트를 생성합니다. 에뮬레이터를 시작할 수 있습니다. bazel run :nexus_s -- --action=start를 실행하여 로컬에 있는 명령어를 켭니다. 스크립트는 다음 플래그

  • --adb_port: adb를 노출할 포트입니다. adb를 실행하려는 경우 이는 adb connect를 실행할 포트입니다 있습니다.
  • --developers_port: 에뮬레이터의 Telnet 관리를 노출하는 포트입니다. 실행할 수 있습니다
  • --enable_display: true인 경우 디스플레이로 에뮬레이터를 시작합니다 (기본값은 false로 설정됩니다.
  • --action: 시작하거나 종료합니다.
  • --apks_to_install: 에뮬레이터에 설치할 APK 목록입니다.

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

cache

Integer; 필수

에뮬레이터 캐시 파티션의 크기(MB)입니다. 최소값은 16MB입니다.
default_properties

라벨 기본값은 None입니다.

에뮬레이터의 /default.prop에 배치할 단일 속성 파일입니다. 이렇게 하면 규칙 작성자가 에뮬레이터처럼 보이도록 에뮬레이터를 구성할 수 있습니다. 실제 장치 (특히 UserAgent 문자열 및 기타 애플리케이션 또는 서버가 원래 의도했던 것과 다르게 특정 기기) 이 파일의 속성이 읽기 전용보다 우선 적용됩니다. 속성(예: ro.product.model)
horizontal_resolution

Integer; 필수

에뮬레이션할 가로 화면 해상도(픽셀)입니다. 최솟값은 240입니다.
platform_apks

라벨 목록 기본값은 []입니다.

부팅 시 기기에 설치될 APK 목록입니다.
ram

Integer; 필수

기기에 에뮬레이션할 RAM 양(MB)입니다. 이는 기기에 설치된 특정 앱뿐만 아니라 전체 기기에 적용됩니다. 이 최소값은 64MB입니다
screen_density

Integer; 필수

에뮬레이션된 화면의 밀도입니다(인치당 픽셀 수). 최솟값은 30ppi입니다.
system_image

라벨 필수

다음 파일이 포함된 파일 그룹:
  • system.img: 시스템 파티션
  • kernel-qemu: 에뮬레이터가 로드할 Linux 커널
  • ramdisk.img: 부팅 시 사용할 initrd 이미지
  • userdata.img: 초기 사용자 데이터 파티션
  • source.properties: 이미지
를 통해 개인정보처리방침을 정의할 수 있습니다. 이러한 파일은 Android SDK의 일부이거나 서드 파티( Intel의 x86 이미지 제공).
vertical_resolution

Integer; 필수

에뮬레이션할 수직 화면 해상도(픽셀)입니다. 최솟값은 240입니다.
vm_heap

Integer; 필수

Android가 각 프로세스에 사용할 가상 머신 힙의 크기(MB)입니다. 최솟값은 16MB입니다.

android_ndk_repository

규칙 소스 보기
android_ndk_repository(name, api_level, path, repo_mapping)

Android NDK를 사용하여 네이티브로 Android 대상 빌드를 지원하도록 Bazel 구성 생성합니다.

android_ndk_repository의 이 구현은 구현했습니다. 버전 25 이상을 포함한 향후 NDK 버전에 대한 지원은 android_ndk_repository의 Starlark 버전에서 구현됩니다. 자세한 내용은 Starlark용 rules_android_ndk 있습니다.

Android용으로 빌드하려면android_sdk_repository WORKSPACE 파일.

자세한 내용은 Bazel과 함께 Android NDK를 사용하는 방법에 관한 전체 문서를 참조하세요.

android_ndk_repository(
    name = "androidndk",
)

위의 예는 $ANDROID_NDK_HOME에서 Android NDK를 찾아 지원하는 가장 높은 API 수준입니다.

android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)

위의 예에서는 작업 영역 내에 있는 Android NDK를 ./android-ndk-r20 JNI를 컴파일할 때 API 수준 24 라이브러리를 사용합니다. 생성합니다.

cpufeatures

Android NDK에는 cpufeatures 라이브러리 이는 런타임에 기기의 CPU를 감지하는 데 사용할 수 있습니다. 다음 예는 cpufeatures를 사용하는 방법을 알아봅니다

# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

api_level

Integer; 구성 불가 기본값은 0입니다.

빌드의 기준이 되는 Android API 수준입니다. 지정하지 않으면 최고 API 수준이 설치됨 사용됩니다.
path

String; 구성 불가 기본값은 ""입니다.

Android NDK의 절대 또는 상대 경로입니다. 이 속성 또는 $ANDROID_NDK_HOME 환경 변수를 설정해야 합니다.

Android NDK는 다음에서 다운로드할 수 있습니다. Android 개발자 사이트 를 참고하세요.

repo_mapping

사전: 문자열 -> String; 기본값은 {}입니다.

로컬 저장소 이름에서 전역 저장소 이름으로의 사전입니다. 이를 통해 이 저장소의 종속 항목에 대한 작업공간 종속 항목 해결.

예를 들어 "@foo": "@bar" 항목은 언제든지 저장소는 "@foo"에 종속됩니다 (예: "@foo//some:target")가 포함된 경우 전역에서 선언된 "@bar" ("@bar//some:target")입니다.

android_sdk_repository

규칙 소스 보기
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

로컬 Android SDK를 사용하여 Android 대상 빌드를 지원하도록 Bazel을 구성합니다.

Bazel용 Android SDK를 설정하려면 최소한 android_sdk_repository 규칙을 입력해야 합니다. 이름이 'androidsdk'인 경우 WORKSPACE 파일에서 $ANDROID_HOME를 설정합니다. 환경 변수를 Android SDK의 경로로 설정합니다. Bazel은 가장 높은 Android API 수준 사용 빌드 도구 버전이 포함되어 있습니다.
android_sdk_repository(
    name = "androidsdk",
)

재현 가능한 빌드를 보장하기 위해 path, api_level, build_tools_version 속성은 특정 값으로 설정할 수 있습니다. 빌드가 실패하는 경우 Android SDK에 지정된 API 수준 또는 빌드 도구 버전이 설치되어 있지 않습니다.

android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)

위의 예는 Android SDK에 작업공간 기준 경로를 사용하는 방법도 보여줍니다. 이것은 Android SDK가 Bazel 작업공간의 일부인 경우 (예: 제어).

지원 라이브러리

지원 라이브러리는 Android SDK Manager에서 "Android 지원 저장소"로 제공됩니다. 이는 Support 및 AppCompat 라이브러리와 같이 버전이 지정된 일반적인 Android 라이브러리 세트입니다. 로컬 Maven 리포지토리로 패키징됩니다. android_sdk_repository는 Bazel을 생성합니다. 이러한 각 라이브러리의 대상은 android_binaryandroid_library 대상

생성된 타겟의 이름은 @androidsdk//${group}:${artifact}-${version} 형식의 Android 지원 저장소입니다. 다음 예는 android_library이 v7 appcompat 라이브러리를 통해 생성할 수 있습니다

android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

api_level

Integer; 구성 불가 기본값은 0입니다.

기본적으로 빌드할 Android API 수준입니다. 지정하지 않으면 가장 높은 API 수준입니다. 설치 된 파일이 사용됩니다.

지정된 빌드에 사용되는 API 수준은 android_sdk에서 재정의할 수 있습니다. 플래그. android_sdk_repositoryandroid_sdk 타겟을 생성합니다. 이름이 @androidsdk//:sdk-${level}인 SDK에 설치된 각 API 수준 이 속성이 지정되었는지 여부입니다. 예를 들어 기본이 아닌 API에서 빌드하는 경우 등급: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app

android_sdk_repository 에 의해 생성된 모든 android_sdk 타겟을 보려면 bazel query "kind(android_sdk, @androidsdk//...)"를 실행하면 됩니다.

build_tools_version

String; 구성 불가 기본값은 ""입니다.

Android SDK 내에서 사용할 Android 빌드 도구의 버전입니다. 지정하지 않으면 설치된 최신 빌드 도구 버전이 사용됩니다.

Bazel에는 빌드 도구 버전 30.0.0 이상이 필요합니다.

path

String; 구성 불가 기본값은 ""입니다.

Android SDK의 절대 또는 상대 경로입니다. 이 속성 또는 $ANDROID_HOME 환경 변수를 설정해야 합니다.

Android SDK는 다음 위치에서 다운로드할 수 있습니다. Android 개발자 사이트를 참조하세요.

repo_mapping

사전: 문자열 -> String; 기본값은 {}입니다.

로컬 저장소 이름에서 전역 저장소 이름으로의 사전입니다. 이를 통해 이 저장소의 종속 항목에 대한 작업공간 종속 항목 해결.

예를 들어 "@foo": "@bar" 항목은 언제든지 저장소는 "@foo"에 종속됩니다 (예: "@foo//some:target")가 포함된 경우 전역에서 선언된 "@bar" ("@bar//some:target")입니다.