Skip to content

[2.6-alpha3] NoClassDefFoundError on Android 15.0 (SDK 34) and earlier #1508

@MMP0

Description

@MMP0

In Conscrypt v2.6-alpha3, NoClassDefFoundError occurs on Android 15.0 (SDK 34) and earlier.

This error did not occur in Conscrypt v2.5.3.

@Override
public boolean onCreate() {
	try {
		Security.insertProviderAt(Conscrypt.newProvider(), 1);
		return true;
	} catch (Throwable e) {
		e.printStackTrace();
		return false;
	}
}

Stack trace:

java.lang.NoClassDefFoundError
	at android.crypto.hpke.HpkeSpi.<clinit>(Unknown Source)
	at java.lang.Class.classForName(Native Method)
	at java.lang.Class.forName(Class.java:400)
	at java.lang.Class.forName(Class.java:326)
	at org.conscrypt.OpenSSLProvider.classExists(OpenSSLProvider.java:628)
	at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:585)
	at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:54)
	at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:49)
	at org.conscrypt.Conscrypt.newProvider(Conscrypt.java:155)
	...

I believe the cause is that android.crypto.hpke.HpkeSpi does not exist or is unavailable on Android 15.0 and earlier, and the related change is likely in #1258.

Although untested, adding LinkageError (or NoClassDefFoundError) to the exceptions being caught might fix the issue:

private boolean classExists(String classname) {
try {
Class.forName(classname);
} catch (ClassNotFoundException e) {
return false;
}
return true;
}

to

private boolean classExists(String classname) {
	try {
		Class.forName(classname);
	} catch (LinkageError | ClassNotFoundException e) {
		return false;
	}
	return true;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions