<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/6.2.0/_book.yaml">
</head>
<body>
<!--
 This document is synchronized with Bazel releases.
 To edit, submit changes to the Bazel source code.
-->

<!-- Generated by //src/main/java/com/google/devtools/build/docgen:build-encyclopedia.zip -->
<html>
<body>

<h1 class="page-title">Android Rules</h1>



<h2>Rules</h2>
<ul>
  <li>
    <a href="#android_binary">
      android_binary    </a>
  </li>
  <li>
    <a href="#aar_import">
      aar_import    </a>
  </li>
  <li>
    <a href="#android_library">
      android_library    </a>
  </li>
  <li>
    <a href="#android_instrumentation_test">
      android_instrumentation_test    </a>
  </li>
  <li>
    <a href="#android_local_test">
      android_local_test    </a>
  </li>
  <li>
    <a href="#android_device">
      android_device    </a>
  </li>
  <li>
    <a href="#android_ndk_repository">
      android_ndk_repository    </a>
  </li>
  <li>
    <a href="#android_sdk_repository">
      android_sdk_repository    </a>
  </li>
</ul>

  <h2 id="android_binary">
    android_binary
  </h2>

  <pre class="rule-signature">android_binary(<a href="#android_binary.name">name</a>, <a href="#android_binary.deps">deps</a>, <a href="#android_binary.srcs">srcs</a>, <a href="#android_binary.assets">assets</a>, <a href="#android_binary.assets_dir">assets_dir</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="#android_binary.crunch_png">crunch_png</a>, <a href="#android_binary.custom_package">custom_package</a>, <a href="#android_binary.debug_key">debug_key</a>, <a href="#android_binary.debug_signing_keys">debug_signing_keys</a>, <a href="#android_binary.debug_signing_lineage_file">debug_signing_lineage_file</a>, <a href="#android_binary.densities">densities</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="#android_binary.dex_shards">dex_shards</a>, <a href="#android_binary.dexopts">dexopts</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="#android_binary.enable_data_binding">enable_data_binding</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#android_binary.incremental_dexing">incremental_dexing</a>, <a href="#android_binary.instruments">instruments</a>, <a href="#android_binary.javacopts">javacopts</a>, <a href="#android_binary.key_rotation_min_sdk">key_rotation_min_sdk</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#android_binary.main_dex_list">main_dex_list</a>, <a href="#android_binary.main_dex_list_opts">main_dex_list_opts</a>, <a href="#android_binary.main_dex_proguard_specs">main_dex_proguard_specs</a>, <a href="#android_binary.manifest">manifest</a>, <a href="#android_binary.manifest_values">manifest_values</a>, <a href="#android_binary.multidex">multidex</a>, <a href="#android_binary.nocompress_extensions">nocompress_extensions</a>, <a href="#android_binary.package_id">package_id</a>, <a href="#android_binary.plugins">plugins</a>, <a href="#android_binary.proguard_apply_dictionary">proguard_apply_dictionary</a>, <a href="#android_binary.proguard_apply_mapping">proguard_apply_mapping</a>, <a href="#android_binary.proguard_generate_mapping">proguard_generate_mapping</a>, <a href="#android_binary.proguard_specs">proguard_specs</a>, <a href="#android_binary.resource_configuration_filters">resource_configuration_filters</a>, <a href="#android_binary.resource_files">resource_files</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#android_binary.shrink_resources">shrink_resources</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>
  Produces Android application package files (.apk).
</p>

<h4 id="android_binary_implicit_outputs">Implicit output targets</h4>
         <ul>
         <li><code><var>name</var>.apk</code>: An Android application
          package file signed with debug keys and
          <a href="http://developer.android.com/guide/developing/tools/zipalign.html">
          zipaligned</a>, it could be used to develop and debug your application.
          You cannot release your application when signed with the debug keys.</li>
          <li><code><var>name</var>_unsigned.apk</code>: An unsigned version of the
            above file that could be signed with the release keys before release to
            the public.
          </li>
          <li><code><var>name</var>_deploy.jar</code>: A Java archive containing the
            transitive closure of this target.
            <p>The deploy jar contains all the classes that would be found by a
            classloader that searched the runtime classpath of this target
            from beginning to end.</p>
          </li>
          <li><code><var>name</var>_proguard.jar</code>: A Java archive containing
            the result of running ProGuard on the
            <code><var>name</var>_deploy.jar</code>.
            This output is only produced if
            <a href="/versions/6.2.0/reference/be/android.html#android_binary.proguard_specs">proguard_specs</a> attribute is
            specified.
          </li>
          <li><code><var>name</var>_proguard.map</code>: A mapping file result of
            running ProGuard on the <code><var>name</var>_deploy.jar</code>.
            This output is only produced if
            <a href="/versions/6.2.0/reference/be/android.html#android_binary.proguard_specs">proguard_specs</a> attribute is
            specified and
            <a href="/versions/6.2.0/reference/be/android.html#android_binary.proguard_generate_mapping">proguard_generate_mapping</a>
            or <a href="/versions/6.2.0/reference/be/android.html#android_binary.shrink_resources">shrink_resources</a> is set.
          </li>
        </ul>


<h4 id="android_binary_examples">Examples</h4>
<p>Examples of Android rules can be found in the <code>examples/android</code> directory of the
Bazel source tree.



  <h3 id="android_binary_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_binary.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="android_binary.deps">
          <code>deps</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              The list of other libraries to be linked in to the binary target.
          Permitted library types are: <code>android_library</code>,
          <code>java_library</code> with <code>android</code> constraint and
          <code>cc_library</code> wrapping or producing <code>.so</code> native libraries for the
          Android target platform.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.srcs">
          <code>srcs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              The list of source files that are processed to create the target.
          <p><code>srcs</code> files of type <code>.java</code> are compiled.
          <em>For readability's sake</em>, it is not good to put the name of a
          generated <code>.java</code> source file into the <code>srcs</code>.
          Instead, put the depended-on rule name in the <code>srcs</code>, as
          described below.
          </p>
          <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
          compiled. (This is useful if you need to generate a set of .java files with
          a genrule or build extension.)
          </p>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.assets">
          <code>assets</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              The list of assets to be packaged.
          This is typically a <code>glob</code> of all files under the
          <code>assets</code> directory. You can also reference other rules (any rule that produces
          files) or exported files in the other packages, as long as all those files are under the
          <code>assets_dir</code> directory in the corresponding package.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.assets_dir">
          <code>assets_dir</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                              The string giving the path to the files in <code>assets</code>.
          The pair <code>assets</code> and <code>assets_dir</code> describe packaged
          assets and either both attributes should be provided or none of them.

        </td>
      </tr>
                                <tr>
        <td id="android_binary.crunch_png">
          <code>crunch_png</code>
        </td>
        <td>
                    <p><code>Boolean; optional; default is True</code></p>
                              Do PNG crunching (or not). This is independent of nine-patch processing, which is always
          done. This is a deprecated workaround for an
          <a href="https://code.google.com/p/android/issues/detail?id=74334">aapt bug</a> which has
          been fixed in aapt2.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.custom_package">
          <code>custom_package</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                              Java package for which java sources will be generated.
          By default the package is inferred from the directory where the BUILD file
          containing the rule is. You can specify a different package but this is
          highly discouraged since it can introduce classpath conflicts with other
          libraries that will only be detected at runtime.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.debug_key">
          <code>debug_key</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional; default is <code>@bazel_tools//tools/android:debug_keystore</code></code></p>
                              File containing the debug keystore to be used to sign the debug apk. Usually you do not
          want to use a key other than the default key, so this attribute should be omitted.
          <p><em class="harmful">WARNING: Do not use your production keys, they should be
          strictly safeguarded and not kept in your source tree</em>.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.debug_signing_keys">
          <code>debug_signing_keys</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              List of files, debug keystores to be used to sign the debug apk. Usually you do not
          want to use keys other than the default key, so this attribute should be omitted.
          <p><em class="harmful">WARNING: Do not use your production keys, they should be
          strictly safeguarded and not kept in your source tree</em>.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.debug_signing_lineage_file">
          <code>debug_signing_lineage_file</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                              File containing the signing lineage for the debug_signing_keys. Usually you do not
          want to use keys other than the default key, so this attribute should be omitted.
          <p><em class="harmful">WARNING: Do not use your production keys, they should be
          strictly safeguarded and not kept in your source tree</em>.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.densities">
          <code>densities</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              Densities to filter for when building the apk.
          This will strip out raster drawable resources that would not be loaded by a device with
          the specified screen densities, to reduce APK size. A corresponding compatible-screens
          section will also be added to the manifest if it does not already contain a superset
          listing.

        </td>
      </tr>
                                <tr>
        <td id="android_binary.dex_shards">
          <code>dex_shards</code>
        </td>
        <td>
                    <p><code>Integer; optional; default is 1</code></p>
                              Number of shards dexing should be decomposed into.
          This is makes dexing much faster at the expense of app installation and startup time. The
          larger the binary, the more shards should be used. 25 is a good value to start
          experimenting with.
          <p>
          Note that each shard will result in at least one dex in the final app. For this reason,
          setting this to more than 1 is not recommended for release binaries.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.dexopts">
          <code>dexopts</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              Additional command-line flags for the dx tool when generating classes.dex.
          Subject to <a href="/versions/6.2.0/reference/be/make-variables">"Make variable"</a> substitution and
          <a href="/versions/6.2.0/reference/be/common-definitions#sh-tokenization">Bourne shell tokenization</a>.

        </td>
      </tr>
                                <tr>
        <td id="android_binary.enable_data_binding">
          <code>enable_data_binding</code>
        </td>
        <td>
                    <p><code>Boolean; optional; default is False</code></p>
                              If true, this rule processes
          <a href="https://developer.android.com/topic/libraries/data-binding/index.html">data
          binding</a> expressions in layout resources included through the
          <a href="/versions/6.2.0/reference/be/android.html#android_binary.resource_files">resource_files</a> attribute. Without this
          setting, data binding expressions produce build failures.
          <p>
          To build an Android app with data binding, you must also do the following:
          <ol>
            <li>Set this attribute for all Android rules that transitively depend on this one.
              This is because dependers inherit the rule's data binding expressions through resource
              merging. So they also need to build with data binding to parse those expressions.
            <li>Add a <code>deps =</code> entry for the data binding runtime library to all targets
            that set this attribute. The location of this library depends on your depot setup.
          </ol>

        </td>
      </tr>
                                                    <tr>
        <td id="android_binary.incremental_dexing">
          <code>incremental_dexing</code>
        </td>
        <td>
                    <p><code>Integer; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is -1</code></p>
                              Force the target to be built with or without incremental dexing, overriding defaults
          and --incremental_dexing flag.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.instruments">
          <code>instruments</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                              <p>The <code>android_binary</code> target to instrument.</p>
          <p>If this attribute is set, this <code>android_binary</code> will be treated as a test
          application for instrumentation tests. An <code>android_instrumentation_test</code>
          target can then specify this target in its
           <a href="/versions/6.2.0/reference/be/android.html#android_instrumentation_test.test_app">test_app</a> attribute.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.javacopts">
          <code>javacopts</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              Extra compiler options for this target.
          Subject to <a href="/versions/6.2.0/reference/be/make-variables">"Make variable"</a> substitution and
          <a href="/versions/6.2.0/reference/be/common-definitions#sh-tokenization">Bourne shell tokenization</a>.
          <p>
          These compiler options are passed to javac after the global compiler options.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.key_rotation_min_sdk">
          <code>key_rotation_min_sdk</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                              Sets the minimum Android platform version (API Level) for which an APK's rotated signing
          key should be used to produce the APK's signature. The original signing key for the APK
          will be used for all previous platform versions.

        </td>
      </tr>
                                <tr>
        <td id="android_binary.main_dex_list">
          <code>main_dex_list</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>

          A text file contains a list of class file names. Classes defined by those class files are
          put in the primary classes.dex. e.g.:<pre class="code">
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    </pre>
                    Must be used with <code>multidex="manual_main_dex"</code>.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.main_dex_list_opts">
          <code>main_dex_list_opts</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              Command line options to pass to the main dex list builder.
          Use this option to affect the classes included in the main dex list.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.main_dex_proguard_specs">
          <code>main_dex_proguard_specs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Files to be used as the Proguard specifications to determine classes that must be kept in
          the main dex.
          Only allowed if the <code>multidex</code> attribute is set to <code>legacy</code>.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.manifest">
          <code>manifest</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; required</code></p>
                              The name of the Android manifest file, normally <code>AndroidManifest.xml</code>.
          Must be defined if resource_files or assets are defined.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.manifest_values">
          <code>manifest_values</code>
        </td>
        <td>
                    <p><code>Dictionary: String -> String; optional</code></p>
                              A dictionary of values to be overridden in the manifest. Any instance of ${name} in the
          manifest will be replaced with the value corresponding to name in this dictionary.
          applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion and
          maxSdkVersion will also override the corresponding attributes of the manifest and
          uses-sdk tags. packageName will be ignored and will be set from either applicationId if
          specified or the package in manifest. When manifest_merger is set to legacy, only
          applicationId, versionCode and versionName will have any effect.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.multidex">
          <code>multidex</code>
        </td>
        <td>
                    <p><code>String; optional; default is "native"</code></p>
                              Whether to split code into multiple dex files.<br/>
          Possible values:
          <ul>
            <li><code>native</code>: Split code into multiple dex files when the dex 64K index limit
              is exceeded. Assumes native platform support for loading multidex classes at runtime.
              <em class="harmful">This works with only Android L and newer</em>.</li>
            <li><code>legacy</code>: Split code into multiple dex files when the dex 64K index limit
              is exceeded. Assumes multidex classes are loaded through application code (i.e. no
              native platform support).</li>
            <li><code>manual_main_dex</code>: Split code into multiple dex files when the dex 64K
              index limit is exceeded. The content of the main dex file needs to be specified by
              providing a list of classes in a text file using the
              <a href="/versions/6.2.0/reference/be/android.html#android_binary.main_dex_list">main_dex_list</a> attribute.</li>
            <li><code>off</code>: Compile all code to a single dex file, even if it exceeds the
              index limit.</li>
          </ul>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.nocompress_extensions">
          <code>nocompress_extensions</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              A list of file extension to leave uncompressed in apk.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.package_id">
          <code>package_id</code>
        </td>
        <td>
                    <p><code>Integer; optional; default is 0</code></p>
                              Package ID to be assigned to resources in this binary.
          <p>See AAPT2's <code>--package-id</code> argument for more information. This can (and
          should) typically be left unset, resulting in the default value of 127
          (<code>0x7F</code>).

        </td>
      </tr>
                      <tr>
        <td id="android_binary.plugins">
          <code>plugins</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Java compiler plugins to run at compile-time.
          Every <code>java_plugin</code> specified in
          the plugins attribute will be run whenever
          this target is built.  Resources generated by
          the plugin will be included in the result jar of
          the target.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.proguard_apply_dictionary">
          <code>proguard_apply_dictionary</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                              File to be used as a mapping for proguard.
          A line separated file of "words" to pull from when renaming classes and members during
          obfuscation.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.proguard_apply_mapping">
          <code>proguard_apply_mapping</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                              File to be used as a mapping for proguard.
          A mapping file generated by <code>proguard_generate_mapping</code> to be
          re-used to apply the same mapping to a new build.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.proguard_generate_mapping">
          <code>proguard_generate_mapping</code>
        </td>
        <td>
                    <p><code>Boolean; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is False</code></p>
                              Whether to generate Proguard mapping file.
          The mapping file will be generated only if <code>proguard_specs</code> is
          specified. This file will list the mapping between the original and
          obfuscated class, method, and field names.
          <p><em class="harmful">WARNING: If this attribute is used, the Proguard
          specification should contain neither <code>-dontobfuscate</code> nor
          <code>-printmapping</code>.</em></p>

        </td>
      </tr>
                      <tr>
        <td id="android_binary.proguard_specs">
          <code>proguard_specs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Files to be used as Proguard specification.
          This file will describe the set of specifications to be used by Proguard.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.resource_configuration_filters">
          <code>resource_configuration_filters</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              A list of resource configuration filters, such 'en' that will limit the resources in the
          apk to only the ones in the 'en' configuration. To enable pseudolocalization, include the
          <code>en_XA</code> and/or <code>ar_XB</code> pseudo-locales.

        </td>
      </tr>
                      <tr>
        <td id="android_binary.resource_files">
          <code>resource_files</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              The list of resources to be packaged.
          This is typically a <code>glob</code> of all files under the
          <code>res</code> directory.
          <br/>
          Generated files (from genrules) can be referenced by
          <a href="/versions/6.2.0/concepts/labels">Label</a> here as well. The only restriction is that
          the generated outputs must be under the same "<code>res</code>" directory as any other
          resource files that are included.

        </td>
      </tr>
                                <tr>
        <td id="android_binary.shrink_resources">
          <code>shrink_resources</code>
        </td>
        <td>
                    <p><code>Integer; optional; default is -1</code></p>
                              Whether to perform resource shrinking. Resources that are not used by the binary will be
          removed from the APK. This is only supported for rules using local resources (i.e. the
          <code>manifest</code> and <code>resource_files</code> attributes) and requires ProGuard.
          It operates in mostly the same manner as the Gradle resource shrinker
          (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
          <p>Notable differences:
          <ul>
            <li>resources in <code>values/</code> will be removed as well as file based
                resources</li>
            <li>uses <code>strict mode</code> by default</li>
            <li>removing unused ID resources is only supported with aapt2</li>
          </ul>
          If resource shrinking is enabled, <code><var>name</var>_files/resource_shrinker.log</code>
          will also be generated, detailing the analysis and deletions performed.
          <p>Possible values:
          <ul>
            <li><code>shrink_resources = 1</code>: Turns on Android resource shrinking</li>
            <li><code>shrink_resources = 0</code>: Turns off Android resource shrinking</li>
            <li><code>shrink_resources = -1</code>: Shrinking is controlled by the
                <a href="/versions/6.2.0/docs/user-manual#flag--android_resource_shrinking">
                --android_resource_shrinking</a> flag.</li>
          </ul>

        </td>
      </tr>
                                                      </tbody>
  </table>
  <h2 id="aar_import">
    aar_import
  </h2>

  <pre class="rule-signature">aar_import(<a href="#aar_import.name">name</a>, <a href="common-definitions.html#typical.deps">deps</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="#aar_import.aar">aar</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="#aar_import.exports">exports</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#aar_import.srcjar">srcjar</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>
  This rule allows the use of <code>.aar</code> files as libraries for
  <code><a href="/versions/6.2.0/reference/be/android.html#android_library">android_library</a></code> and
  <code><a href="/versions/6.2.0/reference/be/android.html#android_binary">android_binary</a></code> rules.
</p>

<h4 id="aar_import_examples">Examples</h4>

<pre class="code">
    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"],
    )
</pre>



  <h3 id="aar_import_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="aar_import.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                                    <tr>
        <td id="aar_import.aar">
          <code>aar</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; required</code></p>
                            The <code>.aar</code> file to provide to the Android targets that depend on this target.

        </td>
      </tr>
                                                                        <tr>
        <td id="aar_import.exports">
          <code>exports</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            Targets to export to rules that depend on this rule.
        See <a href="/versions/6.2.0/reference/be/java.html#java_library.exports">java_library.exports.

        </td>
      </tr>
                                                    <tr>
        <td id="aar_import.srcjar">
          <code>srcjar</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                            A JAR file that contains source code for the compiled JAR files in the AAR.

        </td>
      </tr>
                                                      </tbody>
  </table>
  <h2 id="android_library">
    android_library
  </h2>

  <pre class="rule-signature">android_library(<a href="#android_library.name">name</a>, <a href="#android_library.deps">deps</a>, <a href="#android_library.srcs">srcs</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="#android_library.assets">assets</a>, <a href="#android_library.assets_dir">assets_dir</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="#android_library.custom_package">custom_package</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="#android_library.enable_data_binding">enable_data_binding</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="#android_library.exported_plugins">exported_plugins</a>, <a href="#android_library.exports">exports</a>, <a href="#android_library.exports_manifest">exports_manifest</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#android_library.idl_import_root">idl_import_root</a>, <a href="#android_library.idl_parcelables">idl_parcelables</a>, <a href="#android_library.idl_preprocessed">idl_preprocessed</a>, <a href="#android_library.idl_srcs">idl_srcs</a>, <a href="#android_library.javacopts">javacopts</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#android_library.manifest">manifest</a>, <a href="#android_library.neverlink">neverlink</a>, <a href="#android_library.plugins">plugins</a>, <a href="#android_library.proguard_specs">proguard_specs</a>, <a href="#android_library.resource_files">resource_files</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>This rule compiles and archives its sources into a <code>.jar</code> file.
  The Android runtime library <code>android.jar</code> is implicitly put on
  the compilation class path.
</p>

<h4 id="android_library_implicit_outputs">Implicit output targets</h4>
        <ul>
          <li><code>lib<var>name</var>.jar</code>: A Java archive.</li>
          <li><code>lib<var>name</var>-src.jar</code>: An archive containing the
          sources ("source jar").</li>
          <li><code><var>name</var>.aar</code>: An android 'aar' bundle containing the java archive
          and resources of this target. It does not contain the transitive closure.</li>
        </ul>



<h4 id="android_library_examples">Examples</h4>
<p>Examples of Android rules can be found in the <code>examples/android</code> directory of the
Bazel source tree.

<p id="android_library_examples.idl_import_root">The following example shows
how to set <code>idl_import_root</code>.
Let <code>//java/bazel/helloandroid/BUILD</code> contain:</p>
<pre class="code">
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"],
)
</pre>



  <h3 id="android_library_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_library.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="android_library.deps">
          <code>deps</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            The list of other libraries to link against.
        Permitted library types are: <code>android_library</code>,
        <code>java_library</code> with <code>android</code> constraint and
        <code>cc_library</code> wrapping or producing <code>.so</code> native libraries
        for the Android target platform.

        </td>
      </tr>
                      <tr>
        <td id="android_library.srcs">
          <code>srcs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                             The list of <code>.java</code> or <code>.srcjar</code> files that
         are processed to create the target.
        <p><code>srcs</code> files of type <code>.java</code> are compiled.
        <em>For readability's sake</em>, it is not good to put the name of a
        generated <code>.java</code> source file into the <code>srcs</code>.
        Instead, put the depended-on rule name in the <code>srcs</code>, as
        described below.
        </p>
        <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
        compiled. (This is useful if you need to generate a set of .java files with
        a genrule or build extension.)
        </p>
        <p>If <code>srcs</code> is omitted, then any dependency specified in
        <code>deps</code> is exported from this rule (see
        <a href="/versions/6.2.0/reference/be/java.html#java_library.exports">java_library's exports</a> for more
        information about exporting dependencies). However, this behavior will be
        deprecated soon; try not to rely on it.
        </p>

        </td>
      </tr>
                                <tr>
        <td id="android_library.assets">
          <code>assets</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              The list of assets to be packaged.
          This is typically a <code>glob</code> of all files under the
          <code>assets</code> directory. You can also reference other rules (any rule that produces
          files) or exported files in the other packages, as long as all those files are under the
          <code>assets_dir</code> directory in the corresponding package.

        </td>
      </tr>
                      <tr>
        <td id="android_library.assets_dir">
          <code>assets_dir</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                              The string giving the path to the files in <code>assets</code>.
          The pair <code>assets</code> and <code>assets_dir</code> describe packaged
          assets and either both attributes should be provided or none of them.

        </td>
      </tr>
                                <tr>
        <td id="android_library.custom_package">
          <code>custom_package</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                              Java package for which java sources will be generated.
          By default the package is inferred from the directory where the BUILD file
          containing the rule is. You can specify a different package but this is
          highly discouraged since it can introduce classpath conflicts with other
          libraries that will only be detected at runtime.

        </td>
      </tr>
                                          <tr>
        <td id="android_library.enable_data_binding">
          <code>enable_data_binding</code>
        </td>
        <td>
                    <p><code>Boolean; optional; default is False</code></p>
                              If true, this rule processes
          <a href="https://developer.android.com/topic/libraries/data-binding/index.html">data
          binding</a> expressions in layout resources included through the
          <a href="/versions/6.2.0/reference/be/android.html#android_binary.resource_files">resource_files</a> attribute. Without this
          setting, data binding expressions produce build failures.
          <p>
          To build an Android app with data binding, you must also do the following:
          <ol>
            <li>Set this attribute for all Android rules that transitively depend on this one.
              This is because dependers inherit the rule's data binding expressions through resource
              merging. So they also need to build with data binding to parse those expressions.
            <li>Add a <code>deps =</code> entry for the data binding runtime library to all targets
            that set this attribute. The location of this library depends on your depot setup.
          </ol>

        </td>
      </tr>
                                          <tr>
        <td id="android_library.exported_plugins">
          <code>exported_plugins</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            The list of <code><a href="#/reference/be/java.html#java_plugin">java_plugin</a></code>s (e.g. annotation
        processors) to export to libraries that directly depend on this library.
        <p>
          The specified list of <code>java_plugin</code>s will be applied to any library which
          directly depends on this library, just as if that library had explicitly declared these
          labels in <code><a href="/versions/6.2.0/reference/be/android.html#android_library.plugins">plugins</a></code>.
        </p>

        </td>
      </tr>
                      <tr>
        <td id="android_library.exports">
          <code>exports</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            The closure of all rules reached via <code>exports</code> attributes
        are considered direct dependencies of any rule that directly depends on the
        target with <code>exports</code>.
        <p>The <code>exports</code> are not direct deps of the rule they belong to.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_library.exports_manifest">
          <code>exports_manifest</code>
        </td>
        <td>
                    <p><code>Integer; optional; default is 1</code></p>
                            Whether to export manifest entries to <code>android_binary</code> targets
        that depend on this target. <code>uses-permissions</code> attributes are never exported.

        </td>
      </tr>
                                <tr>
        <td id="android_library.idl_import_root">
          <code>idl_import_root</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                            Package-relative path to the root of the java package tree containing idl
        sources included in this library.
        <p>This path will be used as the import root when processing idl sources that
        depend on this library.</p>
        <p>When <code>idl_import_root</code> is specified, both <code>idl_parcelables</code>
        and <code>idl_srcs</code> must be at the path specified by the java package of the object
        they represent under <code>idl_import_root</code>. When <code>idl_import_root</code> is
        not specified, both <code>idl_parcelables</code> and <code>idl_srcs</code> must be at the
        path specified by their package under a Java root.</p>
        <p>See <a href="android.html#android_library_examples.idl_import_root">
        examples</a>.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_library.idl_parcelables">
          <code>idl_parcelables</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            List of Android IDL definitions to supply as imports.
        These files will be made available as imports for any
        <code>android_library</code> target that depends on this library, directly
        or via its transitive closure, but will not be translated to Java
        or compiled.
        <p>Only <code>.aidl</code> files that correspond directly to
        <code>.java</code> sources in this library should be included (e.g., custom
        implementations of Parcelable), otherwise <code>idl_srcs</code> should be
        used.</p>
        <p>These files must be placed appropriately for the aidl compiler to find them.
        See <a href="/versions/6.2.0/reference/be/android.html#android_library.idl_import_root">the description of idl_import_root</a>
        for information about what this means.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_library.idl_preprocessed">
          <code>idl_preprocessed</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            List of preprocessed Android IDL definitions to supply as imports.
        These files will be made available as imports for any
        <code>android_library</code> target that depends on this library, directly
        or via its transitive closure, but will not be translated to Java
        or compiled.
        <p>Only preprocessed <code>.aidl</code> files that correspond directly to
        <code>.java</code> sources in this library should be included (e.g., custom
        implementations of Parcelable), otherwise use <code>idl_srcs</code> for
        Android IDL definitions that need to be translated to Java interfaces and
        use <code>idl_parcelable</code>
        for non-preprocessed AIDL files.
        </p>


        </td>
      </tr>
                      <tr>
        <td id="android_library.idl_srcs">
          <code>idl_srcs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            List of Android IDL definitions to translate to Java interfaces.
        After the Java interfaces are generated, they will be compiled together
        with the contents of <code>srcs</code>.
        <p>These files will be made available as imports for any
        <code>android_library</code> target that depends on this library, directly
        or via its transitive closure.</p>
        <p>These files must be placed appropriately for the aidl compiler to find them.
        See <a href="/versions/6.2.0/reference/be/android.html#android_library.idl_import_root">the description of idl_import_root</a>
        for information about what this means.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_library.javacopts">
          <code>javacopts</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              Extra compiler options for this target.
          Subject to <a href="/versions/6.2.0/reference/be/make-variables">"Make variable"</a> substitution and
          <a href="/versions/6.2.0/reference/be/common-definitions#sh-tokenization">Bourne shell tokenization</a>.
          <p>
          These compiler options are passed to javac after the global compiler options.</p>

        </td>
      </tr>
                                <tr>
        <td id="android_library.manifest">
          <code>manifest</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                              The name of the Android manifest file, normally <code>AndroidManifest.xml</code>.
          Must be defined if resource_files or assets are defined.

        </td>
      </tr>
                      <tr>
        <td id="android_library.neverlink">
          <code>neverlink</code>
        </td>
        <td>
                    <p><code>Boolean; optional; default is False</code></p>
                            Only use this library for compilation and not at runtime.
        The outputs of a rule marked as <code>neverlink</code> will not be used in
        <code>.apk</code> creation. Useful if the library will be provided by the
        runtime environment during execution.

        </td>
      </tr>
                      <tr>
        <td id="android_library.plugins">
          <code>plugins</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Java compiler plugins to run at compile-time.
          Every <code>java_plugin</code> specified in
          the plugins attribute will be run whenever
          this target is built.  Resources generated by
          the plugin will be included in the result jar of
          the target.

        </td>
      </tr>
                      <tr>
        <td id="android_library.proguard_specs">
          <code>proguard_specs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            Files to be used as Proguard specification.
        These will describe the set of specifications to be used by Proguard. If specified,
        they will be added to any <code>android_binary</code> target depending on this library.

        The files included here must only have idempotent rules, namely -dontnote, -dontwarn,
        assumenosideeffects, and rules that start with -keep. Other options can only appear in
        <code>android_binary</code>'s proguard_specs, to ensure non-tautological merges.

        </td>
      </tr>
                      <tr>
        <td id="android_library.resource_files">
          <code>resource_files</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              The list of resources to be packaged.
          This is typically a <code>glob</code> of all files under the
          <code>res</code> directory.
          <br/>
          Generated files (from genrules) can be referenced by
          <a href="/versions/6.2.0/concepts/labels">Label</a> here as well. The only restriction is that
          the generated outputs must be under the same "<code>res</code>" directory as any other
          resource files that are included.

        </td>
      </tr>
                                                                </tbody>
  </table>
  <h2 id="android_instrumentation_test">
    android_instrumentation_test
  </h2>

  <pre class="rule-signature">android_instrumentation_test(<a href="#android_instrumentation_test.name">name</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="common-definitions.html#test.args">args</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#test.env">env</a>, <a href="common-definitions.html#test.env_inherit">env_inherit</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#test.flaky">flaky</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#test.local">local</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="common-definitions.html#test.shard_count">shard_count</a>, <a href="common-definitions.html#test.size">size</a>, <a href="#android_instrumentation_test.support_apks">support_apks</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="#android_instrumentation_test.target_device">target_device</a>, <a href="#android_instrumentation_test.test_app">test_app</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#test.timeout">timeout</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>
  An <code>android_instrumentation_test</code> rule runs Android instrumentation tests. It will
  start an emulator, install the application being tested, the test application, and
  any other needed applications, and run the tests defined in the test package.
</p>
<p>
  The <a href="/versions/6.2.0/reference/be/android.html#android_instrumentation_test.test_app">test_app</a> attribute specifies the
  <code>android_binary</code> which contains the test. This <code>android_binary</code> in turn
  specifies the <code>android_binary</code> application under test through its
  <a href="/versions/6.2.0/reference/be/android.html#android_binary.instruments">instruments</a> attribute.
</p>

<h4 id="android_instrumentation_test_examples">Example</h4>

<pre class="code">
# 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"],
)
</pre>

<pre class="code">
# 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",
)
</pre>



  <h3 id="android_instrumentation_test_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_instrumentation_test.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                                                                                                                                                                                <tr>
        <td id="android_instrumentation_test.support_apks">
          <code>support_apks</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            Other APKs to install on the device before the instrumentation test starts.

        </td>
      </tr>
                                          <tr>
        <td id="android_instrumentation_test.target_device">
          <code>target_device</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; required</code></p>
                            <p>The <a href="/versions/6.2.0/reference/be/android.html#android_device">android_device</a> the test should run on.</p>
        <p>To run the test on an emulator that is already running or on a physical device, use
        these arguments:
        <code>--test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER
        --test_arg=--device_serial_number=$device_identifier</code></p>

        </td>
      </tr>
                      <tr>
        <td id="android_instrumentation_test.test_app">
          <code>test_app</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; required</code></p>
                             The <a href="/versions/6.2.0/reference/be/android.html#android_binary">android_binary</a> target containing the test classes.
         The <code>android_binary</code> target must specify which target it is testing through
         its <a href="/versions/6.2.0/reference/be/android.html#android_binary.instruments"><code>instruments</code></a> attribute.

        </td>
      </tr>
                                                      </tbody>
  </table>
  <h2 id="android_local_test">
    android_local_test
  </h2>

  <pre class="rule-signature">android_local_test(<a href="#android_local_test.name">name</a>, <a href="#android_local_test.deps">deps</a>, <a href="#android_local_test.srcs">srcs</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="common-definitions.html#test.args">args</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="#android_local_test.custom_package">custom_package</a>, <a href="#android_local_test.densities">densities</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="#android_local_test.enable_data_binding">enable_data_binding</a>, <a href="common-definitions.html#test.env">env</a>, <a href="common-definitions.html#test.env_inherit">env_inherit</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#test.flaky">flaky</a>, <a href="#android_local_test.javacopts">javacopts</a>, <a href="#android_local_test.jvm_flags">jvm_flags</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#test.local">local</a>, <a href="#android_local_test.manifest">manifest</a>, <a href="#android_local_test.manifest_values">manifest_values</a>, <a href="#android_local_test.nocompress_extensions">nocompress_extensions</a>, <a href="#android_local_test.plugins">plugins</a>, <a href="#android_local_test.resource_configuration_filters">resource_configuration_filters</a>, <a href="#android_local_test.resource_jars">resource_jars</a>, <a href="#android_local_test.resource_strip_prefix">resource_strip_prefix</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#android_local_test.runtime_deps">runtime_deps</a>, <a href="common-definitions.html#test.shard_count">shard_count</a>, <a href="common-definitions.html#test.size">size</a>, <a href="#android_local_test.stamp">stamp</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="#android_local_test.test_class">test_class</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#test.timeout">timeout</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="#android_local_test.use_launcher">use_launcher</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>


<p>
This rule is for unit testing <code>android_library</code> rules locally
(as opposed to on a device).
It works with the Android Robolectric testing framework.
See the <a href="http://robolectric.org/">Android Robolectric</a> site for details about
writing Robolectric tests.
</p>

<h4 id="android_local_test_implicit_outputs">Implicit output targets</h4>
<ul>
  <li><code><var>name</var>.jar</code>: A Java archive of the test.</li>
  <li><code><var>name</var>-src.jar</code>: An archive containing the sources
    ("source jar").</li>
  <li><code><var>name</var>_deploy.jar</code>: A Java deploy archive suitable
    for deployment (only built if explicitly requested).</li>
</ul>


<h4 id="android_local_test_examples">Examples</h4>

<p>
To use Robolectric with <code>android_local_test</code>, add
<a href="https://github.com/robolectric/robolectric-bazel/tree/master/bazel">Robolectric's
repository</a> to your <code>WORKSPACE</code> file:
<pre class="code">
http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric/archive/&lt;COMMIT&gt;.tar.gz"],
    strip_prefix = "robolectric-&lt;COMMIT&gt;",
    sha256 = "&lt;HASH&gt;",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
</pre>

This pulls in the <code>maven_jar</code> rules needed for Robolectric.

Then each <code>android_local_test</code> rule should depend on
<code>@robolectric//bazel:robolectric</code>. See example below.

</p>

<pre class="code">
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",
)
</pre>



  <h3 id="android_local_test_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_local_test.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="android_local_test.deps">
          <code>deps</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            The list of libraries to be tested as well as additional libraries to be linked
        in to the target.
        All resources, assets and manifest files declared in Android rules in the transitive
        closure of this attribute are made available in the test.
        <p>
        The list of allowed rules in <code>deps</code> are <code>android_library</code>,
        <code>aar_import</code>, <code>java_import</code>, <code>java_library</code>,
        and <code>java_lite_proto_library</code>.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.srcs">
          <code>srcs</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            The list of source files that are processed to create the target.
        Required except in special case described below.
        <p><code>srcs</code> files of type <code>.java</code> are compiled.
        <em>For readability's sake</em>, it is not good to put the name of a
        generated <code>.java</code> source file into the <code>srcs</code>.
        Instead, put the depended-on rule name in the <code>srcs</code>, as
        described below.
        </p>

        <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
        compiled. (This is useful if you need to generate a set of .java files with
        a genrule or build extension.)
        </p>

        <p>All other files are ignored, as long as
        there is at least one file of a file type described above. Otherwise an
        error is raised.
        </p>

        <p>
        The <code>srcs</code> attribute is required and cannot be empty, unless
        <code>runtime_deps</code> is specified.
        </p>

        </td>
      </tr>
                                                    <tr>
        <td id="android_local_test.custom_package">
          <code>custom_package</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                            Java package in which the R class will be generated. By default the package is inferred
        from the directory where the BUILD file containing the rule is. If you use this attribute,
        you will likely need to use <code>test_class</code> as well.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.densities">
          <code>densities</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                            Densities to filter for when building the apk. A corresponding compatible-screens
        section will also be added to the manifest if it does not already contain a
        superset StarlarkListing.

        </td>
      </tr>
                                <tr>
        <td id="android_local_test.enable_data_binding">
          <code>enable_data_binding</code>
        </td>
        <td>
                    <p><code>Boolean; optional; default is False</code></p>
                            If true, this rule processes
        <a href="https://developer.android.com/topic/libraries/data-binding/index.html">data
        binding</a> references used in data-binding enabled dependencies used by this test. Without
        this setting, data-binding dependencies won't have necessary binary-level code generation,
        and may produce build failures.

        </td>
      </tr>
                                                                                  <tr>
        <td id="android_local_test.javacopts">
          <code>javacopts</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              Extra compiler options for this library.
          Subject to <a href="make-variables.html">"Make variable"</a> substitution and
          <a href="common-definitions.html#sh-tokenization">Bourne shell tokenization</a>.
          <p>These compiler options are passed to javac after the global compiler options.</p>

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.jvm_flags">
          <code>jvm_flags</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                              A list of flags to embed in the wrapper script generated for running this binary.
          Subject to <a href="/versions/6.2.0/reference/be/make-variables#location">$(location)</a> and
          <a href="make-variables.html">"Make variable"</a> substitution, and
          <a href="common-definitions.html#sh-tokenization">Bourne shell tokenization</a>.

          <p>The wrapper script for a Java binary includes a CLASSPATH definition
          (to find all the dependent jars) and invokes the right Java interpreter.
          The command line generated by the wrapper script includes the name of
          the main class followed by a <code>"$@"</code> so you can pass along other
          arguments after the classname.  However, arguments intended for parsing
          by the JVM must be specified <i>before</i> the classname on the command
          line.  The contents of <code>jvm_flags</code> are added to the wrapper
          script before the classname is listed.</p>

          <p>Note that this attribute has <em>no effect</em> on <code>*_deploy.jar</code>
          outputs.</p>

        </td>
      </tr>
                                          <tr>
        <td id="android_local_test.manifest">
          <code>manifest</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                            The name of the Android manifest file, normally <code>AndroidManifest.xml</code>.
        Must be defined if resource_files or assets are defined or if any of the manifests from
        the libraries under test have a <code>minSdkVersion</code> tag in them.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.manifest_values">
          <code>manifest_values</code>
        </td>
        <td>
                    <p><code>Dictionary: String -> String; optional</code></p>
                            A dictionary of values to be overridden in the manifest. Any instance of ${name} in the
        manifest will be replaced with the value corresponding to name in this dictionary.
        <code>applicationId</code>, <code>versionCode</code>, <code>versionName</code>,
        <code>minSdkVersion</code>, <code>targetSdkVersion</code> and
        <code>maxSdkVersion</code> will also override the corresponding attributes
        of the manifest and
        uses-sdk tags. <code>packageName</code> will be ignored and will be set from either
        <code>applicationId</code> if
        specified or the package in the manifest.
        It is not necessary to have a manifest on the rule in order to use manifest_values.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.nocompress_extensions">
          <code>nocompress_extensions</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                            A list of file extensions to leave uncompressed in the resource apk.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.plugins">
          <code>plugins</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Java compiler plugins to run at compile-time.
          Every <code>java_plugin</code> specified in this attribute will be run whenever this rule
          is built. A library may also inherit plugins from dependencies that use
          <code><a href="#java_library.exported_plugins">exported_plugins</a></code>. Resources
          generated by the plugin will be included in the resulting jar of this rule.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.resource_configuration_filters">
          <code>resource_configuration_filters</code>
        </td>
        <td>
                    <p><code>List of strings; optional</code></p>
                            A list of resource configuration filters, such as 'en' that will limit the resources in the
        apk to only the ones in the 'en' configuration.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.resource_jars">
          <code>resource_jars</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Deprecated: Use java_import and deps or runtime_deps instead.

        </td>
      </tr>
                      <tr>
        <td id="android_local_test.resource_strip_prefix">
          <code>resource_strip_prefix</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                              The path prefix to strip from Java resources.
          <p>
            If specified, this path prefix is stripped from every file in the <code>resources</code>
            attribute. It is an error for a resource file not to be under this directory. If not
            specified (the default), the path of resource file is determined according to the same
            logic as the Java package of source files. For example, a source file at
            <code>stuff/java/foo/bar/a.txt</code> will be located at <code>foo/bar/a.txt</code>.
          </p>

        </td>
      </tr>
                                <tr>
        <td id="android_local_test.runtime_deps">
          <code>runtime_deps</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                              Libraries to make available to the final binary or test at runtime only.
          Like ordinary <code>deps</code>, these will appear on the runtime classpath, but unlike
          them, not on the compile-time classpath. Dependencies needed only at runtime should be
          listed here. Dependency-analysis tools should ignore targets that appear in both
          <code>runtime_deps</code> and <code>deps</code>.

        </td>
      </tr>
                                          <tr>
        <td id="android_local_test.stamp">
          <code>stamp</code>
        </td>
        <td>
                    <p><code>Integer; optional; default is 0</code></p>
                              Whether to encode build information into the binary. Possible values:
          <ul>
            <li>
              <code>stamp = 1</code>: Always stamp the build information into the binary, even in
              <a href="/versions/6.2.0/docs/user-manual#flag--stamp"><code>--nostamp</code></a> builds. <b>This
              setting should be avoided</b>, since it potentially kills remote caching for the
              binary and any downstream actions that depend on it.
            </li>
            <li>
              <code>stamp = 0</code>: Always replace build information by constant values. This
              gives good build result caching.
            </li>
            <li>
              <code>stamp = -1</code>: Embedding of build information is controlled by the
              <a href="/versions/6.2.0/docs/user-manual#flag--stamp"><code>--[no]stamp</code></a> flag.
            </li>
          </ul>
          <p>Stamped binaries are <em>not</em> rebuilt unless their dependencies change.</p>

        </td>
      </tr>
                                          <tr>
        <td id="android_local_test.test_class">
          <code>test_class</code>
        </td>
        <td>
                    <p><code>String; optional</code></p>
                            The Java class to be loaded by the test runner.<br/>
        <p>
        This attribute specifies the name of a Java class to be run by
        this test. It is rare to need to set this. If this argument is omitted, the Java class
        whose name corresponds to the <code>name</code> of this
        <code>android_local_test</code> rule will be used.
        The test class needs to be annotated with <code>org.junit.runner.RunWith</code>.
        </p>

        </td>
      </tr>
                                                    <tr>
        <td id="android_local_test.use_launcher">
          <code>use_launcher</code>
        </td>
        <td>
                    <p><code>Boolean; optional; default is True</code></p>
                              Whether the binary should use a custom launcher.

          <p>If this attribute is set to false, the
          <a href="/versions/6.2.0/reference/be/java.html#java_binary.launcher">launcher</a> attribute  and the related
          <a href="/versions/6.2.0/docs/user-manual#flag--java_launcher"><code>--java_launcher</code></a> flag
          will be ignored for this target.

        </td>
      </tr>
                        </tbody>
  </table>
  <h2 id="android_device">
    android_device
  </h2>

  <pre class="rule-signature">android_device(<a href="#android_device.name">name</a>, <a href="#android_device.cache">cache</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="#android_device.default_properties">default_properties</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#android_device.horizontal_resolution">horizontal_resolution</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#android_device.platform_apks">platform_apks</a>, <a href="#android_device.ram">ram</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#android_device.screen_density">screen_density</a>, <a href="#android_device.system_image">system_image</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="#android_device.vertical_resolution">vertical_resolution</a>, <a href="common-definitions.html#common.visibility">visibility</a>, <a href="#android_device.vm_heap">vm_heap</a>)</pre>


<p>This rule creates an android emulator configured with the given
  specifications. This emulator may be started via a bazel run
  command or by executing the generated script directly. It is encouraged to depend
  on existing android_device rules rather than defining your own.
</p>
<p>This rule is a suitable target for the --run_under flag to bazel test and blaze
  run.  It starts an emulator, copies the target being tested/run to the emulator,
  and tests it or runs it as appropriate.
</p>
<p><code>android_device</code> supports creating KVM images if the underlying
  <a href="/versions/6.2.0/reference/be/android.html#android_device.system_image">system_image</a> is X86 based and is
  optimized for at most the I686 CPU architecture. To use KVM add
  <code> tags = ['requires-kvm'] </code> to the <code>android_device</code> rule.
</p>

<h4 id="android_device_implicit_outputs">Implicit output targets</h4>
        <ul>
          <li><code><var>name</var>_images/userdata.dat</code>:
          Contains image files and snapshots to start the emulator</li>
          <li><code><var>name</var>_images/emulator-meta-data.pb</code>:
          Contains serialized information necessary to pass on to the emulator to
          restart it.</li>
        </ul>


<h4 id="android_device_examples">Examples</h4>

<p>The following example shows how to use android_device.
<code>//java/android/helloandroid/BUILD</code> contains</p>
<pre class="code">
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/**"]),
)
</pre>
  <p><code>//java/android/helloandroid/nexus_s.properties</code> contains:</p>
  <pre class="code">
ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju
</pre>
<p>
  This rule will generate images and a start script. You can start the emulator
  locally by executing bazel run :nexus_s -- --action=start. The script exposes
  the following flags:
</p>
  <ul>
    <li>--adb_port: The port to expose adb on. If you wish to issue adb
    commands to the emulator this is the port you will issue adb connect
    to.</li>
    <li>--emulator_port: The port to expose the emulator's telnet management
    console on.</li>
    <li>--enable_display: Starts the emulator with a display if true (defaults
    to false).</li>
    <li>--action: Either start or kill.</li>
    <li>--apks_to_install: a list of apks to install on the emulator.</li>
  </ul>



  <h3 id="android_device_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_device.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="android_device.cache">
          <code>cache</code>
        </td>
        <td>
                    <p><code>Integer; required</code></p>
                            The size in megabytes of the emulator's cache partition.
        The minimum value of this is 16 megabytes.

        </td>
      </tr>
                                <tr>
        <td id="android_device.default_properties">
          <code>default_properties</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; optional</code></p>
                            A single properties file to be placed in /default.prop on the emulator.
        This allows the rule author to further configure the emulator to appear more like
        a real device (In particular controlling its UserAgent strings and other
        behaviour that might cause an application or server to behave differently to
        a specific device). The properties in this file will override read only
        properties typically set by the emulator such as ro.product.model.

        </td>
      </tr>
                                                                        <tr>
        <td id="android_device.horizontal_resolution">
          <code>horizontal_resolution</code>
        </td>
        <td>
                    <p><code>Integer; required</code></p>
                            The horizontal screen resolution in pixels to emulate.
        The minimum value is 240.

        </td>
      </tr>
                                <tr>
        <td id="android_device.platform_apks">
          <code>platform_apks</code>
        </td>
        <td>
                    <p><code>List of <a href="/versions/6.2.0/concepts/labels">labels</a>; optional</code></p>
                            A list of apks to be installed on the device at boot time.

        </td>
      </tr>
                      <tr>
        <td id="android_device.ram">
          <code>ram</code>
        </td>
        <td>
                    <p><code>Integer; required</code></p>
                            The amount of ram in megabytes to emulate for the device.
        This is for the entire device, not just for a particular app installed on the device. The
        minimum value is 64 megabytes.

        </td>
      </tr>
                                <tr>
        <td id="android_device.screen_density">
          <code>screen_density</code>
        </td>
        <td>
                    <p><code>Integer; required</code></p>
                            The density of the emulated screen in pixels per inch.
        The minimum value of this is 30 ppi.

        </td>
      </tr>
                      <tr>
        <td id="android_device.system_image">
          <code>system_image</code>
        </td>
        <td>
                    <p><code><a href="/versions/6.2.0/concepts/labels">Label</a>; required</code></p>
                            A filegroup containing the following files:
        <ul>
        <li>system.img: The system partition</li>
        <li>kernel-qemu: The Linux kernel the emulator will load</li>
        <li>ramdisk.img: The initrd image to use at boot time</li>
        <li>userdata.img: The initial userdata partition</li>
        <li>source.properties: A properties file containing information about the
        images</li>
        </ul>
        These files are part of the android sdk or provided by third parties (for
        example Intel provides x86 images).

        </td>
      </tr>
                                                    <tr>
        <td id="android_device.vertical_resolution">
          <code>vertical_resolution</code>
        </td>
        <td>
                    <p><code>Integer; required</code></p>
                            The vertical screen resolution in pixels to emulate.
        The minimum value is 240.

        </td>
      </tr>
                                <tr>
        <td id="android_device.vm_heap">
          <code>vm_heap</code>
        </td>
        <td>
                    <p><code>Integer; required</code></p>
                            The size in megabytes of the virtual machine heap Android will use for each process.
        The minimum value is 16 megabytes.

        </td>
      </tr>
              </tbody>
  </table>
  <h2 id="android_ndk_repository">
    android_ndk_repository
  </h2>

  <pre class="rule-signature">android_ndk_repository(<a href="#android_ndk_repository.name">name</a>, <a href="#android_ndk_repository.api_level">api_level</a>, <a href="#android_ndk_repository.path">path</a>, <a href="#android_ndk_repository.repo_mapping">repo_mapping</a>)</pre>


<p>Configures Bazel to use an Android NDK to support building Android targets with native
code.

<p>Note that building for Android also requires an <code>android_sdk_repository</code> rule in your
<code>WORKSPACE</code> file.

<p>
For more information, read the <a href="https://bazel.build/versions/6.2.0/docs/android-ndk">
full documentation on using Android NDK with Bazel</a>.
</p>

<h4 id="android_ndk_repository_examples">Examples</h4>

<pre class="code">
android_ndk_repository(
    name = "androidndk",
)
</pre>

<p>The above example will locate your Android NDK from <code>$ANDROID_NDK_HOME</code> and detect
the highest API level that it supports.

<pre class="code">
android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)
</pre>

<p>The above example will use the Android NDK located inside your workspace in
<code>./android-ndk-r20</code>. It will use the API level 24 libraries when compiling your JNI
code.

<h4 id="android_ndk_repository_cpufeatures">cpufeatures</h4>

<p>The Android NDK contains the
<a href="https://developer.android.com/ndk/guides/cpu-features.html">cpufeatures library</a>
which can be used to detect a device's CPU at runtime. The following example demonstrates how to use
cpufeatures with Bazel.

<pre class="code">
# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
</pre>

<pre class="code">
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)
</pre>



  <h3 id="android_ndk_repository_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_ndk_repository.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="android_ndk_repository.api_level">
          <code>api_level</code>
        </td>
        <td>
                    <p><code>Integer; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is 0</code></p>
                            The Android API level to build against. If not specified, the highest API level installed
        will be used.

        </td>
      </tr>
                      <tr>
        <td id="android_ndk_repository.path">
          <code>path</code>
        </td>
        <td>
                    <p><code>String; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a></code></p>
                            An absolute or relative path to an Android NDK. Either this attribute or the
        <code>$ANDROID_NDK_HOME</code> environment variable must be set.

        <p>The Android NDK can be downloaded from
        <a href='https://developer.android.com/ndk/downloads/index.html'>the Android developer site
        </a>.

        </td>
      </tr>
                      <tr>
        <td id="android_ndk_repository.repo_mapping">
          <code>repo_mapping</code>
        </td>
        <td>
                    <p><code>Dictionary: String -> String; optional</code></p>
                            A dictionary from local repository name to global repository name. This allows controls over
        workspace dependency resolution for dependencies of this repository.

        <p>For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this
        repository depends on <code>"@foo"</code> (such as a dependency on
        <code>"@foo//some:target"</code>), it should actually resolve that dependency within
        globally-declared <code>"@bar"</code> (<code>"@bar//some:target"</code>).

        </td>
      </tr>
              </tbody>
  </table>
  <h2 id="android_sdk_repository">
    android_sdk_repository
  </h2>

  <pre class="rule-signature">android_sdk_repository(<a href="#android_sdk_repository.name">name</a>, <a href="#android_sdk_repository.api_level">api_level</a>, <a href="#android_sdk_repository.build_tools_version">build_tools_version</a>, <a href="#android_sdk_repository.path">path</a>, <a href="#android_sdk_repository.repo_mapping">repo_mapping</a>)</pre>


<p>Configures Bazel to use a local Android SDK to support building Android targets.</p>

<h4 id="android_sdk_repository_examples">Examples</h4>

The minimum to set up an Android SDK for Bazel is to put an <code>android_sdk_repository</code> rule
named "androidsdk" in your <code>WORKSPACE</code> file and set the <code>$ANDROID_HOME</code>
environment variable to the path of your Android SDK. Bazel will use the highest Android API level
and build tools version installed in the Android SDK by default.

<pre class="code">
android_sdk_repository(
    name = "androidsdk",
)
</pre>

<p>To ensure reproducible builds, the <code>path</code>, <code>api_level</code> and
<code>build_tools_version</code> attributes can be set to specific values. The build will fail if
the Android SDK does not have the specified API level or build tools version installed.

<pre class="code">
android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)
</pre>

<p>The above example also demonstrates using a workspace-relative path to the Android SDK. This is
useful if the Android SDK is part of your Bazel workspace (e.g. if it is checked into version
control).


<h4 id="android_sdk_repository_support_libraries">Support Libraries</h4>

<p>The Support Libraries are available in the Android SDK Manager as "Android Support Repository".
This is a versioned set of common Android libraries, such as the Support and AppCompat libraries,
that is packaged as a local Maven repository. <code>android_sdk_repository</code> generates Bazel
targets for each of these libraries that can be used in the dependencies of
<code>android_binary</code> and <code>android_library</code> targets.

<p>The names of the generated targets are derived from the Maven coordinates of the libraries in the
Android Support Repository, formatted as <code>@androidsdk//${group}:${artifact}-${version}</code>.
The following example shows how an <code>android_library</code> can depend on version 25.0.0 of the
v7 appcompat library.

<pre class="code">
android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)
</pre>



  <h3 id="android_sdk_repository_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="android_sdk_repository.name"><code>name</code></td>
        <td>
          <p><code><a href="/versions/6.2.0/concepts/labels#target-names">Name</a>; required</code></p>
          <p>A unique name for this target.</p>

        </td>
      </tr>
                <tr>
        <td id="android_sdk_repository.api_level">
          <code>api_level</code>
        </td>
        <td>
                    <p><code>Integer; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a>; default is 0</code></p>
                            The Android API level to build against by default. If not specified, the highest API level
        installed will be used.

        <p>The API level used for a given build can be overridden by the <code>android_sdk</code>
        flag. <code>android_sdk_repository</code> creates an <code>android_sdk</code> target for
        each API level installed in the SDK with name <code>@androidsdk//:sdk-${level}</code>,
        whether or not this attribute is specified. For example, to build against a non-default API
        level: <code>bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app</code>.

        <p>To view all <code>android_sdk</code> targets generated by <code>android_sdk_repository
        </code>, you can run <code>bazel query "kind(android_sdk, @androidsdk//...)"</code>.

        </td>
      </tr>
                      <tr>
        <td id="android_sdk_repository.build_tools_version">
          <code>build_tools_version</code>
        </td>
        <td>
                    <p><code>String; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a></code></p>
                            The version of the Android build tools to use from within the Android SDK. If not specified,
        the latest build tools version installed will be used.

        <p>Bazel requires build tools version 30.0.0 or later.

        </td>
      </tr>
                      <tr>
        <td id="android_sdk_repository.path">
          <code>path</code>
        </td>
        <td>
                    <p><code>String; optional; <a href="common-definitions.html#configurable-attributes">nonconfigurable</a></code></p>
                            An absolute or relative path to an Android SDK. Either this attribute or the
        <code>$ANDROID_HOME</code> environment variable must be set.

        <p>The Android SDK can be downloaded from
        <a href='https://developer.android.com'>the Android developer site</a>.

        </td>
      </tr>
                      <tr>
        <td id="android_sdk_repository.repo_mapping">
          <code>repo_mapping</code>
        </td>
        <td>
                    <p><code>Dictionary: String -> String; optional</code></p>
                            A dictionary from local repository name to global repository name. This allows controls over
        workspace dependency resolution for dependencies of this repository.

        <p>For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this
        repository depends on <code>"@foo"</code> (such as a dependency on
        <code>"@foo//some:target"</code>), it should actually resolve that dependency within
        globally-declared <code>"@bar"</code> (<code>"@bar//some:target"</code>).

        </td>
      </tr>
              </tbody>
  </table>

<!-- Generated footer -->

</body>
</html>
