summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Edgar <lukeedgar@google.com>2022-08-15 17:46:16 +0100
committerTreeHugger Robot <treehugger-gerrit@google.com>2022-08-16 16:41:57 +0000
commit30ea6a2f84072839b8df14f54405d73c313c391a (patch)
tree20745870825af14876057d953d70460354c1b87d
parent368729bb97973ff02505f4b0da1a7adce85b807c (diff)
downloadbase-30ea6a2f84072839b8df14f54405d73c313c391a.tar.gz
Avoid including empty directories in AARs
Bug: 232117952 Test: PrefabPublishingTest Change-Id: I3547e3274ce4c5f6a5b6524584c1b744b645acd5
-rw-r--r--build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/BundleAar.kt18
-rw-r--r--build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/AarPublishTest.kt47
-rw-r--r--build-system/integration-test/native/src/test/java/com/android/build/gradle/integration/ndk/PrefabPublishingTest.kt3
-rw-r--r--gmaven/src/test/resources/com/android/tools/test/gmaven-aars.txt4
4 files changed, 51 insertions, 21 deletions
diff --git a/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/BundleAar.kt b/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/BundleAar.kt
index 484e28872b..f076b22a85 100644
--- a/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/BundleAar.kt
+++ b/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/BundleAar.kt
@@ -142,8 +142,7 @@ abstract class BundleAar : Zip(), VariantAwareTask {
creationConfig.artifacts.get(
InternalArtifactType.DATA_BINDING_BASE_CLASS_LOG_ARTIFACT),
prependToCopyPath(
- DataBindingBuilder.DATA_BINDING_CLASS_LOG_ROOT_FOLDER_IN_AAR
- )
+ DataBindingBuilder.DATA_BINDING_CLASS_LOG_ROOT_FOLDER_IN_AAR)
)
}
@@ -394,11 +393,14 @@ abstract class BundleAar : Zip(), VariantAwareTask {
}
companion object {
- private fun prependToCopyPath(pathSegment: String) = Action { copySpec: CopySpec ->
- copySpec.eachFile { fileCopyDetails: FileCopyDetails ->
- fileCopyDetails.relativePath =
- fileCopyDetails.relativePath.prepend(pathSegment)
- }
- }
+
+ private fun prependToCopyPath(pathSegment: String, includeEmptyDirs: Boolean = false) =
+ Action { copySpec: CopySpec ->
+ copySpec.includeEmptyDirs = includeEmptyDirs
+ copySpec.eachFile { fileCopyDetails: FileCopyDetails ->
+ fileCopyDetails.relativePath =
+ fileCopyDetails.relativePath.prepend(pathSegment)
+ }
+ }
}
}
diff --git a/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/AarPublishTest.kt b/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/AarPublishTest.kt
index 552d4b8bca..80e6ad83a0 100644
--- a/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/AarPublishTest.kt
+++ b/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/AarPublishTest.kt
@@ -16,11 +16,15 @@
package com.android.build.gradle.integration.application
+import com.android.SdkConstants
import com.android.build.gradle.integration.common.fixture.GradleTestProject
import com.android.build.gradle.integration.common.fixture.app.MinimalSubProject
import com.android.build.gradle.integration.common.fixture.app.MultiModuleTestProject
+import com.android.build.gradle.integration.common.fixture.testprojects.PluginType
+import com.android.build.gradle.integration.common.fixture.testprojects.createGradleProject
import com.android.build.gradle.options.BooleanOption
import com.android.utils.FileUtils
+import com.google.wireless.android.sdk.stats.GradleBuildProject
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
@@ -30,18 +34,30 @@ import java.util.zip.ZipFile
/*
* Tests to verify that AARs produced from library modules in build/output/aar are in a state
-* which can be published e.g to public repository like Maven.
+* which can be published
+* e.g. to a public repository like Maven, AAR contains expected file structure.
*/
class AarPublishTest {
@get:Rule
- val project = GradleTestProject.builder().fromTestApp(
- MultiModuleTestProject.builder()
- .subproject(
- ":library", MinimalSubProject.lib("com.example.library")
- .appendToBuild("android.buildTypes.debug.testCoverageEnabled true")
- ).build()
- ).create()
+ val project = createGradleProject {
+ subProject(":library") {
+ plugins.add(PluginType.ANDROID_LIB)
+ android {
+ defaultCompileSdk()
+ namespace = "com.example.library"
+ buildTypes {
+ named("debug") {
+ testCoverageEnabled = true
+ }
+ }
+ addFile("src/main/res/values/strings.xml",
+ "<resources>\n" +
+ "<string name=\"one\">Some string</string>\n" +
+ "</resources>")
+ }
+ }
+ }
@get:Rule
val temporaryDirectory = TemporaryFolder()
@@ -55,7 +71,6 @@ class AarPublishTest {
val libraryPublishedAar =
FileUtils.join(librarySubproject.outputDir, "aar", "library-debug.aar")
val tempTestData = temporaryDirectory.newFolder("testData")
- val buildConfigClasspath = "com/example/library/BuildConfig.class"
val extractedJar = File(tempTestData, "classes.jar")
// Extracts the zipped BuildConfig.class in library-debug.aar/classes.jar to
// the extractedBuildConfigClass temporary file, so it can be later loaded
@@ -81,4 +96,18 @@ class AarPublishTest {
}
}
}
+
+ @Test
+ fun aarContainsAllowedRootDirectories() {
+ project.execute("library:assembleDebug")
+ project.getSubproject(":library").assertThatAar(GradleTestProject.ApkType.DEBUG.buildType) {
+ containsFile("/AndroidManifest.xml")
+ containsFile("/R.txt")
+ containsFile("/classes.jar")
+ containsFile("/res/values/values.xml")
+ containsFile("META-INF/com/android/build/gradle/aar-metadata.properties")
+ // Regression test for b/232117952
+ doesNotContain("/values/")
+ }
+ }
}
diff --git a/build-system/integration-test/native/src/test/java/com/android/build/gradle/integration/ndk/PrefabPublishingTest.kt b/build-system/integration-test/native/src/test/java/com/android/build/gradle/integration/ndk/PrefabPublishingTest.kt
index 62bf6eb2de..892d456a1d 100644
--- a/build-system/integration-test/native/src/test/java/com/android/build/gradle/integration/ndk/PrefabPublishingTest.kt
+++ b/build-system/integration-test/native/src/test/java/com/android/build/gradle/integration/ndk/PrefabPublishingTest.kt
@@ -212,6 +212,9 @@ class PrefabPublishingTest(
containsFile("prefab/prefab.json")
containsFile("prefab/modules/$gradleModuleName/module.json")
containsFile("prefab/modules/${gradleModuleName}_static/module.json")
+ // Regression test for b/232117952
+ doesNotContain("/modules/$gradleModuleName/")
+ doesNotContain("/modules/$gradleModuleName/include/$gradleModuleName/")
}
}
diff --git a/gmaven/src/test/resources/com/android/tools/test/gmaven-aars.txt b/gmaven/src/test/resources/com/android/tools/test/gmaven-aars.txt
index 9886730e33..2f2fe602c3 100644
--- a/gmaven/src/test/resources/com/android/tools/test/gmaven-aars.txt
+++ b/gmaven/src/test/resources/com/android/tools/test/gmaven-aars.txt
@@ -17,7 +17,6 @@ androidx/databinding/databinding-adapters
res/
res/values/
res/values/values.xml
- values/
androidx/databinding/databinding-ktx
AndroidManifest.xml
@@ -44,7 +43,6 @@ androidx/databinding/databinding-runtime
res/
res/values/
res/values/values.xml
- values/
androidx/databinding/viewbinding
AndroidManifest.xml
@@ -77,7 +75,6 @@ com/android/databinding/adapters
res/
res/values/
res/values/values.xml
- values/
com/android/databinding/library
AndroidManifest.xml
@@ -95,7 +92,6 @@ com/android/databinding/library
res/
res/values/
res/values/values.xml
- values/
com/android/databinding/viewbinding
AndroidManifest.xml