Meeting SDK still crashes on Android 12 or 13 - when compiling with API level 33 (Need android.permission.BLUETOOTH_CONNECT)

Meeting SDK Android and Version
Android 5.12.2.9109

Description
After upgrading our app to Android 13 API 33, the Zoom SDK started crashing for our users that are on Android 12 and up.

Downgrading our app to Android 11 is not an option right now, because of other concerns and also because Google now requires app updates to target the latest API level or close.

Error?
Fatal Exception: java.lang.SecurityException

Need android.permission.BLUETOOTH_CONNECT permission for AttributionSource { uid = 10422, packageName = com.ginger, attributionTag = null, token = android.os.BinderProxy@b6a1f56, next = null }: HeadsetService

android.os.Parcel.createExceptionOrNull (Parcel.java:2438)

android.os.Parcel.createException (Parcel.java:2422)

android.os.Parcel.readException (Parcel.java:2405)

android.os.Parcel.readException (Parcel.java:2347)

android.bluetooth.IBluetoothHeadset$Stub$Proxy.getConnectedDevicesWithAttribution (IBluetoothHeadset.java:1518)

android.bluetooth.BluetoothHeadset.getConnectedDevices (BluetoothHeadset.java:682)

us.zoom.androidlib.util.HeadsetUtil$1.onServiceConnected (HeadsetUtil.java:7)

android.bluetooth.BluetoothHeadset$3.handleMessage (BluetoothHeadset.java:1640)

android.os.Handler.dispatchMessage (Handler.java:106)

android.os.Looper.loopOnce (Looper.java:226)

android.os.Looper.loop (Looper.java:313)

android.app.ActivityThread.main (ActivityThread.java:8751)

java.lang.reflect.Method.invoke (Method.java)

com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571)

com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135)

Troubleshooting Routes
I have tried upgrading the Meeting SDK to the latest.

How To Reproduce

  1. Set targetSdkVersion 33
  2. Set compileSdkVersion 33
  3. Try to join a meeting on app

Please help! Thanks in Advance

1 Like

Is there any update on this? If we need to update an app, we cannot due to the minimum Android API levels and this bug…

@olalekan and @howard1 ,

Sorry for the delayed response on this topic – I am happy to look into this matter and get you the answers you need. Before diving in, can you share the following details :

  1. Are you still seeing this issue when the version is targetSdkVersion and compileSdkVersion is set to 30?

  2. Are you using Zoom UI or custom UI?

  3. Could you provide the .crash file of the SDK app? The Android SDK logs can be found here: sdcard/Android/data/${PACKAGE_NAME})

Android Log feature:

Facing the same issue in our app.

Hi-
Thanks for reaching out.
We do not see the issue when we set the targetSdkVersion to 30, but we must set the targetSdkVersion higher than 30 to publish an app update due to google’s policy. After researching the issue, I found that I can clear the permissions issues by requesting the appropriate permissions and prompting the user if they are insufficient. This leads to another issue, though:

No implementation found for long com.zipow.videobox.sip.server.ISIPCallControlSinkUI.nativeInit() (tried Java_com_zipow_videobox_sip_server_ISIPCallControlSinkUI_nativeInit and Java_com_zipow_videobox_sip_server_ISIPCallControlSinkUI_nativeInit__)
No implementation found for long com.zipow.videobox.sip.server.IPBXVideomailEventSinkUI.nativeInit() (tried Java_com_zipow_videobox_sip_server_IPBXVideomailEventSinkUI_nativeInit and Java_com_zipow_videobox_sip_server_IPBXVideomailEventSinkUI_nativeInit__)
I/CameraManagerGlobal(28350): Connecting to camera service
W/AudioTrack(28350): Use of stream types is deprecated for operations other than volume control
W/AudioTrack(28350): See the documentation of AudioTrack() for what to use instead with android.media.AudioAttributes to qualify your playback use case
D/CompatibilityChangeReporter(28350): Compat change id reported: 160794467; UID 10954; state: ENABLED
D/AndroidRuntime(28350): Shutting down VM
E/AndroidRuntime(28350): FATAL EXCEPTION: main
E/AndroidRuntime(28350): Process: , PID: 28350
E/AndroidRuntime(28350): java.lang.RuntimeException: Unable to create service com.zipow.videobox.share.ScreenShareServiceForSDK: java.lang.IllegalArgumentException:  
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
E/AndroidRuntime(28350): Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
1 Like
  1. Yes seeing the issue there as well, though a slightly different variation of same issue.
  2. Zoom UI (Default)
  3. I can provide this separately later.

Another approach I have tried is to use version 5.9.6, but then I get the error:
error: incompatible types: MeetingServiceListener is not a functional interface
and I am not sure how to proceed.
This now comes at compile time when setting the targetSdkVersion to 31.

Thank you clarification and details here. I am sorry to hear about your experience and happy to sync with engineers for best practices to resolve this matter. In the meantime, please see my responses and following up questions below :

In checking Meet Google Play’s target API level requirement, it looks like new apps must target Android 12 (API level 31) or higher and I see the current Zoom Andriod SDK targets 30.

Meet Google Play’s target API level requirement

Does this error persist with the latest version of the SDK or only just with version 5.9.6? If so, can you share the device logs and crash logs?

@olalekan,

Can you share more details on what you tried and a snippet of the error you are seeing ?

Thanks for the help so far @donte.zoom.

For anyone that lands on this thread with a similar issue, what eventually worked for me was updating to the latest version - v5.12.8.9901 (as as time of writing this) and adding these extra proguard rules (android//proguard-rules.pro):

-keep class us.zoom.{*;}
-keep class com.zipow.
{;}
-keep class us.zipow.**{
;}
-keep class org.webrtc.{*;}
-keep class us.google.protobuf.
{;}
-keep class com.google.crypto.tink.**{
;}
-keep class androidx.security.crypto.**{*;}

With the above rules set, I’m still able to keep my compileSdkVersion and targetSdkVersion on API 33. Joining a meeting now works as expected, tested on Android 13, 12, 9 and 8.1. :slight_smile:

2 Likes

@howard1, to fix that when using the latest SDKs, you only need to add the required 2 callback methods when adding a listener to your meeting service like so:

meetingService.addListener(new MeetingServiceListener() {
    @Override
    public void onMeetingStatusChanged(MeetingStatus meetingStatus, int i, int i1) {
        // your code here
    }

    @Override
    public void onMeetingParameterNotification(MeetingParameter meetingParameter) {
        // your code here
    }
});
2 Likes