根据gradle风格仅将某些资产复制到APK

时间:2018-02-20 10:57:43

标签: android gradle android-gradle

我有一个使用NDK和CMake以及externalNativeBuild的Android Studio项目。为了减少数据包大小,我有几种不同纹理压缩格式的风格。没有代码更改,即所有生成的APK都使用完全相同的代码。

productFlavors {
        ETC2 {
            manifestPlaceholders = [supportedTexture: "GL_OES_compressed_ETC2_RGB8_texture"]
        }
        DXT {
            manifestPlaceholders = [supportedTexture: "GL_EXT_texture_compression_dxt1"]
        }
        ATC {
            manifestPlaceholders = [supportedTexture: "GL_AMD_compressed_ATC_texture"]
        }
        //...and list goes on...
 }

这在实践中意味着我有一个复制任务,它检查当前的味道并将正确的纹理包复制到APK中。 getCurrentFlavor()函数是从How to get current flavor in gradle复制的:

task copyTexSD(type: Copy) {
    def currentFlavor = getCurrentFlavor()
    if(currentFlavor == "etc2") {
        from 'bin/tex/ETC2.bin'
    }
    else if(currentFlavor == "dxt") {
        from 'bin/tex/DXT.bin'
    }
    else if(currentFlavor == "atc") {
        from 'bin/tex/ATC.bin'
    }
    //...
    into 'src/main/assets/tex'
}

要构建一切,我使用以下批处理命令:

call gradlew clean 
call gradlew assembleETC2Release 
call gradlew assembleDXTRelease
call gradlew assembleATCRelease

这样做效果不错,但由于某种原因,复制到以前的APK的纹理包也包含在后续的APK中,如下所示:

  • app-ETC2-release.apk 仅包含 ETC2.bin 文件
  • app-DXT-release.apk 包含 DXT.bin ETC2.bin
  • app-ATC-release.apk 包含 ATC.bin DXT.bin ETC2.bin

为什么构建过程包含先前Gradle任务的资产?如何使构建过程每个APK只有一个纹理文件?

0 个答案:

没有答案