jitsi / jitsi-meet-sdk-samples

Jitsi Meet mobile SDK examples (Android, iOS and React Native)
Apache License 2.0
281 stars 239 forks source link

Android 15 compatibility #256

Open akramraza2 opened 1 week ago

akramraza2 commented 1 week ago

When trying to join a meeting using the sdk in my android app which runs android 15 getting the following error and the app crashes.

java.lang.NoSuchMethodException: com.facebook.react.ReactInstanceManager.handleCxxError [class java.lang.Exception] at java.lang.Class.getMethod(Class.java:2950) at java.lang.Class.getMethod(Class.java:2450) at com.facebook.react.ReactInstanceManager.registerCxxErrorHandlerFunc(ReactInstanceManager.java:376) at com.facebook.react.ReactInstanceManager.<init>(ReactInstanceManager.java:295) at com.facebook.react.ReactInstanceManagerBuilder.build(ReactInstanceManagerBuilder.java:340) at org.jitsi.meet.sdk.ReactInstanceManagerHolder.initReactInstanceManager(ReactInstanceManagerHolder.java:247) at org.jitsi.meet.sdk.JitsiMeetView.initialize(JitsiMeetView.java:201) at org.jitsi.meet.sdk.JitsiMeetView.<init>(JitsiMeetView.java:102) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:742) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:894) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1011) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972) at android.view.LayoutInflater.inflate(LayoutInflater.java:570) at android.view.LayoutInflater.inflate(LayoutInflater.java:462) at android.view.LayoutInflater.inflate(LayoutInflater.java:413) at com.akram.digischool.ui.home.liveclasses.LiveClassActivity.meetingView(LiveClassActivity.kt:927) at com.akram.digischool.ui.home.liveclasses.LiveClassActivity.createRtcEngine$lambda$6(LiveClassActivity.kt:909) at com.akram.digischool.ui.home.liveclasses.LiveClassActivity.$r8$lambda$I6rBu7yvWxpKeV1r_EL7juDzSwo(LiveClassActivity.kt:0) at com.akram.digischool.ui.home.liveclasses.LiveClassActivity$$ExternalSyntheticLambda4.onComplete(R8$$SyntheticClass:0) at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.1.0:1) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8705) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)

even though I have set the proguard rules. So I tried to test Jitsi Meet official app on the same device. And Jitsi Meet app doesn't even open on it. It crashes at the very beginning while loading MainActivity. Here's the log:-

