我有一个使用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中,如下所示:
为什么构建过程包含先前Gradle任务的资产?如何使构建过程每个APK只有一个纹理文件?