- --adb_port: Порт для экспонирования adb. Если вы хотите выполнить команды adb для эмулятора, это порт, к которому вы должны подключиться через adb connect.
- --emulator_port: Порт для экспонирования консоли управления telnet эмулятора.
- --enable_display: Запускает эмулятор с дисплеем, если значение true (по умолчанию false).
- --action: Либо start, либо kill.
- --apks_to_install: список apk-файлов для установки на эмулятор.
Аргументы
| Атрибуты |
name | Name; required Уникальное имя для данного целевого объекта. |
cache | Integer; required Размер кэша эмулятора в мегабайтах. Минимальное значение — 16 мегабайт. |
default_properties | Label; optional Один файл свойств, который будет помещен в /default.prop на эмуляторе. Это позволяет автору правила дополнительно настроить эмулятор, чтобы он больше походил на реальное устройство (в частности, управлять строками UserAgent и другим поведением, которое может заставить приложение или сервер вести себя иначе на конкретном устройстве). Свойства в этом файле переопределят свойства только для чтения, обычно устанавливаемые эмулятором, такие как ro.product.model. |
horizontal_resolution | Integer; required Горизонтальное разрешение экрана в пикселях для эмуляции. Минимальное значение — 240. |
platform_apks | List of labels; optional Список apk-файлов, которые будут установлены на устройстве во время загрузки. |
ram | Integer; required Количество оперативной памяти в мегабайтах для эмуляции устройства. Это относится ко всему устройству, а не только к конкретному приложению, установленому на устройстве. Минимальное значение — 64 мегабайта. |
screen_density | Integer; required Плотность эмулируемого экрана в пикселях на дюйм. Минимальное значение — 30 ppi. |
system_image | Label; required Набор файлов, содержащий: - system.img: системный раздел
- kernel-qemu: ядро Linux, которое загрузит эмулятор
- ramdisk.img: образ initrd для использования при загрузке
- userdata.img: начальный раздел userdata
- source.properties: файл свойств, содержащий информацию о файлах
Эти файлы являются частью Android SDK или предоставляются сторонними организациями (например, Intel предоставляет x86-образы). |
vertical_resolution | Integer; required Вертикальное разрешение экрана в пикселях для эмуляции. Минимальное значение — 240. |
vm_heap | Integer; required Размер виртуальной кучи в мегабайтах, которую Android будет использовать для каждого процесса. Минимальное значение — 16 мегабайт. |
android_ndk_repository
android_ndk_repository(name, api_level, path, repo_mapping)
Настраивает Bazel для использования Android NDK для поддержки построения целевых Android-объектов с нативным кодом.
Обратите внимание, что для построения для Android также требуется правило android_sdk_repository в вашем файле WORKSPACE.
Для получения дополнительной информации, ознакомьтесь с полной документацией по использованию Android NDK с Bazel.
Примеры
android_ndk_repository(
name = "androidndk",
)
Приведенный выше пример определит ваш Android NDK из $ANDROID_NDK_HOME и обнаружит максимальный уровень API, который он поддерживает.
android_ndk_repository(
name = "androidndk",
path = "./android-ndk-r20",
api_level = 24,
)
Приведенный выше пример будет использовать Android NDK, расположенный внутри вашего рабочего пространства в ./android-ndk-r20. Он будет использовать библиотеки API уровня 24 при компиляции вашего JNI-кода.
cpufeatures
Android NDK содержит библиотеку cpufeatures, которая может использоваться для определения процессора устройства во время выполнения. Следующий пример демонстрирует, как использовать cpufeatures с Bazel.
# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
name = "jni",
srcs = ["jni.cc"],
deps = ["@androidndk//:cpufeatures"],
)
Аргументы
| Атрибуты |
name | Name; required Уникальное имя для данного целевого объекта. |
api_level | Integer; optional; nonconfigurable; default is 0 Уровень Android API для построения. Если не указан, будет использован самый высокий установленный уровень API. |
path | String; optional; nonconfigurable Абсолютный или относительный путь к Android NDK. Должен быть указан либо этот атрибут, либо переменная окружения $ANDROID_NDK_HOME. Android NDK можно загрузить с сайта разработчиков Android.
|
repo_mapping | Dictionary: String -> String; optional Словарь, сопоставляющий локальное имя репозитория с глобальным именем репозитория. Это позволяет контролировать разрешение зависимостей рабочего пространства для зависимостей этого репозитория. Например, запись "@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)
Настраивает Bazel для использования локального Android SDK для поддержки построения целевых Android-объектов.
Примеры
Для настройки Android SDK для Bazel необходимо поместить правило
android_sdk_repository с именем "androidsdk" в ваш файл
WORKSPACE и установить переменную окружения
$ANDROID_HOME в путь к вашему Android SDK. По умолчанию Bazel будет использовать самый высокий уровень API Android и версию инструментов сборки, установленные в Android SDK.
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 Repository". Это версионированная совокупность общих библиотек Android, таких как библиотеки Support и AppCompat, упакованная как локальный репозиторий Maven. android_sdk_repository генерирует целевые Bazel-объекты для каждой из этих библиотек, которые могут использоваться в зависимостях целевых объектов android_binary и android_library.
Имена сгенерированных целевых объектов получены из координат Maven библиотек в Android Support Repository, отформатированные как @androidsdk//${group}:${artifact}-${version}. Следующий пример демонстрирует, как целевой объект android_library может зависеть от версии 25.0.0 библиотеки 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 | Name; required Уникальное имя для данного целевого объекта. |
api_level | Integer; optional; nonconfigurable; default is 0 Уровень API Android для построения по умолчанию. Если не указан, используется самый высокий установленный уровень API. Уровень API для конкретной сборки можно переопределить с помощью флага android_sdk. android_sdk_repository создает целевой объект android_sdk для каждого установленного уровня API в SDK с именем @androidsdk//:sdk-${level}, независимо от того, указан ли этот атрибут. Например, для построения по нестандартному уровню API: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.
Чтобы просмотреть все целевые объекты android_sdk , сгенерированные android_sdk_repository
, можно выполнить bazel query "kind(android_sdk, @androidsdk//...)".
|
build_tools_version | String; optional; nonconfigurable Версия инструментов сборки Android, используемых из Android SDK. Если не указана, используется последняя установленная версия инструментов сборки. Bazel требует инструменты сборки версии 30.0.0 или выше.
|
path | String; optional; nonconfigurable Абсолютный или относительный путь к Android SDK. Необходимо указать либо этот атрибут, либо переменную окружения $ANDROID_HOME. Android SDK можно загрузить с сайта разработчиков Android.
|
repo_mapping | Dictionary: String -> String; optional Словарь, сопоставляющий локальное имя репозитория с глобальным именем репозитория. Это позволяет контролировать разрешение зависимостей рабочего пространства для зависимостей этого репозитория. Например, запись "@foo": "@bar" объявляет, что всякий раз, когда этот репозиторий зависит от "@foo" (например, при зависимости от "@foo//some:target"), он должен разрешать эту зависимость в глобально объявленном "@bar" ("@bar//some:target").
|