From 3abcd61ad880ebfe60974b4b2330f864e3ad589c Mon Sep 17 00:00:00 2001 From: zhangjiongxuan Date: Thu, 20 Jul 2017 19:09:00 +0800 Subject: [PATCH] Resolved if the "Unzip" an empty file, it will compile failed (especially in Tencent's Bugly) --- .../replugin/gradle/plugin/inner/Util.groovy | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/replugin-plugin-gradle/src/main/groovy/com/qihoo360/replugin/gradle/plugin/inner/Util.groovy b/replugin-plugin-gradle/src/main/groovy/com/qihoo360/replugin/gradle/plugin/inner/Util.groovy index 7fcf798c..f1cb3f3a 100644 --- a/replugin-plugin-gradle/src/main/groovy/com/qihoo360/replugin/gradle/plugin/inner/Util.groovy +++ b/replugin-plugin-gradle/src/main/groovy/com/qihoo360/replugin/gradle/plugin/inner/Util.groovy @@ -29,6 +29,8 @@ import org.gradle.api.Project import java.nio.file.Files import java.nio.file.Paths +import java.util.zip.ZipFile + import static com.android.builder.model.AndroidProject.FD_INTERMEDIATES; /** @@ -83,13 +85,14 @@ public class Util { String jarZipDir = project.getBuildDir().path + File.separator + FD_INTERMEDIATES + File.separator + "exploded-aar" + File.separator + Hashing.sha1().hashString(jarPath, Charsets.UTF_16LE).toString() + File.separator + "class"; - unzip(jarPath, jarZipDir) - def jarZip = jarZipDir + ".jar" - includeJars << jarZip - classPath << jarZipDir - visitor.setBaseDir(jarZipDir) - Files.walkFileTree(Paths.get(jarZipDir), visitor) - map.put(jarPath, jarZip) + if (unzip(jarPath, jarZipDir)) { + def jarZip = jarZipDir + ".jar" + includeJars << jarZip + classPath << jarZipDir + visitor.setBaseDir(jarZipDir) + Files.walkFileTree(Paths.get(jarZipDir), visitor) + map.put(jarPath, jarZip) + } } else { @@ -98,12 +101,12 @@ public class Util { /* 将 jar 包解压,并将解压后的目录加入 classpath */ // println ">>> 解压Jar${jarPath}" String jarZipDir = jar.getParent() + File.separatorChar + jar.getName().replace('.jar', '') - unzip(jarPath, jarZipDir) - - classPath << jarZipDir + if (unzip(jarPath, jarZipDir)) { + classPath << jarZipDir - visitor.setBaseDir(jarZipDir) - Files.walkFileTree(Paths.get(jarZipDir), visitor) + visitor.setBaseDir(jarZipDir) + Files.walkFileTree(Paths.get(jarZipDir), visitor) + } // 删除 jar FileUtils.forceDelete(jar) @@ -130,8 +133,15 @@ public class Util { /** * 解压 zipFilePath 到 目录 dirPath */ - def private static unzip(String zipFilePath, String dirPath) { + def private static boolean unzip(String zipFilePath, String dirPath) { + // 若这个Zip包是空内容的(如引入了Bugly就会出现),则直接忽略 + if (isZipEmpty(zipFilePath)) { + println ">>> Zip file is empty! Ignore"; + return false; + } + new AntBuilder().unzip(src: zipFilePath, dest: dirPath, overwrite: 'true') + return true; } /** @@ -182,4 +192,14 @@ public class Util { } println() } + + def static boolean isZipEmpty(String zipFilePath) { + ZipFile z; + try { + z = new ZipFile(zipFilePath) + return z.size() == 0 + } finally { + z.close(); + } + } }