Part 2: Move version tracking from manifest meta-data to java resources.

This CL handles app-toolkit projects.

Previously support library tracked its usage by adding meta-data tags
to each library, however that caused issues for certain libraries as
there is a high cost associated with services and meta-data in package
manager.

To work around this issue move to storing version information in java
resource inside the jar META-INF/group_name.version.

Bug: 65418258
Test: ./gradlew buildOnServer
Change-Id: Id45eaa9600bf29cc25736cf61262e5ef046d6c23
diff --git a/app-toolkit/core-testing/src/main/AndroidManifest.xml b/app-toolkit/core-testing/src/main/AndroidManifest.xml
index 2d55b39..d169e00 100644
--- a/app-toolkit/core-testing/src/main/AndroidManifest.xml
+++ b/app-toolkit/core-testing/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.core.testing">
-    <application>
-        <meta-data android:name="android.arch.core.testing.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/app-toolkit/runtime/src/main/AndroidManifest.xml b/app-toolkit/runtime/src/main/AndroidManifest.xml
index a5660ce..3f40068 100644
--- a/app-toolkit/runtime/src/main/AndroidManifest.xml
+++ b/app-toolkit/runtime/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.core">
-    <application>
-        <meta-data android:name="android.arch.core.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy b/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy
index 5fe6d60..c6abac2 100644
--- a/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy
+++ b/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy
@@ -17,7 +17,6 @@
 package android.support
 
 import com.google.common.collect.ImmutableMap
-import org.gradle.api.JavaVersion
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 
@@ -31,6 +30,7 @@
         SupportLibraryExtension supportLibraryExtension =
                 project.extensions.create("supportLibrary", SupportLibraryExtension, project);
         SupportLibraryMavenUploader.apply(project, supportLibraryExtension);
+        VersionFileWriterTask.setUpAndroidLibrary(project);
 
         project.apply(ImmutableMap.of("plugin", "com.android.library"));
     }
diff --git a/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy b/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy
index b60fddc..e0e0547 100644
--- a/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy
+++ b/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy
@@ -35,8 +35,6 @@
 class SupportAndroidLibraryPlugin implements Plugin<Project> {
     private static final String INSTRUMENTATION_RUNNER =
             "android.support.test.runner.AndroidJUnitRunner";
-    private static final String VERSION_FILE_PATH =
-            "generatedResources/META-INF/%s_%s.version"
 
     @Override
     public void apply(Project project) {
@@ -64,25 +62,10 @@
                 sourceCompatibility javaVersion
                 targetCompatibility javaVersion
             }
-
-            // Add a java resource file to the library jar for version tracking purposes.
-            String artifactName = String.format(VERSION_FILE_PATH, project.group, project.name)
-
-            def writeVersionFile =
-                    project.tasks.create("writeVersionFile", VersionFileWriterTask.class) {
-                        version project.version
-                        outputFile new File(project.buildDir,  artifactName)
-                    }
-
-            library.libraryVariants.all {
-                it.processJavaResources.dependsOn(writeVersionFile)
-            }
-
-            library.sourceSets.main.resources {
-                srcDir new File(project.buildDir, "generatedResources")
-            }
         }
 
+        VersionFileWriterTask.setUpAndroidLibrary(project);
+
         project.apply(ImmutableMap.of("plugin", "com.android.library"));
         project.apply(ImmutableMap.of("plugin", ErrorProneBasePlugin.class));
 
diff --git a/buildSrc/src/main/java/android/support/VersionFileWriterTask.java b/buildSrc/src/main/java/android/support/VersionFileWriterTask.java
index b1fdbe1..aafa023 100644
--- a/buildSrc/src/main/java/android/support/VersionFileWriterTask.java
+++ b/buildSrc/src/main/java/android/support/VersionFileWriterTask.java
@@ -16,7 +16,11 @@
 
 package android.support;
 
+import com.android.build.gradle.LibraryExtension;
+
+import org.gradle.api.Action;
 import org.gradle.api.DefaultTask;
+import org.gradle.api.Project;
 import org.gradle.api.tasks.Input;
 import org.gradle.api.tasks.OutputFile;
 import org.gradle.api.tasks.TaskAction;
