Lazily construct AndroidDeployInfo proto.

RELNOTES: None
PiperOrigin-RevId: 165116857
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index 3503179..ebec97f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -580,18 +580,19 @@
     filesBuilder.add(zipAlignedApk);
     NestedSet<Artifact> filesToBuild = filesBuilder.build();
 
-    Iterable<Artifact> dataDeps = ImmutableList.of();
+    ImmutableList<Artifact> dataDeps = ImmutableList.of();
     if (ruleContext.attributes().has("data", BuildType.LABEL_LIST)
         && ruleContext.getAttributeMode("data") == Mode.DATA) {
       dataDeps = ruleContext.getPrerequisiteArtifacts("data", Mode.DATA).list();
     }
 
     Artifact deployInfo = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.DEPLOY_INFO);
-    AndroidDeployInfoAction.createDeployInfoAction(ruleContext,
+    AndroidDeployInfoAction.createDeployInfoAction(
+        ruleContext,
         deployInfo,
         resourceApk.getManifest(),
         additionalMergedManifests,
-        Iterables.concat(ImmutableList.of(zipAlignedApk), apksUnderTest),
+        ImmutableList.<Artifact>builder().add(zipAlignedApk).addAll(apksUnderTest).build(),
         dataDeps);
 
     RuleConfiguredTargetBuilder builder =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java
index ba4b09d..91d6fcb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java
@@ -54,17 +54,28 @@
   }
 
   private static final String GUID = "eda283ba-9000-4b80-8dc4-7939101c44ba";
-  private final ByteString byteString;
+
+  private final Artifact mergedManifest;
+  private final ImmutableList<Artifact> additionalMergedManifests;
+  private final ImmutableList<Artifact> apksToDeploy;
+  private final ImmutableList<Artifact> dataDeps;
 
   AndroidDeployInfoAction(
       ActionOwner owner,
       Artifact outputFile,
       Artifact mergedManifest,
-      Iterable<Artifact> additionalMergedManifests,
-      Iterable<Artifact> apksToDeploy,
-      Iterable<Artifact> dataDeps) {
+      ImmutableList<Artifact> additionalMergedManifests,
+      ImmutableList<Artifact> apksToDeploy,
+      ImmutableList<Artifact> dataDeps) {
     super(owner, makeInputs(mergedManifest, additionalMergedManifests, apksToDeploy, dataDeps),
         outputFile, false);
+    this.mergedManifest = mergedManifest;
+    this.additionalMergedManifests = additionalMergedManifests;
+    this.apksToDeploy = apksToDeploy;
+    this.dataDeps = dataDeps;
+  }
+
+  private ByteString getByteString() {
     AndroidDeployInfoOuterClass.AndroidDeployInfo.Builder builder =
         AndroidDeployInfoOuterClass.AndroidDeployInfo.newBuilder();
     builder.setMergedManifest(makeArtifactProto(mergedManifest));
@@ -77,16 +88,16 @@
     for (Artifact dataDep : dataDeps) {
       builder.addDataToDeploy(makeArtifactProto(dataDep));
     }
-    this.byteString = builder.build().toByteString();
+    return builder.build().toByteString();
   }
 
   static void createDeployInfoAction(
       RuleContext ruleContext,
       Artifact deployInfo,
       Artifact mergedManifest,
-      Iterable<Artifact> additionalMergedManifests,
-      Iterable<Artifact> apksToDeploy,
-      Iterable<Artifact> dataDeps) {
+      ImmutableList<Artifact> additionalMergedManifests,
+      ImmutableList<Artifact> apksToDeploy,
+      ImmutableList<Artifact> dataDeps) {
     Action action = new AndroidDeployInfoAction(ruleContext.getActionOwner(),
         deployInfo, mergedManifest, additionalMergedManifests, apksToDeploy, dataDeps);
     ruleContext.registerAction(action);
@@ -94,12 +105,12 @@
 
   @Override
   public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx) throws IOException {
-    return new ByteStringDeterministicWriter(byteString);
+    return new ByteStringDeterministicWriter(getByteString());
   }
 
   @VisibleForTesting
   public AndroidDeployInfo getDeployInfo() throws InvalidProtocolBufferException {
-    return AndroidDeployInfo.parseFrom(byteString);
+    return AndroidDeployInfo.parseFrom(getByteString());
   }
 
   @Override
@@ -107,7 +118,7 @@
     Fingerprint f = new Fingerprint()
         .addString(GUID);
 
-    try (InputStream in = byteString.newInput()) {
+    try (InputStream in = getByteString().newInput()) {
       byte[] buffer = new byte[512];
       int amountRead;
       while ((amountRead = in.read(buffer)) != -1) {
@@ -116,7 +127,6 @@
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
-
     return f.hexDigestAndReset();
   }