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>