Bazel uses apksigner from SDK build-tools instead of embedded jar.

A followup change will remove the apksigner jar that is bundled with Bazel.

RELNOTES: Bazel Android builds use the apksigner tool from the Android SDK
build-tools. Bazel Android builds now require build-tools version 24.0.3 or
later.

--
PiperOrigin-RevId: 141181612
MOS_MIGRATED_REVID=141181612
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index f697070..87caa42 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -586,6 +586,7 @@
         "//src/main/java/com/google/devtools/build/skyframe",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/protobuf:crosstool_config_java_proto",
+        "//third_party:android_common_25_0_0",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:joda_time",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
index b916bdd..d609c22 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.bazel.rules.android;
 
+import com.android.repository.Revision;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
@@ -26,6 +27,7 @@
 import com.google.devtools.build.lib.skyframe.FileSymlinkException;
 import com.google.devtools.build.lib.skyframe.FileValue;
 import com.google.devtools.build.lib.skyframe.InconsistentFilesystemException;
+import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.ResourceFileLoader;
 import com.google.devtools.build.lib.vfs.Path;
@@ -44,6 +46,8 @@
  * Implementation of the {@code android_sdk_repository} rule.
  */
 public class AndroidSdkRepositoryFunction extends RepositoryFunction {
+  private static final Revision MIN_BUILD_TOOLS_REVISION = new Revision(24, 0, 3);
+
   @Override
   public boolean isLocal(Rule rule) {
     return true;
@@ -86,6 +90,12 @@
       buildToolsVersion = buildToolsDirectory;
     }
 
+    try {
+      assertValidBuildToolsVersion(rule, buildToolsVersion);
+    } catch (EvalException e) {
+      throw new RepositoryFunctionException(e, Transience.PERSISTENT);
+    }
+
     String template = getStringResource("android_sdk_repository_template.txt");
 
     String buildFile = template
@@ -158,4 +168,26 @@
       throw new RepositoryFunctionException(new IOException(error), Transience.PERSISTENT);
     }
   }
+
+  private static void assertValidBuildToolsVersion(Rule rule, String buildToolsVersion)
+      throws EvalException {
+    try {
+      Revision buildToolsRevision = Revision.parseRevision(buildToolsVersion);
+      if (buildToolsRevision.compareTo(MIN_BUILD_TOOLS_REVISION) < 0) {
+        throw new EvalException(
+            rule.getAttributeLocation("build_tools_version"),
+            String.format(
+                "Bazel requires Android build tools version %s or newer, %s was provided",
+                MIN_BUILD_TOOLS_REVISION,
+                buildToolsRevision));
+      }
+    } catch (NumberFormatException e) {
+      throw new EvalException(
+          rule.getAttributeLocation("build_tools_version"),
+          String.format(
+              "Bazel does not recognize Android build tools version %s",
+              buildToolsVersion),
+          e);
+    }
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
index a970d41..0ffa376 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
@@ -44,8 +44,8 @@
         "android_sdk_repository(",
         "    name = 'mysdk',",
         "    path = '/sdk',",
-        "    build_tools_version = '24.0.0',",
-        "    api_level = 24,",
+        "    build_tools_version = '25.0.0',",
+        "    api_level = 25,",
         ")");
   }
 
diff --git a/tools/android/android_sdk_repository_template.bzl b/tools/android/android_sdk_repository_template.bzl
index 58a4345..a007d2b 100644
--- a/tools/android/android_sdk_repository_template.bzl
+++ b/tools/android/android_sdk_repository_template.bzl
@@ -188,7 +188,7 @@
       annotations_jar = "tools/support/annotations.jar",
       main_dex_classes = "build-tools/%s/mainDexClasses.rules" % build_tools_directory,
       apkbuilder = "@bazel_tools//third_party/java/apkbuilder:embedded_apkbuilder",
-      apksigner = "@bazel_tools//third_party/java/apksig:embedded_apksigner",
+      apksigner = ":apksigner",
       zipalign = ":zipalign_binary",
       jack = ":fail",
       jill = ":fail",
@@ -206,6 +206,12 @@
       runtime_deps = [":proguard_import"]
   )
 
+  native.java_binary(
+      name = "apksigner",
+      main_class = "com.android.apksigner.ApkSignerTool",
+      runtime_deps = ["build-tools/%s/lib/apksigner.jar" % build_tools_directory],
+  )
+
   native.filegroup(
       name = "build_tools_libs",
       srcs = native.glob([