org.jitsi.meet Initializing Firebase Crashlytics 18.4.3 for org.jitsi.meet org.jitsi.meet Registering Sessions SDK subscriber with name: CRASHLYTICS, data collection enabled: true org.jitsi.meet Data Collection is enabled for at least one Subscriber org.jitsi.meet Sessions SDK disabled. Events will not be sent. org.jitsi.meet FirebaseApp initialization successful org.jitsi.meet create org.jitsi.meet Init System Loader delegate org.jitsi.meet No version control information found org.jitsi.meet Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000010/DynamiteLoader.uncompressed.dm': No such file or directory org.jitsi.meet Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000010/DynamiteLoader.uncompressed.dm': No such file or directory org.jitsi.meet Verification of m.bx com.google.android.gms.dynamiteloader.DynamiteLoaderV2.loadModule2NoCrashUtils(m.bx, java.lang.String, int, m.bx) took 114.433ms (10967.05 bytecodes/s) (43152B approximate peak alloc) org.jitsi.meet Considering local module com.google.android.gms.measurement.dynamite:92 and remote module com.google.android.gms.measurement.dynamite:130 org.jitsi.meet Selected remote version of com.google.android.gms.measurement.dynamite, version >= 130 org.jitsi.meet Checking for metadata for AppLocalesMetadataHolderService : Service not found org.jitsi.meet Dynamite loader version >= 2, using loadModule2NoCrashUtils org.jitsi.meet Unknown dataspace 0 org.jitsi.meet onActivityCreated org.jitsi.meet EglBase14Impl: Using OpenGL ES version 2 org.jitsi.meet initializing RN with Activity org.jitsi.meet LIBRE_BUILD=false org.jitsi.meet Initializing Google Services org.jitsi.meet onActivityStarted org.jitsi.meet onActivityResumed system_server Window{3177c51 u0 org.jitsi.meet/org.jitsi.meet.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@7b9cf66, mPriority=0, mIsAnimationCallback=false} crash_dump64 Cmdline: org.jitsi.meet crash_dump64 pid: 8073, tid: 8105, name: create_react_co >>> org.jitsi.meet <<< crash_dump64 #14 pc 000000000028c4cb /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.odex (a7.c.a+107) crash_dump64 #15 pc 000000000015b5ec /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.odex (a7.a.e+124) crash_dump64 #16 pc 00000000001d89d2 /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.odex (com.facebook.react.bridge.ReactBridge.staticInit+770) crash_dump64 #18 pc 00000000002a4b74 /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.vdex (com.facebook.react.bridge.NativeMap.<clinit>+0) crash_dump64 #27 pc 00000000002c1dba /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.odex (c6.a.create+58) crash_dump64 #28 pc 00000000001c946c /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.odex (com.facebook.react.a0.L+1404) crash_dump64 #29 pc 000000000021d950 /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/oat/x86_64/base.odex (com.facebook.react.x.run+80) system_server Process org.jitsi.meet (pid 8073) has died: fg TOP system_server WIN DEATH: Window{570c4a8 u0 org.jitsi.meet/org.jitsi.meet.MainActivity} system_server WIN DEATH: Window{3177c51 u0 org.jitsi.meet/org.jitsi.meet.MainActivity} com.android.systemui Transition requested (#61): android.os.BinderProxy@8ba963e TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=35 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.jitsi.meet/.MainActivity } baseActivity=ComponentInfo{org.jitsi.meet/org.jitsi.meet.MainActivity} topActivity=ComponentInfo{org.jitsi.meet/org.jitsi.meet.MainActivity} origActivity=null realActivity=ComponentInfo{org.jitsi.meet/org.jitsi.meet.MainActivity} numActivities=1 lastActiveTime=4880400 supportsMultiWindow=true resizeMode=2 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.window.IWindowContainerToken$Stub$Proxy@32d0c9f} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 151 - 0, 0) topActivityInfo=ActivityInfo{60101ec org.jitsi.meet.MainActivity} launchCookies=[android.os.BinderProxy@cb84224] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= falseisLetterboxEducationEnabled= true isLetterboxDoubleTapEnabled= false topActivityEligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=1344 topActivityLetterboxHeight=2992 isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false cameraCompatTaskInfo=CameraCompatTaskInfo { cameraCompatControlState=hidden freeformCameraCompatMode=inactive}}}, pipTask = null, remoteTransition = null, displayChange = null, flags = 0, debugId = 61 } system_server Showing crash dialog for package org.jitsi.meet u0 system_server Sent Transition (#61) createdAt=10-30 10:47:27.496 via request=TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=35 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.jitsi.meet/.MainActivity } baseActivity=ComponentInfo{org.jitsi.meet/org.jitsi.meet.MainActivity} topActivity=ComponentInfo{org.jitsi.meet/org.jitsi.meet.MainActivity} origActivity=null realActivity=ComponentInfo{org.jitsi.meet/org.jitsi.meet.MainActivity} numActivities=1 lastActiveTime=4880400 supportsMultiWindow=true resizeMode=2 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{234508a Task{1540ca6 #35 type=standard I=org.jitsi.meet/.MainActivity}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 151 - 0, 0) topActivityInfo=ActivityInfo{58c86fb org.jitsi.meet.MainActivity} launchCookies=[android.os.BinderProxy@f182318] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= falseisLetterboxEducationEnabled= true isLetterboxDoubleTapEnabled= false topActivityEligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=1344 topActivityLetterboxHeight=2992 isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false cameraCompatTaskInfo=CameraCompatTaskInfo { cameraCompatControlState=hidden freeformCameraCompatMode=inactive}}}, pipTask = null, remoteTransition = null, displayChange = null, flags = 0, debugId = 61 } system_server info={id=61 t=CLOSE f=0x0 trk=0 r=[0@Point(0, 0)] c=[ {WCT{RemoteToken{8063259 Task{b2d8af7 #1 type=home}}} m=TO_FRONT f=SHOW_WALLPAPER|MOVE_TO_TOP leash=Surface(name=Task=1)/@0x1deaaa7 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0 taskParent=-1}, {WCT{RemoteToken{234508a Task{1540ca6 #35 type=standard I=org.jitsi.meet/.MainActivity}}} m=CLOSE f=NONE leash=Surface(name=Task=35)/@0xfa2302c sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0 taskParent=-1}, {null m=TO_FRONT f=IS_WALLPAPER leash=Surface(name=WallpaperWindowToken{4516bc0 token=android.os.Binder@c406943})/@0x47f7395 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0} ]} system_server Window{f244d32 u0 Splash Screen org.jitsi.meet EXITING}: Setting back callback null system_server Window{85861ac u0 Application Error: org.jitsi.meet}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper@33046b, mPriority=0, mIsAnimationCallback=false} com...le.android.apps.nexuslauncher ApkAssets: Deleting an ApkAssets object '<empty> and /data/app/~~_etjHOZAYmAMtalYMwSfmA==/org.jitsi.meet-t-zpQAF3IDHU7ZE0PAXULw==/base.apk' with 1 weak references

saghul commented 1 week ago

What SDK version are you using? Do you have ProGruard enabled? If so, did you use the rules outlined in the docs?

akramraza2 commented 1 week ago

