该问题通常是由于缺少Cwebp和Dwebp转码工具导致的。解决此问题的方法是将cwebp和dwebp和相应的库文件(libwebp_android.so)添加到项目的assets目录下,并将它们解压缩到临时目录。可在app module 的 build.gradle 文件中添加如下代码:
android{ ... aaptOptions { noCompress "webp" } }
dependencies{ implementation 'com.google.android.gms:play-services-ads:18.3.0' }
tasks.register("copyStaticAssets"){ // if you don't use kotlin ;) // doLast {
doLast {
from(projectDir.absolutePath + "/src/main/webp")
into("${buildDir.absolutePath}/intermediates/cwebp_tmp")
// just in case it never existed before
mkdir("${buildDir.absolutePath}/intermediates/cwebp_tmp"){
}
// PNG files are converted by default
// but you can use other extensions
// like ".jpg"
eachFile { file ->
// the option remove(1) is because
// the extension comes with a dot
def imgName = file.nameWithoutExtension.remove(1)
def tmpDir = file.parent
exec {
// here's the important thing
// the tool can be get here
commandLine 'cp', "${projectDir}/src/main/webp/cwebp", "${tmpDir}"
commandLine 'cp', "${projectDir}/src/main/webp/dwebp", "${tmpDir}"
// the command's 'WEBP_IMAGE_HERE' is the
// path where the new webp image will be placed
commandLine "${tmpDir}/cwebp", file.absolutePath, '-o', "${tmpDir}/${imgName}.webp"
}
}
}
}
在代码中,我们在项目的build.gradle文件中使用了aaptOptions来防止元素中的Webp文件压缩。此外,我们还添加