| Атрибуты |
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. При компиляции кода JNI будут использоваться библиотеки уровня API 24.
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 будет использовать самый высокий уровень Android API и версию инструментов построения, установленных в 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 как "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 Уровень Android API, для которого будет выполняться построение по умолчанию. Если не указано, будет использован самый высокий установленный уровень 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").
|