Android 규칙

<ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 를 참조하세요. 1박 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5 에 대해 자세히 알아보세요.

규칙

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

부울; 기본값은 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

정수; 기본값은 1입니다.

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

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

dexopts

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

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

부울; 기본값은 False입니다.

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

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

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

정수; 구성 불가 기본값은 -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

정수; 기본값은 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

부울; 구성 불가 기본값은 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

정수; 기본값은 -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 플래그가 포함됩니다.

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.exports입니다. 종속 항목 내보내기에 대한 정보). 그러나 이 동작은 지원 중단 예정 그것에 의존하지 않도록 하세요.

assets

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

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

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

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

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

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

부울; 기본값은 False입니다.

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

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

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

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

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

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

exports

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

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

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

exports_manifest

정수; 기본값은 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 또는 애셋이 정의된 경우 정의되어야 합니다.

부울; 기본값은 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_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

정수; 구성 불가 기본값은 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")입니다.