ルール
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- 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: デバッグキーで署名され、 zipaligned された Android アプリケーション パッケージ ファイル。アプリケーションの開発とデバッグに使用できます。デバッグキーで署名されたアプリはリリースできません。
- name_unsigned.apk: 上記のファイルの署名なしバージョン。一般公開前にリリースキーで署名できます。
- name_deploy.jar: このターゲットの推移閉包を含む Java アーカイブ。- デプロイ jar には、このターゲットのランタイム クラスパスを最初から最後まで検索するクラスローダーによって検出されるすべてのクラスが含まれています。 
- name_proguard.jar:- name_deploy.jarで ProGuard を実行した結果を含む Java アーカイブ。この出力は、proguard_specs 属性が指定されている場合にのみ生成されます。
- name_proguard.map:- name_deploy.jarで ProGuard を実行した結果のマッピング ファイル。この出力は、proguard_specs 属性が指定され、proguard_generate_mapping または shrink_resources が設定されている場合にのみ生成されます。
例
Android ルールの例は、Bazel ソースツリーの examples/android ディレクトリにあります。
引数
| 属性 | |
|---|---|
| name | 名前(必須) このターゲットの一意の名前。 | 
| deps | ラベルのリスト。デフォルトは  android_library、android制約付きのjava_library、Android ターゲット プラットフォーム用の.soネイティブ ライブラリをラップまたは生成するcc_libraryです。 | 
| srcs | ラベルのリスト。デフォルトは  
 タイプ  | 
| assets | ラベルのリスト。デフォルトは  assetsディレクトリにあるすべてのファイルのglobです。他のパッケージの他のルール(ファイルを生成するルール)またはエクスポートされたファイルを参照することもできます。ただし、これらのファイルはすべて、対応するパッケージの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 | ラベル(必須)Android マニフェスト ファイルの名前。通常は AndroidManifest.xmlです。resource_files または assets が定義されている場合は定義する必要があります。 | 
| manifest_values | ディクショナリ: 文字列 -> 文字列。デフォルトは  
          マニフェスト内の  
           
           
           | 
| multidex | 文字列。デフォルトは  有効な値: 
 | 
| nocompress_extensions | 文字列のリスト。デフォルトは  | 
| package_id | 整数。デフォルトは  詳しくは、AAPT2 の  | 
| plugins | ラベルのリスト。デフォルトは  java_pluginは、このターゲットがビルドされるたびに実行されます。プラグインによって生成されたリソースは、ターゲットの結果 jar に含まれます。 | 
| 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 | ラベルのリスト。デフォルトは  resディレクトリにあるすべてのファイルのglobです。(genrules からの)生成ファイルも、ここで Label で参照できます。唯一の制限は、生成された出力が、含まれる他のリソース ファイルと同じ「 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 | ラベル(必須)このターゲットに依存する Android ターゲットに提供する .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: このターゲットの Java アーカイブとリソースを含む Android の「aar」バンドル。推移閉包は含まれません。
例
Android ルールの例は、Bazel ソースツリーの examples/android ディレクトリにあります。
次の例は、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、Android ターゲット プラットフォーム用の.soネイティブ ライブラリをラップまたは生成するcc_libraryです。 | 
| srcs | ラベルのリスト。デフォルトは  .javaファイルまたは.srcjarファイルのリスト。
 タイプ  
 | 
| assets | ラベルのリスト。デフォルトは  assetsディレクトリにあるすべてのファイルのglobです。他のパッケージの他のルール(ファイルを生成するルール)またはエクスポートされたファイルを参照することもできます。ただし、これらのファイルはすべて、対応するパッケージの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 ソースを処理するときにインポート ルートとして使用されます。 
 例をご覧ください。 | 
| 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 または assets が定義されている場合は定義する必要があります。 | 
| neverlink | ブール値。デフォルトは  neverlinkとマークされたルールの出力は、.apkの作成では使用されません。実行時にライブラリがランタイム環境によって提供される場合に便利です。 | 
| plugins | ラベルのリスト。デフォルトは  java_pluginは、このターゲットがビルドされるたびに実行されます。プラグインによって生成されたリソースは、ターゲットの結果 jar に含まれます。 | 
| proguard_specs | ラベルのリスト。デフォルトは  android_binaryターゲットに追加されます。ここに含めるファイルには、べき等ルール(-dontnote、-dontwarn、assumenosideeffects、-keep で始まるルール)のみを含める必要があります。他のオプションは、android_binaryの proguard_specs にのみ表示できます。これにより、トートロジーでないマージが保証されます。 | 
| resource_files | ラベルのリスト。デフォルトは  resディレクトリにあるすべてのファイルのglobです。(genrules からの)生成ファイルも、ここで Label で参照できます。唯一の制限は、生成された出力が、含まれる他のリソース ファイルと同じ「 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 は、instruments 属性を介して、テスト対象の android_binary アプリケーションを指定します。
例
# 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 ターゲット。 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 テスト フレームワークと連携します。Robolectric テストの記述について詳しくは、Android Robolectric サイトをご覧ください。
暗黙的な出力ターゲット
- name.jar: テストの Java アーカイブ。
- name-src.jar: ソース(「ソース jar」)を含むアーカイブ。
- name_deploy.jar: デプロイに適した Java デプロイ アーカイブ(明示的にリクエストされた場合にのみビルドされます)。
例
android_local_test で Robolectric を使用するには、WORKSPACE ファイルに Robolectric のリポジトリを追加します。
http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-bazel-<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:android-all",
    ],
)
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は、マニフェストと uses-sdk タグの対応する属性もオーバーライドします。packageNameは無視され、指定されている場合はapplicationIdから、指定されていない場合はマニフェスト内のパッケージから設定されます。manifest_values を使用するために、ルールにマニフェストを配置する必要はありません。 | 
| nocompress_extensions | 文字列のリスト。デフォルトは  | 
| plugins | ラベルのリスト。デフォルトは  java_pluginは、このルールがビルドされるたびに実行されます。ライブラリは、exported_pluginsを使用する依存関係からプラグインを継承することもできます。プラグインによって生成されたリソースは、このルールの結果の jar に含まれます。 | 
| resource_configuration_filters | 文字列のリスト。デフォルトは  | 
| resource_jars | ラベルのリスト。デフォルトは  | 
| resource_strip_prefix | 文字列。デフォルトは  
            指定すると、このパス接頭辞は  | 
