[GH-ISSUE #2692] App crashes on Android 10 when clicking "Let's get started" if Accessibility Services are enabled #1223

Open
opened 2026-10-13 20:38:30 +00:00 by bsakaguchi · 6 comments
Owner

Originally created by @amivanoff on GitHub (Jun 2, 2026).
Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/2692

Describe the bug
The AmneziaVPN Android client (v4.8.15.4) crashes immediately after clicking the "Let's get started" button on the initial screen. The crash occurs on a Samsung Galaxy Note 9 running Android 10.

Further testing revealed that the crash is directly related to Android Accessibility Services. If all Accessibility Services (e.g., password managers, TalkBack, automation tools, remote control, Link to Windows, calls sound recorders) are completely disabled in the system settings, the app bypasses the initial screen and works normally. The same app version works fine on Android 13 (tablet), where this API conflict does not occur.

To Reproduce
Steps to reproduce the behavior:

  1. Enable any third-party Accessibility Service in Android Settings (Settings -> Accessibility -> Installed services).
  2. Perform a clean install of AmneziaVPN v4.8.15.4 and open it.
  3. On the welcome screen, click the "Let's get started" button.
  4. The application immediately crashes.

Expected behavior
Click on "Let's get started" button should lead to Connection screen.

Log files
Relevant Log Snippet

05-22 23:24:36.462 10808 31704 31704 W org.amnezia.vp: Accessing hidden method Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;-><init>(IFFF)V (greylist-max-o, JNI, denied)
05-22 23:24:36.464 10808 31704 31704 W AmneziaQt: java.lang.NoSuchMethodError: no non-static method "Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;.<init>(IFFF)V"
05-22 23:24:36.464 10808 31704 31704 W AmneziaQt: 	at org.qtproject.qt.android.QtNativeAccessibility.populateNode(Native Method)
05-22 23:24:36.464 10808 31704 31704 W AmneziaQt: 	at org.qtproject.qt.android.QtAccessibilityDelegate.getNodeForVirtualViewId(QtAccessibilityDelegate.java:471)
...
05-22 23:24:36.465 10808 31704 31704 D AndroidRuntime: Shutting down VM
05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: FATAL EXCEPTION: main
05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: Process: org.amnezia.vpn, PID: 31704
05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: 	at org.qtproject.qt.android.QtAccessibilityDelegate.getNodeForVirtualViewId(QtAccessibilityDelegate.java:477)
05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: 	at org.qtproject.qt.android.QtAccessibilityDelegate.lambda$notifyValueChanged$5$org-qtproject-qt-android-QtAccessibilityDelegate(QtAccessibilityDelegate.java:257)

Smartphone:

  • Device: Samsung Galaxy Note 9 (SM-N960F)
  • OS: Android 10
  • Version 4.8.15.4 (Latest)

Server:

  • Amnezia Premium server

Root Cause Analysis (from Log)
The crash is caused by an unhandled NullPointerException inside the Qt framework's accessibility bridge (QtAccessibilityDelegate).

  1. On Android 10, Google blocks access to certain hidden APIs. When the active Accessibility Service queries the UI layout, the Qt native layer tries to invoke a hidden constructor:
    Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;-><init>(IFFF)V
  2. The system denies this JNI reflection call (greylist-max-o, JNI, denied), causing QtNativeAccessibility.populateNode to return a null reference.
  3. QtAccessibilityDelegate.getNodeForVirtualViewId attempts to invoke a method (likely .toString()) on this null reference without a safety check, resulting in a fatal crash on the main UI thread.

Temporary Workaround
Disabling all active services in Settings -> Accessibility -> Installed Services prevents the crash and allows the app to function normally.

Originally created by @amivanoff on GitHub (Jun 2, 2026). Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/2692 **Describe the bug** The AmneziaVPN Android client (v4.8.15.4) crashes immediately after clicking the "Let's get started" button on the initial screen. The crash occurs on a Samsung Galaxy Note 9 running Android 10. Further testing revealed that the crash is directly related to Android Accessibility Services. If all Accessibility Services (e.g., password managers, TalkBack, automation tools, remote control, Link to Windows, calls sound recorders) are completely disabled in the system settings, the app bypasses the initial screen and works normally. The same app version works fine on Android 13 (tablet), where this API conflict does not occur. **To Reproduce** Steps to reproduce the behavior: 1. Enable any third-party Accessibility Service in Android Settings (Settings -> Accessibility -> Installed services). 2. Perform a clean install of AmneziaVPN v4.8.15.4 and open it. 3. On the welcome screen, click the "Let's get started" button. 4. The application immediately crashes. **Expected behavior** Click on "Let's get started" button should lead to Connection screen. **Log files** Relevant Log Snippet ``` 05-22 23:24:36.462 10808 31704 31704 W org.amnezia.vp: Accessing hidden method Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;-><init>(IFFF)V (greylist-max-o, JNI, denied) 05-22 23:24:36.464 10808 31704 31704 W AmneziaQt: java.lang.NoSuchMethodError: no non-static method "Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;.<init>(IFFF)V" 05-22 23:24:36.464 10808 31704 31704 W AmneziaQt: at org.qtproject.qt.android.QtNativeAccessibility.populateNode(Native Method) 05-22 23:24:36.464 10808 31704 31704 W AmneziaQt: at org.qtproject.qt.android.QtAccessibilityDelegate.getNodeForVirtualViewId(QtAccessibilityDelegate.java:471) ... 05-22 23:24:36.465 10808 31704 31704 D AndroidRuntime: Shutting down VM 05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: FATAL EXCEPTION: main 05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: Process: org.amnezia.vpn, PID: 31704 05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: at org.qtproject.qt.android.QtAccessibilityDelegate.getNodeForVirtualViewId(QtAccessibilityDelegate.java:477) 05-22 23:24:36.466 10808 31704 31704 E AndroidRuntime: at org.qtproject.qt.android.QtAccessibilityDelegate.lambda$notifyValueChanged$5$org-qtproject-qt-android-QtAccessibilityDelegate(QtAccessibilityDelegate.java:257) ``` **Smartphone:** - Device: Samsung Galaxy Note 9 (SM-N960F) - OS: Android 10 - Version 4.8.15.4 (Latest) **Server:** - Amnezia Premium server **Root Cause Analysis (from Log)** The crash is caused by an unhandled `NullPointerException` inside the Qt framework's accessibility bridge (`QtAccessibilityDelegate`). 1. On Android 10, Google blocks access to certain hidden APIs. When the active Accessibility Service queries the UI layout, the Qt native layer tries to invoke a hidden constructor: `Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;-><init>(IFFF)V` 2. The system denies this JNI reflection call (`greylist-max-o, JNI, denied`), causing `QtNativeAccessibility.populateNode` to return a `null` reference. 3. `QtAccessibilityDelegate.getNodeForVirtualViewId` attempts to invoke a method (likely `.toString()`) on this `null` reference without a safety check, resulting in a fatal crash on the main UI thread. **Temporary Workaround** Disabling all active services in `Settings -> Accessibility -> Installed Services` prevents the crash and allows the app to function normally.
Author
Owner

@danya54245 commented on GitHub (Jun 11, 2026):

I confirm the issue. It turns out a similar issue was caused by the screen dimmer, which works through Accessibility. My device: Realme 6 running Android 10.

<!-- gh-comment-id:4681500422 --> @danya54245 commented on GitHub (Jun 11, 2026): I confirm the issue. It turns out a similar issue was caused by the screen dimmer, which works through Accessibility. My device: Realme 6 running Android 10.
Author
Owner

@indigo274670-ux commented on GitHub (Jun 12, 2026):

I have the exact same problem. After disabling accessibility features, everything started opening correctly. Developers, please fix this bug!

<!-- gh-comment-id:4690067695 --> @indigo274670-ux commented on GitHub (Jun 12, 2026): I have the exact same problem. After disabling accessibility features, everything started opening correctly. Developers, please fix this bug!
Author
Owner

@squ1dix commented on GitHub (Jun 12, 2026):

Disabling Accessibility Services completely removes crashes on my Samsung Note 9 (Android 10), however UI rendering issues remain. The bottom navigation bar is rendered separately with a white background and appears scaled differently from the main content area. This suggests there may be an additional Qt/Android 10 compatibility issue unrelated to the Accessibility crash.

<!-- gh-comment-id:4693471281 --> @squ1dix commented on GitHub (Jun 12, 2026): Disabling Accessibility Services completely removes crashes on my Samsung Note 9 (Android 10), however UI rendering issues remain. The bottom navigation bar is rendered separately with a white background and appears scaled differently from the main content area. This suggests there may be an additional Qt/Android 10 compatibility issue unrelated to the Accessibility crash.
Author
Owner

@danya54245 commented on GitHub (Jun 12, 2026):

Yes, disabling accessibility features before launching AmneziaVPN for the first time also helped me—the app stopped minimizing. After the first successful launch, everything works correctly, even with accessibility features enabled. I'm really glad I came across your post; I didn't know what to do.
As for the bottom navigation bar, it displays correctly for me. Apparently, the AmneziaVPN update is somehow interfering with your specific device. Try submitting this bug report to the AmneziaVPN Telegram channel—they usually respond faster there.

<!-- gh-comment-id:4693743545 --> @danya54245 commented on GitHub (Jun 12, 2026): Yes, disabling accessibility features before launching AmneziaVPN for the first time also helped me—the app stopped minimizing. After the first successful launch, everything works correctly, even with accessibility features enabled. I'm really glad I came across your post; I didn't know what to do. As for the bottom navigation bar, it displays correctly for me. Apparently, the AmneziaVPN update is somehow interfering with your specific device. Try submitting this bug report to the AmneziaVPN Telegram channel—they usually respond faster there.
Author
Owner

@amivanoff commented on GitHub (Jun 12, 2026):

At least we have an understanding of the cause and a working workaround. Let's give them some time to recover from this ongoing whole system incident.

<!-- gh-comment-id:4695300537 --> @amivanoff commented on GitHub (Jun 12, 2026): At least we have an understanding of the cause and a working workaround. Let's give them some time to recover from this ongoing whole system incident.
Author
Owner

@AKotov-dev commented on GitHub (Jun 16, 2026):

X96Q Pro TVBox (Android-10)

My situation is a little different. Version 4.8.15.4 is the last version that works properly for me. All versions higher than 4.8.15.4 (i.e. 4.8.18.0 and 4.8.19.0) contain the bug.

<!-- gh-comment-id:4720079376 --> @AKotov-dev commented on GitHub (Jun 16, 2026): X96Q Pro TVBox (Android-10) My situation is a little different. Version 4.8.15.4 is the last version that works properly for me. All versions higher than 4.8.15.4 (i.e. 4.8.18.0 and 4.8.19.0) contain the bug.
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
amnezia-vpn/amnezia-client#1223
No description provided.