android: biometry: catch java import errors

Catch JavaError when trying to load the java classes of the biometry
module on startup. This can raise if the device is on an old API version
and the loaded java class depends on apis unknown to the os.

Fixes #10470

```
02-17 10:07:25.714  5254  5270 I python  :   0.47 | E | __main__ | daemon.run_gui errored
02-17 10:07:25.714  5254  5270 I python  : Traceback (most recent call last):
02-17 10:07:25.714  5254  5270 I python  :   File "app/main.py", line 514, in handle_cmd
02-17 10:07:25.714  5254  5270 I python  :   File "app/electrum/daemon.py", line 653, in run_gui
02-17 10:07:25.714  5254  5270 I python  :   File "app/electrum/gui/qml/__init__.py", line 38, in <module>
02-17 10:07:25.714  5254  5270 I python  :   File "app/electrum/gui/qml/qeapp.py", line 49, in <module>
02-17 10:07:25.714  5254  5270 I python  :   File "app/electrum/gui/qml/qebiometrics.py", line 33, in <module>
02-17 10:07:25.714  5254  5270 I python  :   File "jnius/reflect.py", line 243, in autoclass
02-17 10:07:25.714  5254  5270 I python  :   File "jnius/jnius_export_class.pxi", line 877, in jnius.jnius.JavaMethod.__call__
02-17 10:07:25.714  5254  5270 I python  :   File "jnius/jnius_export_class.pxi", line 964, in jnius.jnius.JavaMethod.call_method
02-17 10:07:25.714  5254  5270 I python  :   File "jnius/jnius_utils.pxi", line 79, in jnius.jnius.check_exception
02-17 10:07:25.714  5254  5270 I python  : jnius.jnius.JavaException: JVM exception occurred: Failed resolution of: Landroid/hardware/biometrics/BiometricPrompt$AuthenticationResult; java.lang.NoClassDefFoundError
```
This commit is contained in:
f321x
2026-02-17 10:17:00 +01:00
parent 52b554a5f2
commit f573ab2d56
+10 -7
View File
@@ -26,13 +26,16 @@ jIntent = None
jString = None
if 'ANDROID_DATA' in os.environ:
from jnius import autoclass
from jnius import autoclass, JavaException
from android import activity
jPythonActivity = autoclass('org.kivy.android.PythonActivity').mActivity
jBiometricHelper = autoclass('org.electrum.biometry.BiometricHelper')
jBiometricActivity = autoclass('org.electrum.biometry.BiometricActivity')
jIntent = autoclass('android.content.Intent')
jString = autoclass('java.lang.String')
try:
jPythonActivity = autoclass('org.kivy.android.PythonActivity').mActivity
jIntent = autoclass('android.content.Intent')
jString = autoclass('java.lang.String')
jBiometricActivity = autoclass('org.electrum.biometry.BiometricActivity')
jBiometricHelper = autoclass('org.electrum.biometry.BiometricHelper')
except JavaException as e:
_logger.error(f"Could not load Biometric java classes (maybe due to old api version): {e}")
class BiometricAction(str, Enum):
@@ -56,7 +59,7 @@ class QEBiometrics(AuthMixin, QObject):
@pyqtProperty(bool, constant=True)
def isAvailable(self) -> bool:
if 'ANDROID_DATA' not in os.environ:
if 'ANDROID_DATA' not in os.environ or jBiometricHelper is None:
return False
try:
return jBiometricHelper.isAvailable(jPythonActivity)