gradle - 如何使用Gradle压缩嵌套zip的内容

标签 gradle

我有以下源zip文件(outer.zip),其中包含一个inner.zip文件,该文件本身包含两个.txt文件:

outer.zip          
   +--inner.zip   
         +--a.txt
         +--b.txt

我需要创建一个new.zip文件,其中包含inner.zip文件(两个.txt文件)的内容,即
new.zip           
   +--a.txt     
   +--b.txt

以下gradle似乎工作正常:
apply plugin: 'java'

task unzipInnerZip(type: Copy) {
    from (zipTree('outer.zip'))
    include 'inner.zip'
    into "${buildDir}/temp/extracted"
}

task buildNewZip(type: Zip, dependsOn: unzipInnerZip) {
    baseName = 'new'
    from (zipTree("${buildDir}/temp/extracted/inner.zip"))
}

assemble.dependsOn(buildNewZip)

我的问题是,如何在不将inner.zip文件提取到命名的temp目录的情况下达到相同的结果-我当前的解决方案不太像“渐变方式”。

最佳答案

我采用以下结构:

- 2.zip
 - 1.zip
  - a.txt
  - b.txt

如果是以上代码,则可以使用以下代码完成:
task buildZip(type: Zip) {
    baseName = 'new'
    from (zipTree(zipTree(file('2.zip')).files.find { it.name == '1.zip' }))
}

与以下行:
zipTree(file('2.zip')).files.find { it.name == '1.zip' }

1.zip的条目中找到2.zip。然后将其用作zipTree提要。

您的解决方案工作得很好,并且也代表了gradle的方式-请记住有关SRP的;)

关于gradle - 如何使用Gradle压缩嵌套zip的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013479/

相关文章:

android - Gradle 安卓 : how to add custom apk task before apk sign?

jar - 如何从 gradle jar 任务中提取公共(public)代码到方法中

android - 生成签名的 apk 失败并出现 build\app\intermediates\flutter\profile\libs.jar(系统找不到指定的路径)

gradle - Kotlin Gradle脚本设置

android - 如何使用 gradleW 从命令行获取签名的 apk?

android - 如何解决UnsatisfiedLinkError?

java - gradle 创建 jar 不适用于 'implementation' 依赖项

java - 在 IntelliJ 中找不到符号变量 DaggerAppComponent

android - Android Studio 3.0.1新项目:AAPT2执行异常

android - 如何制作单个 AAR 文件,有一些其他 AAR 文件