| runtime_deps | ラベルのリスト。デフォルトは  depsと同様に、これらはランタイム クラスパスに表示されますが、通常のdepsとは異なり、コンパイル時クラスパスには表示されません。ランタイムでのみ必要な依存関係は、ここに記載する必要があります。依存関係分析ツールは、runtime_depsとdepsの両方に現れるターゲットを無視する必要があります。 | 
| stamp | 整数。デフォルトは  
 依存関係が変更されない限り、スタンプ付きバイナリは再構築されません。 | 
| test_class | 文字列。デフォルトは  
        この属性は、このテストで実行される 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 エミュレータを作成します。このエミュレータは、bazel run コマンドで起動することも、生成されたスクリプトを直接実行して起動することもできます。独自のルールを定義するのではなく、既存の android_device ルールに依存することが推奨されます。
このルールは、bazel test と blaze run の --run_under フラグの適切なターゲットです。エミュレータを起動し、テストまたは実行するターゲットをエミュレータにコピーして、必要に応じてテストまたは実行します。
基盤となる system_image が X86 ベースで、I686 CPU アーキテクチャ向けに最適化されている場合、android_device は KVM イメージの作成をサポートします。KVM を使用するには、android_device ルールに  tags = ['requires-kvm']  を追加します。
暗黙的な出力ターゲット
- 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: 開始または強制終了。
- --apks_to_install: エミュレータにインストールする APK のリスト。
引数
| 属性 | |
|---|---|
| name | 名前(必須) このターゲットの一意の名前。 | 
| cache | 整数。必須エミュレータのキャッシュ パーティションのサイズ(メガバイト単位)。 最小値は 16 メガバイトです。 | 
| default_properties | ラベル。デフォルトは  | 
| horizontal_resolution | 整数。必須エミュレートする画面の水平方向の解像度(ピクセル単位)。最小値は 240 です。 | 
| platform_apks | ラベルのリスト。デフォルトは  | 
| ram | 整数。必須デバイスでエミュレートする RAM の量(MB 単位)。これはデバイス全体を対象としており、デバイスにインストールされている特定のアプリのみを対象とするものではありません。最小値は 64 メガバイトです。 | 
| screen_density | 整数。必須エミュレートされた画面の密度(1 インチあたりのピクセル数)。この最小値は 30 ppi です。 | 
| system_image | ラベル(必須)次のファイルを含むファイルグループ: 
 | 
| vertical_resolution | 整数。必須エミュレートする垂直方向の画面解像度(ピクセル単位)。 最小値は 240 です。 | 
| vm_heap | 整数。必須各プロセスで Android が使用する仮想マシンのヒープのサイズ(メガバイト単位)。最小値は 16 メガバイトです。 | 
android_ndk_repository
ルールソースを表示android_ndk_repository(name, api_level, path, repo_mapping)
ネイティブ コードで Android ターゲットのビルドをサポートするために、Android NDK を使用するように Bazel を構成します。
この android_ndk_repository の実装は、Starlark の実装に置き換えられています。バージョン 25 以降を含む NDK の将来のバージョンに対するサポートは、android_ndk_repository の Starlark バージョンで実装されます。Starlark バージョンについては、rules_android_ndk をご覧ください。
Android 向けにビルドするには、WORKSPACE ファイルに android_sdk_repository ルールも必要です。
詳細については、 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-r20 にある Android NDK が使用されます。JNI コードのコンパイル時に API レベル 24 のライブラリが使用されます。
cpufeatures
Android NDK には、ランタイムにデバイスの CPU を検出するために使用できる cpufeatures ライブラリが含まれています。次の例は、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 SDK を使用して Android ターゲットのビルドをサポートするように Bazel を構成します。
例
Bazel 用の Android SDK を設定する最小限の手順は、WORKSPACE ファイルに「androidsdk」という名前の android_sdk_repository ルールを配置し、$ANDROID_HOME 環境変数を Android SDK のパスに設定することです。Bazel は、Android SDK にインストールされている 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 Repository」として提供されています。これは、サポート ライブラリや AppCompat ライブラリなどの一般的な Android ライブラリのバージョン付きセットで、ローカル Maven リポジトリとしてパッケージ化されています。android_sdk_repository は、これらのライブラリごとに Bazel ターゲットを生成します。このターゲットは、android_binary ターゲットと android_library ターゲットの依存関係で使用できます。
生成されたターゲットの名前は、Android サポート リポジトリ内のライブラリの Maven 座標から取得され、@androidsdk//${group}:${artifact}-${version} の形式で指定されます。次の例は、android_library が v7 appcompat ライブラリのバージョン 25.0.0 に依存する方法を示しています。
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 | ディクショナリ: 文字列 -> 文字列。デフォルトは  たとえば、エントリ  |