I’m attempting to update an Android app from Smack 4.2.0-beta2 to the latest 4.4.6. I progressed through the various versions one-by-one making any necessary changes along the way. However, with version 4.3.5 (and 4.4+), a runtime error appeared that I couldn’t fix.
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
I can’t determine how a gradle dependency could have an invalid signature and there are no good hits on the interwebs for help.
Here is relevant snippets from the build.gradle
file:
plugins {
id "kotlin-kapt"
id "com.google.dagger.hilt.android"
id "com.android.application"
id "com.google.gms.google-services"
id "com.google.firebase.crashlytics"
id "kotlin-android"
id "org.jetbrains.kotlin.android"
id "de.mannodermaus.android-junit5"
id "kotlin-parcelize"
id "org.anarres.jarjar"
}
android {
compileSdkVersion 33
defaultConfig {
minSdkVersion 28
targetSdkVersion 33
multiDexEnabled true
}
compileOptions {
sourceCompatibility 1.17
targetCompatibility 1.17
}
packagingOptions {
jniLibs {
pickFirsts += ["**"]
}
resources {
excludes += ["META-INF/DEPENDENCIES", "META-INF/LICENSE.txt", "META-INF/LICENSE", "META-INF/NOTICE.txt"]
pickFirsts += ["**"]
}
}
buildFeatures {
viewBinding true
dataBinding true
compose true
}
lint {
abortOnError false
}
namespace "****"
}
configurations {
all {
exclude group: "xpp3", module: "xpp3"
}
}
dependencies {
api fileTree(dir: "libs", include: ["*.jar"])
api "org.igniterealtime.smack:smack-android-extensions:4.4.6"
api "org.igniterealtime.smack:smack-tcp:4.4.6"
api "org.igniterealtime.smack:smack-experimental:4.4.6"
}
kapt {
correctErrorTypes true
}
Here’s the stacktrace of the error:
java.lang.ExceptionInInitializerError
at org.jivesoftware.smack.Smack.getVersion(Smack.java:38)
at org.jivesoftware.smack.Smack.ensureInitialized(Smack.java:64)
at org.jivesoftware.smack.ConnectionConfiguration.<clinit>(ConnectionConfiguration.java:116)
at org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration.builder(XMPPTCPConnectionConfiguration.java:64)
...snip...
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.IllegalStateException: Could not load Smack configuration file
at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:99)
at org.jivesoftware.smack.Smack.getVersion(Smack.java:38)
at org.jivesoftware.smack.Smack.ensureInitialized(Smack.java:64)
at org.jivesoftware.smack.ConnectionConfiguration.<clinit>(ConnectionConfiguration.java:116)
at org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration.builder(XMPPTCPConnectionConfiguration.java:64)
...snip...
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:314)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:268)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:317)
at java.util.jar.JarVerifier.update(JarVerifier.java:229)
at java.util.jar.JarFile.initializeVerifier(JarFile.java:393)
at java.util.jar.JarFile.getInputStream(JarFile.java:460)
at libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection.getInputStream(ClassPathURLStreamHandler.java:162)
at java.net.URL.openStream(URL.java:1072)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:989)
at org.jivesoftware.smack.util.FileUtils.getStreamForClasspathFile(FileUtils.java:64)
at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:96)
at org.jivesoftware.smack.Smack.getVersion(Smack.java:38)
at org.jivesoftware.smack.Smack.ensureInitialized(Smack.java:64)
at org.jivesoftware.smack.ConnectionConfiguration.<clinit>(ConnectionConfiguration.java:116)
at org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration.builder(XMPPTCPConnectionConfiguration.java:64)
...snip...
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
This problem appeared in the 4.3.5 version and was not present in the 4.2.0 version, so I don’t believe it’s a problem specifically with the configuration of the app.