규칙
- <ph type="x-smartling-placeholder"></ph> android_binary
- <ph type="x-smartling-placeholder"></ph> aar_import
- <ph type="x-smartling-placeholder"></ph> android_library
- <ph type="x-smartling-placeholder"></ph> android_instrumentation_test
- <ph type="x-smartling-placeholder"></ph> android_local_test
- <ph type="x-smartling-placeholder"></ph> android_device
- <ph type="x-smartling-placeholder"></ph> android_ndk_repository
- <ph type="x-smartling-placeholder"></ph> android_sdk_repository
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 애플리케이션 디버그 키로 서명된 <ph type="x-smartling-placeholder"></ph> 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
|
assets 의 파일 경로를 제공하는 문자열입니다.
assets 및 assets_dir 쌍은 패키징된 항목을 설명합니다.
두 속성 중 하나만 제공하거나 둘 다 제공하지 않아야 합니다.
|
crunch_png
|
|
custom_package
|
|
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
|
|
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
|
AndroidManifest.xml 입니다.
resource_files 또는 애셋이 정의된 경우 정의되어야 합니다.
|
manifest_values
|
|
multidex
|
가능한 값은 다음과 같습니다. <ph type="x-smartling-placeholder">
|
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
수행된 분석 및 삭제에 대해 자세히 설명하는 정보도 생성됩니다.
가능한 값은 다음과 같습니다.
|
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
|
.aar 파일입니다.
|
exports
|
|
srcjar
|
|
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
|
assets 의 파일 경로를 제공하는 문자열입니다.
assets 및 assets_dir 쌍은 패키징된 항목을 설명합니다.
두 속성 중 하나만 제공하거나 둘 다 제공하지 않아야 합니다.
|
custom_package
|
|
enable_data_binding
|
데이터 결합으로 Android 앱을 빌드하려면 다음 작업도 해야 합니다.
|
exported_plugins
|
java_plugin 목록 (예: 주석)
프로세서)가 포함되어 있습니다.
지정된 |
exports
|
exports 속성을 통해 도달한 모든 규칙의 종료
은
exports 로 타겟팅할 수 있습니다.
|
exports_manifest
|
android_binary 대상으로 내보낼지 여부
이 타겟에 종속된 광고 항목을
가져올 수 있습니다 uses-permissions 속성은 내보내지지 않습니다.
|
idl_import_root
|
이 경로는 다음과 같은 유휴 소스를 처리할 때 가져오기 루트로 사용됩니다. 이 라이브러리에 종속됩니다.
를 참조하세요. 예시를 참조하세요. |
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_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
|
|
target_device
|
테스트를 실행해야 하는 android_device입니다. 이미 실행 중인 에뮬레이터나 실제 기기에서 테스트를 실행하려면
다음 인수:
|
test_app
|
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/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-<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:robolectric", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
인수
속성 | |
---|---|
name |
이 대상의 고유한 이름입니다. |
deps
|
|
srcs
|
해당 기간 동안 다른 모든 파일은 무시됩니다. 위에 설명된 파일 형식의 파일이 하나 이상 있어야 합니다. 그렇지 않은 경우 오류가 발생합니다
|
custom_package
|
test_class 도 사용해야 할 수 있습니다.
|
densities
|
|
enable_data_binding
|
|
javacopts
|
이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다. |
jvm_flags
|
Java 바이너리의 래퍼 스크립트에 CLASSPATH 정의가 포함됨
(종속된 모든 jar를 찾기 위해) 올바른 Java 인터프리터를 호출합니다.
래퍼 스크립트에 의해 생성된 명령줄에는
기본 클래스 다음에 이 속성은 |
manifest
|
AndroidManifest.xml 입니다.
resource_files 또는 애셋이 정의된 경우 또는
테스트 중인 라이브러리에는 minSdkVersion 태그가 있습니다.
|
manifest_values
|
applicationId , versionCode , versionName
minSdkVersion , targetSdkVersion 및
maxSdkVersion 는 상응하는 속성도 재정의합니다.
매니페스트와
사용하여 SDK에 알려야 합니다. packageName 는 무시되며 둘 중 하나에서 설정됩니다.
조건: applicationId
매니페스트의 패키지입니다.
manifest_values를 사용하기 위해 규칙에 매니페스트가 없어도 됩니다.
|
nocompress_extensions
|
|
plugins
|
java_plugin 이(가) 실행됩니다.
빌드됩니다 라이브러리는 또한 종속 항목으로부터 플러그인을 상속할 수 있습니다.
exported_plugins 리소스
이 규칙의 결과 jar에 포함됩니다.
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
지정된 경우 이 경로 접두어는 |
runtime_deps
|
deps 와 마찬가지로 런타임 클래스 경로에 표시되지만
컴파일 시간 클래스 경로가 아닌 이들을 사용합니다. 런타임에만 필요한 종속 항목은
확인하시기 바랍니다. 종속 항목 분석 툴은
runtime_deps 및 deps
|
stamp
|
스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다. |
test_class
|
이 속성은 실행할 Java 클래스의 이름을 지정합니다.
확인할 수 있습니다 이 설정은 매우 드뭅니다. 이 인수를 생략하면 Java 클래스
이름이 이 |
use_launcher
|
이 속성을 false로 설정하면
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
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
android_ndk_repository
android_ndk_repository(name, api_level, path, repo_mapping)
Android NDK를 사용하여 네이티브로 Android 대상 빌드를 지원하도록 Bazel 구성 있습니다.
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
|
|
path
|
$ANDROID_NDK_HOME 환경 변수를 설정해야 합니다.
Android NDK는 다음에서 다운로드할 수 있습니다. Android 개발자 사이트 를 참고하세요. |
repo_mapping
|
예를 들어 |
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
|
Bazel에는 빌드 도구 버전 30.0.0 이상이 필요합니다. |
path
|
$ANDROID_HOME 환경 변수를 설정해야 합니다.
Android SDK는 다음 위치에서 다운로드할 수 있습니다. Android 개발자 사이트를 참조하세요. |
repo_mapping
|
예를 들어 |