| Атрибуты |
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 Размер виртуальной кучи (heap) в мегабайтах, которую 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"). |