diff --git a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt index 4d3b2cb6b..7123ba48a 100644 --- a/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt +++ b/src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginsTest.kt @@ -853,7 +853,7 @@ class JavaPluginsTest : BasePluginTest() { @Test fun failBuildIfProcessingAar() { - val fooAarPath = path("foo.aar") + val fooAarPath = buildJar("foo.aar") { insert("AndroidManifest.xml", "") } projectScript.appendText( """ diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt index 913d12e36..3bb828c73 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt @@ -26,6 +26,8 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransf import java.io.File import java.io.IOException import java.util.jar.JarFile +import java.util.zip.ZipException +import java.util.zip.ZipFile import javax.inject.Inject import kotlin.reflect.full.hasAnnotation import org.apache.tools.zip.Zip64Mode @@ -451,7 +453,7 @@ public abstract class ShadowJar : Jar() { file.isDirectory -> { from(file) } - file.extension.equals("aar", ignoreCase = true) -> { + file.extension.equals("aar", ignoreCase = true) && file.isAar() -> { val message = """ Shadowing AAR file is not supported. @@ -666,3 +668,11 @@ public abstract class ShadowJar : Jar() { } } } + +private fun File.isAar(): Boolean = + try { + ZipFile(this).use { zip -> zip.getEntry("AndroidManifest.xml") != null } + } catch (_: ZipException) { + // File is not a valid ZIP, so it cannot be an AAR. + false + }