This CL adds the android_binary rule to Bazel. 

Note that despite the rule being present, Android support is still not functional: two tools (//tools/android:{aar_generator,resources_processor} are still missing (and are a-coming!)

--
MOS_MIGRATED_REVID=96099045
diff --git a/src/main/java/com/google/devtools/build/lib/Constants.java b/src/main/java/com/google/devtools/build/lib/Constants.java
index 60d2186..0b97f5e 100644
--- a/src/main/java/com/google/devtools/build/lib/Constants.java
+++ b/src/main/java/com/google/devtools/build/lib/Constants.java
@@ -87,7 +87,7 @@
    */
   public static final ImmutableSet<String> IOS_DEVICE_RULE_CLASSES = ImmutableSet.of("ios_device");
 
-  public static final String ANDROID_DEFAULT_SDK = "//external:android_sdk".toString();
+  public static final String ANDROID_DEFAULT_SDK = "//external:android/sdk".toString();
   public static final boolean ANDROID_ALLOW_SDK_FILEGROUP = Boolean.valueOf(false);
   public static final String ANDROID_DEP_PREFIX = "//external:android/".toString();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index e15ed20..e8a6d65 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -32,6 +32,8 @@
 import com.google.devtools.build.lib.analysis.constraints.EnvironmentRule;
 import com.google.devtools.build.lib.bazel.rules.android.AndroidNdkRepositoryRule;
 import com.google.devtools.build.lib.bazel.rules.android.AndroidSdkRepositoryRule;
+import com.google.devtools.build.lib.bazel.rules.android.BazelAndroidBinaryRule;
+import com.google.devtools.build.lib.bazel.rules.android.BazelAndroidSemantics;
 import com.google.devtools.build.lib.bazel.rules.common.BazelActionListenerRule;
 import com.google.devtools.build.lib.bazel.rules.common.BazelExtraActionRule;
 import com.google.devtools.build.lib.bazel.rules.common.BazelFilegroupRule;
@@ -66,7 +68,11 @@
 import com.google.devtools.build.lib.packages.PackageGroup;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.rules.android.AndroidBinaryOnlyRule;
+import com.google.devtools.build.lib.rules.android.AndroidConfiguration;
+import com.google.devtools.build.lib.rules.android.AndroidRuleClasses;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainRule;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainSuiteRule;
 import com.google.devtools.build.lib.rules.cpp.CppBuildInfo;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader;
@@ -191,7 +197,8 @@
           PythonOptions.class,
           BazelPythonConfiguration.Options.class,
           ObjcCommandLineOptions.class,
-          J2ObjcCommandLineOptions.class
+          J2ObjcCommandLineOptions.class,
+          AndroidConfiguration.Options.class
       );
 
   /**
@@ -240,6 +247,7 @@
     builder.addRuleDefinition(new BazelShTestRule());
 
     builder.addRuleDefinition(new CcToolchainRule());
+    builder.addRuleDefinition(new CcToolchainSuiteRule());
     builder.addRuleDefinition(new BazelCppRuleClasses.CcLinkingRule());
     builder.addRuleDefinition(new BazelCppRuleClasses.CcDeclRule());
     builder.addRuleDefinition(new BazelCppRuleClasses.CcBaseRule());
@@ -259,6 +267,8 @@
     try {
       builder.addWorkspaceFile(
           ResourceFileLoader.loadResource(BazelJavaRuleClasses.class, "jdk.WORKSPACE"));
+      builder.addWorkspaceFile(
+          ResourceFileLoader.loadResource(BazelAndroidSemantics.class, "android.WORKSPACE"));
     } catch (IOException e) {
       throw new IllegalStateException(e);
     }
@@ -275,6 +285,16 @@
     builder.addRuleDefinition(new BazelJavaPluginRule());
     builder.addRuleDefinition(new JavaToolchainRule());
 
+    builder.addRuleDefinition(new AndroidRuleClasses.AndroidSdkRule());
+    builder.addRuleDefinition(new AndroidRuleClasses.AndroidToolsDefaultsJarRule());
+    builder.addRuleDefinition(new AndroidRuleClasses.AndroidBaseRule());
+    builder.addRuleDefinition(new AndroidRuleClasses.AndroidAaptBaseRule());
+    builder.addRuleDefinition(new AndroidRuleClasses.AndroidResourceSupportRule());
+    builder.addRuleDefinition(new AndroidRuleClasses.AndroidBinaryBaseRule());
+    builder.addRuleDefinition(new AndroidRuleClasses.JackRule());
+    builder.addRuleDefinition(new AndroidBinaryOnlyRule());
+    builder.addRuleDefinition(new BazelAndroidBinaryRule());
+
     builder.addRuleDefinition(new BazelIosTestRule());
     builder.addRuleDefinition(new ExperimentalIosTestRule());
     builder.addRuleDefinition(new IosDeviceRule());
@@ -328,5 +348,6 @@
     builder.addConfigurationFragment(new JavaConfigurationLoader(JAVA_CPU_SUPPLIER));
     builder.addConfigurationFragment(new ObjcConfigurationLoader());
     builder.addConfigurationFragment(new J2ObjcConfiguration.Loader());
+    builder.addConfigurationFragment(new AndroidConfiguration.Loader());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE
index 94b80ed..a3f4130 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android.WORKSPACE
@@ -13,7 +13,3 @@
 bind(name = "android/merge_dexzips", actual = "//tools/android:merge_dexzips")
 bind(name = "android/debug_keystore", actual = "//tools/android:debug_keystore")
 bind(name = "android/sdk", actual = "//tools/android:sdk")
-
-
-
-
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index 66a30e1..a096882 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -75,6 +75,12 @@
         "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
         ")");
     config.create("tools/cpp/CROSSTOOL", readFromResources("MOCK_CROSSTOOL"));
+    config.create("tools/android/BUILD",
+        "filegroup(name = 'sdk')",
+        "filegroup(name = 'aar_generator')",
+        "filegroup(name = 'resources_processor')",
+        "filegroup(name = 'incremental_stub_application')",
+        "filegroup(name = 'incremental_split_stub_application')");
     config.create("tools/genrule/BUILD",
         "exports_files(['genrule-setup.sh'])");
   }
diff --git a/src/test/shell/bazel/local_repository_test.sh b/src/test/shell/bazel/local_repository_test.sh
index 7b6f993..668c0d0 100755
--- a/src/test/shell/bazel/local_repository_test.sh
+++ b/src/test/shell/bazel/local_repository_test.sh
@@ -419,8 +419,8 @@
     path = "$external_dir",
 )
 EOF
-  bazel fetch //external:* || fail "Fetch failed"
-  bazel query 'deps(//external:*)' >& $TEST_log || fail "query failed"
+  bazel fetch //external:my-repo || fail "Fetch failed"
+  bazel query 'deps(//external:my-repo)' >& $TEST_log || fail "query failed"
   expect_log "//external:my-repo"
 }
 
diff --git a/tools/BUILD b/tools/BUILD
index 39af650..6bd88fd 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -7,6 +7,7 @@
 filegroup(
     name = "srcs",
     srcs = glob(["**"]) + [
+        "//tools/android:srcs",
         "//tools/jdk:srcs",
         "//tools/genrule:srcs",
         "//tools/cpp:srcs",
diff --git a/tools/android/BUILD b/tools/android/BUILD
index de5114b..8c1e135 100644
--- a/tools/android/BUILD
+++ b/tools/android/BUILD
@@ -131,3 +131,8 @@
         ":stubify_manifest",
     ],
 )
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+)