ルール
- 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 、java_library (android 制約付き)、cc_library (Android ターゲット プラットフォーム用の .so ネイティブ ライブラリをラップまたは生成)です。
|
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 から)は、ここでもラベルで参照できます。唯一の制限事項は、生成された出力が、含まれている他のリソース ファイルと同じ「 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)
このルールにより、android_library
ルールと android_binary
ルールのライブラリとして .aar
ファイルを使用できます。
例
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 から)は、ここでもラベルで参照できます。唯一の制限事項は、生成された出力が、含まれている他のリソース ファイルと同じ「 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 を使用するには、Robolectric のリポジトリを WORKSPACE
ファイルに追加します。
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
ルールが pull されます。各 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 またはアセットが定義されている場合、またはテスト対象のライブラリのマニフェストに 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 と同様に、これらはランタイム クラスパスに表示されますが、コンパイル時クラスパスには表示されません。実行時にのみ必要な依存関係をここに記載します。依存関係分析ツールは、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 テストと Blaze 実行の --run_under フラグの適切なターゲットです。エミュレータを起動し、テストまたは実行するターゲットをエミュレータにコピーし、必要に応じてテストまたは実行します。
android_device
は、基盤となる system_image が X86 ベースで、I686 CPU アーキテクチャまで最適化されている場合、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: start または kill。
- --apks_to_install: エミュレータにインストールする APK のリスト。
引数
属性 | |
---|---|
name |
名前: 必須 このターゲットの名前。 |
cache
|
整数型(必須) エミュレータのキャッシュ パーティションのサイズ(メガバイト単位)。最小値は 16 メガバイトです。 |
default_properties
|
ラベル(デフォルトは |
horizontal_resolution
|
整数型(必須) エミュレートする横方向の画面解像度(ピクセル単位)。最小値は 240 です。 |
platform_apks
|
ラベルのリスト。デフォルトは |
ram
|
整数型(必須) デバイスのエミュレーションに使用する RAM の量(MB)。これは、デバイスにインストールされている特定のアプリだけでなく、デバイス全体に適用されます。最小値は 64 メガバイトです。 |
screen_density
|
整数型(必須) エミュレートされた画面の密度(インチあたりのピクセル数)。最小値は 30 ppi です。 |
system_image
|
ラベル: 必須 次のファイルを含むファイルグループ。
|
vertical_resolution
|
整数型(必須) エミュレートする垂直画面解像度(ピクセル単位)。最小値は 240 です。 |
vm_heap
|
整数型(必須) Android が各プロセスで使用する仮想マシン ヒープの大きさ(メガバイト単位)。最小値は 16 メガバイトです。 |
android_ndk_repository
ルールソースを表示android_ndk_repository(name, api_level, path, repo_mapping)
Android NDK を使用してネイティブ コードで Android ターゲットのビルドをサポートするように 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」として入手できます。これは、ローカル Maven リポジトリとしてパッケージ化された、Support ライブラリや AppCompat ライブラリなどの一般的な Android ライブラリのバージョン設定されたセットです。android_sdk_repository
は、android_binary
ターゲットと android_library
ターゲットの依存関係で使用できる、これらのライブラリごとに Bazel ターゲットを生成します。
生成されたターゲットの名前は、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
|
辞書: 文字列 -> 文字列。デフォルトは たとえば、エントリ |