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;
}
In Conscrypt v2.6-alpha3,
NoClassDefFoundErroroccurs on Android 15.0 (SDK 34) and earlier.This error did not occur in Conscrypt v2.5.3.
Stack trace:
I believe the cause is that
android.crypto.hpke.HpkeSpidoes not exist or is unavailable on Android 15.0 and earlier, and the related change is likely in #1258.Although untested, adding
LinkageError(orNoClassDefFoundError) to the exceptions being caught might fix the issue:conscrypt/common/src/main/java/org/conscrypt/OpenSSLProvider.java
Lines 626 to 633 in 5203ae3
to