无法读取PNG签名:文件不以PNG签名开头

时间:2017-09-12 13:19:20

标签: android gradle android-gradle

Gradle构建失败并出现此错误:

Error:C:\Users\Roman\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.0.2.aar\bab547c3f1b8061ef9426f524a823a15\res\drawable-xhdpi-v4\abc_btn_switch_to_on_mtrl_00001.9.png failed to read PNG signature: file does not start with PNG signature

Error:java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: AAPT2 compile failed:
Error:Execution failed for task ':app:mergeDebugResources'.
Error: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: AAPT2 compile failed:
aapt2 compile --legacy -o C:\dev\workspace\android2\MatrixCalculator\app\build\intermediates\res\merged\debug C:\Users\Roman\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.0.2.aar\bab547c3f1b8061ef9426f524a823a15\res\drawable-xhdpi-v4\abc_btn_switch_to_on_mtrl_00001.9.png
Issues:
 - ERROR: C:\Users\Roman\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.0.2.aar\bab547c3f1b8061ef9426f524a823a15\res\drawable-xhdpi-v4\abc_btn_switch_to_on_mtrl_00001.9.png failed to read PNG signature: file does not start with PNG signature

我尝试解决此问题的一些基本事项:

  1. 无效缓存/重启
  2. 删除gradle文件夹

19 个答案:

答案 0 :(得分:16)

问题可能是因为图片的错误扩展 就我而言,该文件是JPEG图片,但保存为 PNG未转换为。在这种情况下,将更改扩展为真实的并转换为 PNG ,然后重试。

对于instace,你有ic_logo.png但它实际上是 JPG 图像。
您应该将其重命名为ic_logo.jpg并使用 Photoshop 之类的内容将图像转换为PNG格式。

答案 1 :(得分:4)

步骤

  1. build.gradle

    aaptOptions {     cruncherEnabled = false }

  2. 删除C:\Users\.gradle\caches

  3. 中的内容
  4. 重新启动Android Studio

答案 2 :(得分:3)

创建应用程序的.apk将分析所有资源,如果某些资源格式不正确或损坏,您将收到消息:

  

.png无法读取PNG签名:文件无法以PNG开头   签名

enter image description here

确保拥有正确的资源,您可以通过打开文件进行检查。

答案 3 :(得分:2)

android {
    buildTypes {
        release {
            crunchPngs false // or true
        }
    }
}







 buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
        release {
            crunchPngs false // or true

            lintOptions {
                checkReleaseBuilds false
                abortOnError false
            }
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

答案 4 :(得分:1)

我不确定它是否是有效的解决方案,但删除仅错误消息中提到的文件有帮助。删除文件夹时,包含它的文件没有。

答案 5 :(得分:1)

由于出现错误的图像扩展名而发生。 例如,图像为 jpg ,扩展名为 png

解决方案:

  1. 在build.gradle中添加def sum_divisors(n): sum = 0 divisor = 1 while divisor < n: if n % divisor == 0: sum = sum + divisor divisor += 1 # Return the sum of all divisors of n, not including n return sum
  2. 将图像转换为png,而不仅仅是更改扩展名。

答案 6 :(得分:0)

您可能使用过JPEG文件或其他图像文件格式。

使用PNG图像解决错误。

可绘制目录只能有png类型的图像。

答案 7 :(得分:0)

这确实是错误的文件类型的结果,可以通过以正确的格式保存文件来修复。

我使用 PhoneGap Build 遇到了这个问题,并希望为其他任何 PhoneGap / Cordova 用户留下2美分进入这个。

我的问题是我将旧的PhoneGap 6.x 升级为 8.0 ,似乎默认启动的行为已更改。它曾经要求jpg作为默认的splash,但是在8.0上它会在生产版本中产生这个错误。

之前有效:

<splash src="www/splash.jpg" />

现在您有2个选项。用png替换默认的splash,如下所示:

<splash src="www/res/screen/android/screen-xhdpi-portrait.png" />

其他选项是完全删除默认启动。

答案 8 :(得分:0)

要快速修复,请在app.gradle中将 shrinkResources 改为 false ,而不是 true 希望这会有所帮助。 如果没有那么也添加这个 aaptOptions {cruncherEnabled = false}

答案 9 :(得分:0)

如果您没有任何透明像素,那么将文件重命名为def isDigit(string): string = string.strip() if string[:1] == "-": cuted = string[1:] if cuted.isdigit(): return True else: return False elif string.isdigit(): return True else: return False print isDigit("-234.4") 对我来说是可行的。

答案 10 :(得分:0)

我遇到了同样的问题。要解决该问题,只需重新启动Android Studio并再次构建gradle文件。

答案 11 :(得分:0)

我发现了一个有趣但简单的方法,首先在任何在线站点或您的photoshop上将您的文件(很可能是jpeg或其他图像文件)转换为png。然后使用https://appicon.co/将该png图片转换为png图标,然后将其添加到android / app / src / main中的res文件夹中。完成

答案 12 :(得分:0)

我遇到了同样的问题,可以通过将图像从Android studio转换为webP来解决 右键点击图片->点击“转换为WebP”

该转换将处理文件格式并减小PNG的大小

答案 13 :(得分:0)

就我而言,还有一个 jpg 文件而不是 png,所以我更改了扩展名并解决了我的问题。

答案 14 :(得分:0)

您可以在 node_modules/react-native/react.gradle 中添加代码。在 doFirst 之后

doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("drawable-ldpi").call()
moveFunc.curry("drawable-mdpi").call()
moveFunc.curry("drawable-hdpi").call()
moveFunc.curry("drawable-xhdpi").call()
moveFunc.curry("drawable-xxhdpi").call()
moveFunc.curry("drawable-xxxhdpi").call()
moveFunc.curry("raw").call()
}

在删除drawable文件夹后检查它是否没有解决问题 github enter link description here

答案 15 :(得分:0)

我能够永久修复它。

我创建了一个新的空白 expo 项目,然后我添加了一个新的应用程序图标(正确的 png 格式),然后我从 expo 中弹出。

然后我将 mipmap-* 文件夹从空白项目复制到我的真实项目中。一切都很完美。

答案 16 :(得分:-1)

如果您使用在线平台生成App Icon(launcher_icon),则使用PNG格式或先将JPEG转换为PNG,然后使用APP ICON GENERATOR

答案 17 :(得分:-1)

你可以用windows win10'Paint'打开图片, 然后你可以保存为 .png 并覆盖它, 它会解决问题

答案 18 :(得分:-2)

我有同样的错误,我执行了一些步骤:

  1. 在画图中打开abc_btn_switch_to_on_mtrl_00001.9.png(图像)文件
  2. 现在选择png并另存为,并重新保存在可绘制的图像中,并与旧图像及其工作一起超重

enter image description here