규칙
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
|
라벨 목록 기본값은
|
assets
|
라벨 목록 기본값은 glob
assets 디렉터리 또한 다른 규칙(
파일) 또는 다른 패키지의 내보낸 파일을 다운로드할 수 있습니다. 단, 이러한 모든 파일이
assets_dir 디렉터리에 있습니다.
|
assets_dir
|
String; 기본값은 assets 의 파일 경로를 제공하는 문자열입니다.
assets 및 assets_dir 쌍은 패키징된 항목을 설명합니다.
두 속성 중 하나만 제공하거나 둘 다 제공하지 않아야 합니다.
|
crunch_png
|
부울; 기본값은 |
custom_package
|
String; 기본값은 |
debug_key
|
라벨 기본값은 경고: 프로덕션 키는 사용하지 마세요. 엄격하게 보호되며 소스 트리에 보관되지 않습니다. |
debug_signing_keys
|
라벨 목록 기본값은 경고: 프로덕션 키는 사용하지 마세요. 엄격하게 보호되며 소스 트리에 보관되지 않습니다. |
debug_signing_lineage_file
|
라벨 기본값은 경고: 프로덕션 키는 사용하지 마세요. 엄격하게 보호되며 소스 트리에 보관되지 않습니다. |
densities
|
문자열 목록 기본값은 |
dex_shards
|
정수; 기본값은 각 샤드는 최종 앱에서 하나 이상의 dex를 얻습니다. 따라서 릴리스 바이너리에는 1을 초과하여 설정하지 않는 것이 좋습니다. |
dexopts
|
문자열 목록 기본값은 |
enable_data_binding
|
부울; 기본값은 데이터 결합으로 Android 앱을 빌드하려면 다음 작업도 해야 합니다.
|
incremental_dexing
|
정수; 구성 불가 기본값은 |
instruments
|
라벨 기본값은 계측할 이 속성을 설정하면 |
javacopts
|
문자열 목록 기본값은 이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다. |
key_rotation_min_sdk
|
String; 기본값은 |
main_dex_list
|
라벨 기본값은 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
|
문자열 목록 기본값은 |
main_dex_proguard_specs
|
라벨 목록 기본값은 multidex 속성이 legacy 로 설정된 경우에만 허용됩니다.
|
manifest
|
라벨 필수 Android 매니페스트 파일의 이름으로, 일반적으로AndroidManifest.xml 입니다.
resource_files 또는 애셋이 정의된 경우 정의되어야 합니다.
|
manifest_values
|
사전: 문자열 -> String; 기본값은
매니페스트의 모든
|
multidex
|
String; 기본값은 가능한 값은 다음과 같습니다.
|
nocompress_extensions
|
문자열 목록 기본값은 |
package_id
|
정수; 기본값은 자세한 내용은 AAPT2의 |
plugins
|
라벨 목록 기본값은 java_plugin
플러그인 속성은 애플리케이션이 실행될 때마다
빌드됩니다 리소스 생성:
플러그인은
타겟.
|
proguard_apply_dictionary
|
라벨 기본값은 |
proguard_apply_mapping
|
라벨 기본값은 proguard_generate_mapping 에 의해 생성된 매핑 파일은
동일한 매핑을 새 빌드에 적용하는 데 재사용됩니다.
|
proguard_generate_mapping
|
부울; 구성 불가 기본값은 proguard_specs 가 다음과 같은 경우에만 생성됩니다.
지정합니다. 이 파일에는 원본과
난독화된 클래스, 메서드 및 필드 이름을 사용합니다.
경고: 이 속성을 사용하는 경우 Proguard
사양에는 |
proguard_specs
|
라벨 목록 기본값은 |
resource_configuration_filters
|
문자열 목록 기본값은 en_XA 또는 ar_XB 유사 언어
|
resource_files
|
라벨 목록 기본값은 glob
res 디렉터리
genrules에서 생성된 파일은 다음을 통해 참조할 수 있습니다. 라벨도 여기에 표시됩니다. 유일한 제한사항은 생성된 출력은 동일한 ' res '에 있어야 합니다. 다른 디렉터리에
리소스 파일이 포함되어 있습니다
|
shrink_resources
|
정수; 기본값은 manifest 및 resource_files 속성) ProGuard가 필요합니다.
Gradle 리소스 축소기와 거의 동일한 방식으로 작동합니다.
(https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
주목할 만한 차이점:
name_files/resource_shrinker.log
수행된 분석 및 삭제에 대해 자세히 설명하는 정보도 생성됩니다.
가능한 값은 다음과 같습니다.
|
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_library 및
cc_library 네이티브 라이브러리 .so 래핑 또는 생성
대상 플랫폼용입니다.
|
srcs
|
라벨 목록 기본값은 .java 또는 .srcjar 파일의 목록은
타겟이 생성됩니다
|
assets
|
라벨 목록 기본값은 glob
assets 디렉터리 또한 다른 규칙(
파일) 또는 다른 패키지의 내보낸 파일을 다운로드할 수 있습니다. 단, 이러한 모든 파일이
assets_dir 디렉터리에 있습니다.
|
assets_dir
|
String; 기본값은 assets 의 파일 경로를 제공하는 문자열입니다.
assets 및 assets_dir 쌍은 패키징된 항목을 설명합니다.
두 속성 중 하나만 제공하거나 둘 다 제공하지 않아야 합니다.
|
custom_package
|
String; 기본값은 |
enable_data_binding
|
부울; 기본값은 데이터 결합으로 Android 앱을 빌드하려면 다음 작업도 해야 합니다.
|
exported_plugins
|
라벨 목록 기본값은 java_plugin 목록 (예: 주석)
프로세서)가 포함되어 있습니다.
지정된 |
exports
|
라벨 목록 기본값은 exports 속성을 통해 도달한 모든 규칙의 종료
은
exports 로 타겟팅할 수 있습니다.
|
exports_manifest
|
정수; 기본값은 android_binary 대상으로 내보낼지 여부
이 타겟에 종속된 광고 항목을
가져올 수 있습니다 uses-permissions 속성은 내보내지지 않습니다.
|
idl_import_root
|
String; 기본값은 이 경로는 다음과 같은 유휴 소스를 처리할 때 가져오기 루트로 사용됩니다. 이 라이브러리에 종속됩니다.
를 참조하세요. 예시를 참조하세요. |
idl_parcelables
|
라벨 목록 기본값은 android_library 타겟
또는 전이적 클로저를 통해 작성되지만, Java로 변환되지 않음
컴파일할 수 있습니다
다음에 직접 해당하는 AIDL 컴파일러가 이러한 파일을 찾을 수 있도록 적절하게 배치해야 합니다. idl_import_root 설명을 참조하세요. 를 참조하세요. |
idl_preprocessed
|
라벨 목록 기본값은 android_library 타겟
또는 전이적 클로저를 통해 작성되지만, Java로 변환되지 않음
컴파일할 수 있습니다
다음에 직접 대응하는 |
idl_srcs
|
라벨 목록 기본값은 srcs 의 콘텐츠로 바꿉니다.
이 파일은 모든
이 라이브러리에 종속되는 AIDL 컴파일러가 이러한 파일을 찾을 수 있도록 적절하게 배치해야 합니다. idl_import_root 설명을 참조하세요. 를 참조하세요. |
javacopts
|
문자열 목록 기본값은 이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다. |
manifest
|
라벨 기본값은 AndroidManifest.xml 입니다.
resource_files 또는 애셋이 정의된 경우 정의되어야 합니다.
|
neverlink
|
부울; 기본값은 neverlink 로 표시된 규칙의 출력은 다음에서 사용되지 않습니다.
.apk 생성. 이 라이브러리는
런타임 환경을 만들 수 있습니다
|
plugins
|
라벨 목록 기본값은 java_plugin
플러그인 속성은 애플리케이션이 실행될 때마다
빌드됩니다 리소스 생성:
플러그인은
타겟.
|
proguard_specs
|
라벨 목록 기본값은 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_binary
및 android_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
|
정수; 구성 불가 기본값은 지정된 빌드에 사용되는 API 수준은
|
build_tools_version
|
String; 구성 불가 기본값은 Bazel에는 빌드 도구 버전 30.0.0 이상이 필요합니다. |
path
|
String; 구성 불가 기본값은 $ANDROID_HOME 환경 변수를 설정해야 합니다.
Android SDK는 다음 위치에서 다운로드할 수 있습니다. Android 개발자 사이트를 참조하세요. |
repo_mapping
|
사전: 문자열 -> String; 기본값은 예를 들어 |