qaul.net icon indicating copy to clipboard operation
qaul.net copied to clipboard

2.0.0-beta.16 crashes on Android

Open link2xt opened this issue 2 years ago • 6 comments

I installed https://github.com/qaul/qaul.net/releases/download/v2.0.0-beta.16/qaul-2.0.0-beta.16.apk from the website.

The application keeps crashing before showing any UI.

adb logcat output:

08-16 16:32:10.452 25363 28847 I libqaul::connections:..: BLE module start result received
08-16 16:32:10.452 25363 28847 I libqaul::connections:..: BLE Module successfully started
08-16 16:32:10.456  3489 13364 E Parcel  : Attempt to read from protected data in Parcel 0x7a6906ca68
08-16 16:32:10.459 25363 28874 E AndroidRuntime: FATAL EXCEPTION: pool-5-thread-1
08-16 16:32:10.459 25363 28874 E AndroidRuntime: Process: net.qaul.qaul_app, PID: 25363
08-16 16:32:10.459 25363 28874 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'android.os.IBinder android.os.IInterface.asBinder()' on a null object reference
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.os.Parcel.createException(Parcel.java:2077)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:2039)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1987)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.bluetooth.IBluetoothGatt$Stub$Proxy.startAdvertisingSet(IBluetoothGatt.java:1526)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertisingSet(BluetoothLeAdvertiser.java:434)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertisingSet(BluetoothLeAdvertiser.java:306)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:158)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:93)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at net.qaul.ble.service.BleService.startAdvertise$lambda-1(BleService.kt:47)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at net.qaul.ble.service.BleService.e(Unknown Source:0)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at b7.b.run(Unknown Source:4)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
08-16 16:32:10.459 25363 28874 E AndroidRuntime:        at java.lang.Thread.run(Thread.java:919)
08-16 16:32:10.463  1466 28877 I DropBoxManagerService: add tag=data_app_crash isTagEnabled=true flags=0x2
08-16 16:32:10.463  1466 17560 W ActivityTaskManager:   Force finishing activity net.qaul.qaul_app/.MainActivity
08-16 16:32:10.467  1466 28877 W DropBoxManagerService: Dropping: data_app_crash (1377 > 0 bytes)

link2xt avatar Aug 16 '23 14:08 link2xt

Could you provide more information?

  • Phone vendor & model
  • Android OS version

MathJud avatar Sep 04 '23 06:09 MathJud

Have you tried install the app via Google Play store?

MathJud avatar Sep 04 '23 06:09 MathJud

It is Android 10 on Xiaomi Redmi Note 3 (codename kenzo). I only tried the APK from the website so far, could try to download Google Play version via Aurora Store, but don't have actual Google Play account.

link2xt avatar Sep 04 '23 19:09 link2xt

Maybe you need to reduce targetSdk? I don't see it set anywhere in https://github.com/qaul/qaul.net/blob/5385e61de5a63201e11e4be34ba3cd28be1c6ea9/qaul_ui/android/build.gradle

link2xt avatar Sep 04 '23 19:09 link2xt

Aurora Store currently does not work for me, so I cannot test the version from Google Play.

link2xt avatar Sep 06 '23 22:09 link2xt

Aurora Store currently does not work for me, so I cannot test the version from Google Play.

You can also get it from Apkpure: https://apkpure.com/qaul-%D9%82%D9%88%D9%84/net.qaul.qaul_app

eleius avatar Dec 13 '23 07:12 eleius

I have downloaded 2.0.0-beta.17 from https://github.com/qaul/qaul.net/releases/tag/v2.0.0-beta.17 and installed it with adb install qaul-2.0.0-beta.17.apk over USB.

If I start the app without enabling bluetooth and do not enable it when it says "qaul wants to turn on Bluetooth" (click "Deny"), it works. But if I click "Allow" and bluetooth gets enabled, after "Turning on Bluetooth..." popup it crashes.

Crash log from adb logcat:

