Add custom_package attribute to android_local_test.

android_local_test generates and R.class file and so this is necessary for projects that don't nest their BUILD files under a java/ or javatests/ root.

Fixes #4618

RELNOTES: None
PiperOrigin-RevId: 185281836
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
index 0ef779b..3d758f1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
@@ -129,6 +129,12 @@
         the libraries under test have a <code>minSdkVersion</code> tag in them.
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("manifest", LABEL).allowedFileTypes(FileTypeSet.ANY_FILE))
+        /* <!-- #BLAZE_RULE($android_local_test_base).ATTRIBUTE(custom_package) -->
+        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.
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        .add(attr("custom_package", STRING))
         .add(
             attr("resource_files", LABEL_LIST)
                 .allowedFileTypes(FileTypeSet.ANY_FILE)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestTest.java
index 6129129..34583b7 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestTest.java
@@ -18,6 +18,8 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.testutil.MoreAsserts;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -111,6 +113,23 @@
     assertNoEvents();
   }
 
+  @Test
+  public void testCustomPackage() throws Exception {
+    scratch.file(
+        "a/BUILD",
+        "load('//java/bar:foo.bzl', 'extra_deps')",
+        "android_local_test(name = 'dummyTest',",
+        "    srcs = ['test.java'],",
+        "    custom_package = 'custom.pkg',",
+        "    test_class = 'test',",
+        "    deps = extra_deps)");
+    ConfiguredTarget target = getConfiguredTarget("//a:dummyTest");
+    Artifact resourcesClassJar =
+        getImplicitOutputArtifact(target, AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR);
+    List<String> args = getGeneratingSpawnActionArgs(resourcesClassJar);
+    MoreAsserts.assertContainsSublist(args, "--packageForR", "custom.pkg");
+  }
+
   @Override
   protected String getRuleName() {
     return "android_local_test";
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
index 7f93fb6..6d23f69 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -318,12 +318,10 @@
         ":AbstractAndroidLocalTestTestBase",
         "//src/main/java/com/google/devtools/build/lib:android-rules",
         "//src/main/java/com/google/devtools/build/lib:build-base",
-        "//src/main/java/com/google/devtools/build/lib:java-compilation",
         "//src/main/java/com/google/devtools/build/lib:util",
         "//src/main/java/com/google/devtools/build/lib/actions",
-        "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/test/java/com/google/devtools/build/lib:actions_testutil",
-        "//src/test/java/com/google/devtools/build/lib:analysis_testutil",
+        "//src/test/java/com/google/devtools/build/lib:testutil",
         "//third_party:guava",
         "//third_party:junit4",
         "//third_party:truth",