ルール
- <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 アーカイブ ターゲットの推移的クロージングdeploy jar には、Deployment によって見つかる このターゲットのランタイム クラスパスを検索したクラスローダー サポートします
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 のルールの例は、Android アプリの examples/android ディレクトリにあります。
Bazel ソースツリー。
引数
| 属性 | |
|---|---|
name |
このターゲットの一意の名前。 |
deps
|
android_library、
java_library(android 制約あり)と
cc_library のラッピングまたは .so ネイティブ ライブラリの作成
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
|
最終的なアプリでは、シャードごとに少なくとも 1 つの 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 または assets が定義されている場合は定義する必要があります。
|
manifest_values
|
|
multidex
|
可能な値: <ph type="x-smartling-placeholder">
|
nocompress_extensions
|
|
package_id
|
詳しくは、AAPT2 の |
plugins
|
java_plugin ごと
プラグイン属性が実行時に
作成されます。生成するリソース
プラグインは terraform.tfvars.json、
ターゲットです。
|
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: ソース(「ソース JAR」)を入力します。name.aar: Android の「aar」Java アーカイブを含むバンドル リソースを管理できます。推移的クロージャは含まれていない。
例
Android のルールの例は、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、
java_library(android 制約あり)と
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 ソースを処理するときにインポート ルートとして使用されます。 このライブラリに依存します
<ph type="x-smartling-placeholder"></ph>をご覧ください。 例をご覧ください。 |
idl_parcelables
|
android_library ターゲットを直接指定します
Java には変換されません。ただし、Java には変換されません。
定義できます。
直接対応する これらのファイルは、aidl コンパイラが見つけられるよう適切に配置する必要があります。 idl_import_root の説明をご覧ください。 をご覧ください。 |
idl_preprocessed
|
android_library ターゲットを直接指定します
Java には変換されません。ただし、Java には変換されません。
定義できます。
直接対応する |
idl_srcs
|
srcs の内容に置き換えます。
これらのファイルは、任意のプラットフォームで
このライブラリに依存する これらのファイルは、aidl コンパイラが見つけられるよう適切に配置する必要があります。 idl_import_root の説明をご覧ください。 をご覧ください。 |
javacopts
|
これらのコンパイラ オプションは、グローバル コンパイラ オプションの後に javac に渡されます。 |
manifest
|
AndroidManifest.xml)。
resource_files または assets が定義されている場合は定義する必要があります。
|
neverlink
|
neverlink とマークされたルールの出力は、次では使用されません
.apk の作成。ライブラリを提供する場合に便利
実行時の状態にします。
|
plugins
|
java_plugin ごと
プラグイン属性が実行時に
作成されます。生成するリソース
プラグインは terraform.tfvars.json、
ターゲットです。
|
proguard_specs
|
android_binary ターゲットに追加されます。
ここに含めるファイルには、べき等ルール(-dontnote、-dontwarn、
-keep で始まるルールを定義します。その他のオプションは
android_binary の proguard_specs: tautological 以外のマージを保証します。
|
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()
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
|
他のファイルはすべて無視され、 上記のファイル形式のファイルが少なくとも 1 つある。それ以外の場合 エラーが発生します。
|
custom_package
|
test_class も使用する必要があります。
|
densities
|
|
enable_data_binding
|
|
javacopts
|
これらのコンパイラ オプションは、グローバル コンパイラ オプションの後に javac に渡されます。 |
jvm_flags
|
Java バイナリのラッパー スクリプトに CLASSPATH 定義が含まれている
(依存する jar をすべて見つけるため)、適切な Java インタープリタを呼び出します。
ラッパー スクリプトによって生成されたコマンドラインには、
メインクラスの後に この属性は |
manifest
|
AndroidManifest.xml)。
resource_files または assets が定義されている場合、または
テスト対象のライブラリには minSdkVersion タグが含まれています。
|
manifest_values
|
applicationId さん、versionCode さん、versionName さん、
minSdkVersion、targetSdkVersion、
maxSdkVersion は、対応する属性もオーバーライドします
マニフェスト ファイルと
use-sdk タグを使用します。packageName は無視され、次のいずれかから設定されます
次の場合は applicationId
パッケージを指定または変更できます。
manifest_values を使用するために、ルールにマニフェストは必要ありません。
|
nocompress_extensions
|
|
plugins
|
java_plugin が実行されます。
構築します。ライブラリは、使用する依存関係からプラグインを継承し、
exported_plugins。リソース
生成 AI は、このルールの生成される 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)
このルールにより、指定されたデバイスで構成された Android Emulator が作成されます。 仕様。このエミュレータは bazel 実行経由で起動できます 生成されたスクリプトを直接実行することもできます。推奨されるのは、 既存の android_device ルールに基づいて実装することをおすすめします。
このルールは、Bazel テストと Blaze に対する --run_under フラグのターゲットとして あります。エミュレータを起動し、テストまたは実行しているターゲットをエミュレータにコピーします。 必要に応じてテストまたは実行します
android_device は、基盤となる KVM が
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 を発行するポートです。 できます。
- --emulator_port: エミュレータの Telnet 管理を公開するポート オンにします。
- --enable_display: true の場合にエミュレータをディスプレイで起動します(デフォルト false に設定します)。
- --action: start または kill のいずれか。
- --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 ファイル。
詳しくは、 Android NDK と Bazel の使用に関するドキュメント全文をご覧ください。
例
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 を検出するために使用できます。次の例は、BigQuery の Bazel による 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 ターゲットのビルドをサポートするローカル Android SDK を使用するように Bazel を構成します。
例
Bazel 用の Android SDK をセットアップするために最低限必要なのは、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 属性は特定の値に設定できます。次の場合、ビルドは失敗します。
指定された API レベルまたはビルドツール バージョンが Android SDK にインストールされていません。
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」として入手できます。
Support ライブラリや AppCompat ライブラリなど、一般的な Android ライブラリのバージョン管理されたセットです。
ローカルの Maven リポジトリとしてパッケージ化されていますandroid_sdk_repository が Bazel を生成します
各ライブラリのターゲットを使用でき、依存関係の
android_binary ターゲットと android_library ターゲット。
生成されるターゲットの名前は、
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 |
このターゲットの一意の名前。 |
api_level
|
特定のビルドに使用される API レベルは、
|
build_tools_version
|
Bazel には、バージョン 30.0.0 以降のビルドツールが必要です。 |
path
|
$ANDROID_HOME 環境変数を設定する必要があります。
Android SDK は次の場所からダウンロードできます。 Android デベロッパー サイトをご覧ください。 |
repo_mapping
|
たとえば、エントリ |