03-25 02:56:56.835 29022 31329 I libqaul::connections:..: BLE module start result received
03-25 02:56:56.835 29022 31329 I libqaul::connections:..: BLE Module successfully started
03-25 02:56:56.841 30700 30716 E Parcel  : Attempt to read from protected data in Parcel 0x6fd0427a68
03-25 02:56:56.843 29022 31351 E AndroidRuntime: FATAL EXCEPTION: pool-5-thread-1
03-25 02:56:56.843 29022 31351 E AndroidRuntime: Process: net.qaul.qaul_app, PID: 29022
03-25 02:56:56.843 29022 31351 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'android.os.IBinder android.os.IInterface.asBinder()' on a null object reference
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.os.Parcel.createException(Parcel.java:2077)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:2039)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1987)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.bluetooth.IBluetoothGatt$Stub$Proxy.startAdvertisingSet(IBluetoothGatt.java:1526)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertisingSet(BluetoothLeAdvertiser.java:434)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertisingSet(BluetoothLeAdvertiser.java:306)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:158)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:93)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at net.qaul.ble.service.BleService.startAdvertise$lambda-1(BleService.kt:47)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at net.qaul.ble.service.BleService.e(Unknown Source:0)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at c7.b.run(Unknown Source:4)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-25 02:56:56.843 29022 31351 E AndroidRuntime:        at java.lang.Thread.run(Thread.java:919)

link2xt avatar Mar 25 '24 01:03 link2xt

I have built the app myself and got the same crash. Made workaround #616.

link2xt avatar Mar 25 '24 04:03 link2xt

Some other interesting output from the log:

03-25 02:54:06.740  1549  1823 D BluetoothManagerService: MESSAGE_REGISTER_ADAPTER
03-25 02:54:06.753  1010 30589 I libqaul::connections:..: ========================= 
03-25 02:54:06.753  1010 30589 I libqaul::connections:..: BLE info received
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: -------------------------
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: This Devices ID
...
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: -------------------------
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: BLE Supported: true
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: ID:  
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: Name: f3flA
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: Bluetooth Enabled: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: Advertisement Extended: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: 2M supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: LE coded supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: LE audio supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: LE periodic advertisement supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: LE multiple advertisement supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: offload filter supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: offload scan batching supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: =========================
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: BLE send start request 

Could be this is the reason startAdvertising does not work?

03-25 02:54:06.754  1010 30589 I libqaul::connections:..: LE periodic advertisement supported: false
03-25 02:54:06.754  1010 30589 I libqaul::connections:..: LE multiple advertisement supported: false

EDIT: seems we are not using PeriodicAdvertisingParameters, so should not be the issue.

Maybe we should not try to setup bluetooth LE advertising if it is not supported?

link2xt avatar Mar 25 '24 04:03 link2xt

Documentation for reference: https://source.android.com/docs/core/connect/bluetooth/ble_advertising Maybe use startAdvertisingSet directly as example shows, instead of calling startAdvertising which then fails?

Another example uses startAdvertising: https://github.com/android/connectivity-samples/blob/777517eb2898cd48e139446246808a2106d343cc/BluetoothAdvertisementsKotlin/app/src/main/java/com/example/bluetoothadvertisements/service/AdvertiserService.kt They handle it as error if multiple advertisement is not supported: https://github.com/android/connectivity-samples/blob/777517eb2898cd48e139446246808a2106d343cc/BluetoothAdvertisementsKotlin/app/src/main/java/com/example/bluetoothadvertisements/MainActivity.kt#L59-L60

link2xt avatar Mar 25 '24 05:03 link2xt

I also found someone reporting similar stacktrace on different phones: https://gitlab.com/LineageOS/issues/android/-/issues/2205 There an app calls startAdvertisingSet directly, so using it without startAdvertising likely does not help.

link2xt avatar Mar 25 '24 05:03 link2xt

qaul uses normal BLE advertising, which BLE standard and every device must support it. IMHO the failure of being able to advertise on BLE is a vendor/manufacturer bug, which cannot be fixed on application level, only mitigated as you did in #616 (thanks for that!).

MathJud avatar Mar 25 '24 07:03 MathJud

It should probably be more visible in the UI that BLE initialization failed, but closing this once there is a version that does not crash is also fine.

link2xt avatar Mar 25 '24 07:03 link2xt

fixed by #616

Still a TODO is a user information about the state and the possibilities of the BLE interface.

MathJud avatar Mar 25 '24 09:03 MathJud

By the way Briar works over bluetooth on the same phone. I have tested with Wi-Fi disabled, no internet connectivity possible, and in Briar itself I also disabled everything but bluetooth. So maybe reopen this issue and try to copy what Briar does?

Briar requires scanning the QR code so maybe it does not do "advertising". But better look into the code.

link2xt avatar Apr 15 '24 17:04 link2xt