@@ -29,9 +33,50 @@
  * Task that allows to write a version to a given output file.
  */
 public class VersionFileWriterTask extends DefaultTask {
+    public static final String RESOURCE_DIRECTORY = "generatedResources";
+    public static final String VERSION_FILE_PATH =
+            RESOURCE_DIRECTORY + "/META-INF/%s_%s.version";
+
     private String mVersion;
     private File mOutputFile;
 
+    /**
+     * Sets up Android Library project to have a task that generates a version file.
+     *
+     * @param project an Android Library project.
+     */
+    public static void setUpAndroidLibrary(Project project) {
+        project.afterEvaluate(new Action<Project>() {
+            @Override
+            public void execute(Project project) {
+                LibraryExtension library =
+                        project.getExtensions().findByType(LibraryExtension.class);
+
+                String group = (String) project.getProperties().get("group");
+                String artifactId = (String) project.getProperties().get("name");
+                String version = (String) project.getProperties().get("version");
+
+                // Add a java resource file to the library jar for version tracking purposes.
+                File artifactName = new File(project.getBuildDir(),
+                        String.format(VersionFileWriterTask.VERSION_FILE_PATH,
+                                group, artifactId));
+
+                VersionFileWriterTask writeVersionFile =
+                        project.getTasks().create("writeVersionFile", VersionFileWriterTask.class);
+                writeVersionFile.setVersion(version);
+                writeVersionFile.setOutputFile(artifactName);
+
+                library.getLibraryVariants().all(
+                        libraryVariant -> libraryVariant.getProcessJavaResources().dependsOn(
+                                writeVersionFile));
+
+                library.getSourceSets().getByName("main").getResources().srcDir(
+                        new File(project.getBuildDir(), VersionFileWriterTask.RESOURCE_DIRECTORY)
+                );
+            }
+        });
+    }
+
     @Input
     public String getVersion() {
         return mVersion;
diff --git a/lifecycle/reactivestreams/src/main/AndroidManifest.xml b/lifecycle/reactivestreams/src/main/AndroidManifest.xml
index c7b09a2..2210041 100644
--- a/lifecycle/reactivestreams/src/main/AndroidManifest.xml
+++ b/lifecycle/reactivestreams/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.lifecycle.reactivestreams">
-    <application>
-        <meta-data android:name="android.arch.lifecycle.reactivestreams.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/lifecycle/runtime/src/main/AndroidManifest.xml b/lifecycle/runtime/src/main/AndroidManifest.xml
index 5641eac..274a076 100644
--- a/lifecycle/runtime/src/main/AndroidManifest.xml
+++ b/lifecycle/runtime/src/main/AndroidManifest.xml
@@ -17,8 +17,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.lifecycle">
-    <application>
-        <meta-data android:name="android.arch.lifecycle.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/paging/runtime/src/main/AndroidManifest.xml b/paging/runtime/src/main/AndroidManifest.xml
index 8bf5de9..dfc4bdf 100644
--- a/paging/runtime/src/main/AndroidManifest.xml
+++ b/paging/runtime/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.paging.runtime">
-    <application>
-        <meta-data android:name="android.arch.paging.runtime.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/persistence/db-framework/src/main/AndroidManifest.xml b/persistence/db-framework/src/main/AndroidManifest.xml
index 89d09af..9350b90 100644
--- a/persistence/db-framework/src/main/AndroidManifest.xml
+++ b/persistence/db-framework/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.persistence.db.framework">
-    <application>
-        <meta-data android:name="android.arch.persistence.db.framework.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/persistence/db/src/main/AndroidManifest.xml b/persistence/db/src/main/AndroidManifest.xml
index 5894255..8a27324 100644
--- a/persistence/db/src/main/AndroidManifest.xml
+++ b/persistence/db/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.persistence.db">
-    <application>
-        <meta-data android:name="android.arch.persistence.db.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/room/runtime/src/main/AndroidManifest.xml b/room/runtime/src/main/AndroidManifest.xml
index 79ffb93..54a5b36 100644
--- a/room/runtime/src/main/AndroidManifest.xml
+++ b/room/runtime/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.persistence.room">
-    <application>
-        <meta-data android:name="android.arch.persistence.room.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/room/rxjava2/src/main/AndroidManifest.xml b/room/rxjava2/src/main/AndroidManifest.xml
index 958f331..33279c6 100644
--- a/room/rxjava2/src/main/AndroidManifest.xml
+++ b/room/rxjava2/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.persistence.room.rxjava2">
-    <application>
-        <meta-data android:name="android.arch.persistence.room.rxjava2.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>
diff --git a/room/testing/src/main/AndroidManifest.xml b/room/testing/src/main/AndroidManifest.xml
index 3e6414c..594f016 100644
--- a/room/testing/src/main/AndroidManifest.xml
+++ b/room/testing/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.persistence.room.testing">
-    <application>
-        <meta-data android:name="android.arch.persistence.room.testing.VERSION"
-                   android:value="${version}" />
-    </application>
 </manifest>