I am using the latest version 10.2.1 and yes I am using proguard and also yes the rules are according to the docs. And it all works fine upto android 14. This issue happens only with android 15. Moreover I also tested official Jitsi Meet app and it fails to even start. I have already commented all this when I created the issue. I guess it was unreasonable because of so many logs, so I have edited my previous comment. Now details can be seen in italics and the logs are in code blocks.

saghul commented 1 week ago

Moreover I also tested official Jitsi Meet app and it fails to even start.

😱 Did you try the store version or your own build?

akramraza2 commented 1 week ago

😱 Did you try the store version or your own build?

Store Version

magdyebrahim commented 1 week ago

I have same error , try it on android 11 , 12 and same thing It work on ios but android crash

it was working with no issue but when i try it yesterday it crash

this is my android/build.gadle

buildscript { ext.kotlin_version = '1.9.22' repositories { google() mavenCentral() }

dependencies {
    classpath 'com.android.tools.build:gradle:7.3.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath 'com.google.gms:google-services:4.3.14'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
}

}

allprojects { repositories { google() mavenCentral() } }

rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') }

tasks.register("clean", Delete) { delete rootProject.buildDir }


Setting.gradle

pluginManagement { def flutterSdkPath = { def properties = new Properties() file("local.properties").withInputStream { properties.load(it) } def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath } settings.ext.flutterSdkPath = flutterSdkPath()

includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")

repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
}

}

plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "7.3.0" apply false // START: FlutterFire Configuration id "com.google.gms.google-services" version "4.3.15" apply false id "com.google.firebase.crashlytics" version "2.8.1" apply false // END: FlutterFire Configuration id "org.jetbrains.kotlin.android" version "2.0.0" apply false }

include ":app"


gradle.properties

org.gradle.jvmargs=-Xmx4G android.useAndroidX=true android.enableJetifier=true android.enableDexingArtifactTransform.desugaring=false


saghul commented 1 week ago

What store version did you try? I'm on Android 15 with version 24.5.0 build 18087880 and see no crash.

akramraza2 commented 1 week ago

What store version did you try? I'm on Android 15 with version 24.5.0 build 18087880 and see no crash.

The version is 24.5.0 build 18078780 , the one which is in beta release. Well I couldn't get the build from that device because it doesn't open on it. So I got the build by installing it on android 11 device. Also here's a video.

https://github.com/user-attachments/assets/5515b420-66a4-4ab2-810d-90bae76adffc

saghul commented 1 week ago

Please try a real device. We've had problems with emulators in the past that were not reproducible with a real device.

akramraza2 commented 1 week ago

Please try a real device. We've had problems with emulators in the past that were not reproducible with a real device.

In that case will have to wait for the device to arrive. Anyways I guess I found the isuue. If you check the behaviour changes for Android 15 , you will find Support for 16 KB page sizes. Which clearly says all apps that use any NDK libraries, either directly or indirectly through an SDK, then you will need to rebuild your app for it to work on these 16 KB devices. Also it states 16 KB devices require the shared libraries' ELF segments to be aligned properly using 16 KB ELF alignment in order for your app to run.

And clearly everything was fine upto android 14 and suddenly both official jitsi meet app and my app started to crash pointing to issues with same native library. So I guess will have to update my app according to their documentation. And I will update here once I get my device and test on it.

saghul commented 6 days ago

There are currently no hardware devices with 16KB kernel pages. Some Pixel devices will be able to boot in such a mode for testing.

Our SDK and app won't be compatible with 16KB pages until React Native is. They have open issues about it.

akramraza2 commented 6 days ago

There are currently no hardware devices with 16KB kernel pages. Some Pixel devices will be able to boot in such a mode for testing.

Our SDK and app won't be compatible with 16KB pages until React Native is. They have open issues about it.

That's exactly the issue. I tested now, if you check available Sdk's on android studio , you can get one for 16KB page size. So I tested on 2 separated and it works fine on the one which doesn't and crashes on the one with 16KB pages.

saghul commented 6 days ago

Great to know! Last I checked there was no way to create an emulator like that, glad it's now easy to do!

akramraza2 commented 6 days ago

Great to know! Last I checked there was no way to create an emulator like that, glad it's now easy to do!

Can you post update here whenever this issue gets fixed ?

akramraza2 commented 6 days ago

Great to know! Last I checked there was no way to create an emulator like that, glad it's now easy to do!

Can you post update here whenever this issue gets fixed ?

saghul commented 6 days ago

Sure thing.

saghul commented 2 days ago

Update: RN will support 16 KB pages in version 0.77: https://github.com/facebook/react-native/issues/45054

JSC won't be supported, so we will be migrating to Hermes.

akramraza2 commented 1 day ago

Update: RN will support 16 KB pages in version 0.77: facebook/react-native#45054

JSC won't be supported, so we will be migrating to Hermes.

Ok, will keep track of it.