Known Issues - Flutter
This page lists known issues in Flutter SDK 5.x and how to work around them.
Issue : 1
The SDK does not run on x86 and x86_64 Android emulators.
Solution
The SDK ships its native libraries for arm64-v8a and armeabi-v7a. Test on an ARM device, or on an emulator with an arm64-v8a system image.
To keep your app off devices where the SDK cannot load, build it for arm64-v8a and armeabi-v7a only. Add an ABI filter to defaultConfig:
android {
defaultConfig {
ndk {
abiFilters += listOf("arm64-v8a", "armeabi-v7a")
}
}
}
In a Groovy android/app/build.gradle, write ndk { abiFilters 'arm64-v8a', 'armeabi-v7a' } instead. Then add this line to android/gradle.properties. It needs Flutter 3.41 or later. Without it, Flutter adds its own ABIs to the filter and yours has no effect.
disable-abi-filtering=true
Issue : 2
Your app does not run in the iOS Simulator on an Intel Mac.
Solution
Run the app on an iPhone or iPad, or in the Simulator on a Mac with Apple silicon.
If your Podfile excludes arm64 for the Simulator (EXCLUDED_ARCHS[sdk=iphonesimulator*]), remove that exclusion. Otherwise the app does not build for the Simulator.
Issue : 3
The iOS build fails with errors about the videosdk plugin or the FlutterFramework package.
Solution
The SDK's iOS plugin ships as a Swift Package. It needs Flutter 3.41 or later, with Swift Package Manager turned on for your project. Turn it on by adding config: under the existing flutter: section of your app's pubspec.yaml:
flutter:
config:
enable-swift-package-manager: true
Or run flutter config --enable-swift-package-manager on every machine that builds your app, including CI. Then run flutter clean and build again.
Issue : 4
On Android, the camera and microphone stay off after you join, and Events.error reports 3017 (camera) or 3018 (microphone).
Solution
The SDK does not ask the user for camera and microphone permission on Android. Ask with VideoSDK.requestPermissions() before you call join(), and before you call changeMode(Mode.SEND_AND_RECV).
Future<void> joinRoom(Room room) async {
await VideoSDK.requestPermissions();
await room.join();
}
Issue : 5
Your app also depends on videosdk_webrtc or videosdk_media_effects.
Solution
Remove both packages from your pubspec.yaml, together with their imports. The SDK no longer uses videosdk_webrtc, and on iOS it clashes with classes inside the SDK. videosdk_media_effects depends on videosdk_webrtc.
RTCVideoView, RTCVideoRenderer, RTCVideoViewObjectFit and MediaDeviceInfo now come from package:videosdk/videosdk.dart. For noise suppression, pass noiseConfig to VideoSDK.createMicrophoneAudioTrack(). For background blur, use VideoSDK.setVideoEffects(). The Migration Guide covers the other changes.
Issue : 6
The Android build fails with script compilation errors in the build.gradle.kts of permission_handler_android, such as Unresolved reference: compilerOptions or Unresolved reference 'compilerOptions'.
Solution
permission_handler 13 brings in permission_handler_android 14, which builds only with Android Gradle Plugin 9. Pin permission_handler to version 12, then run flutter clean and build again.
flutter pub add permission_handler:^12.0.1
Issue : 7
The SDK works in a debug build of your Android app, but not in a release build.
Solution
Flutter shrinks every Android release build with R8, which removes or renames the videosdk.org classes that the SDK loads by name. Add these rules to android/app/proguard-rules.pro, and create the file if your app does not have one:
-keep class videosdk.org.** { *; }
-dontwarn videosdk.org.**
Keep the -dontwarn line, because the keep rule alone fails the build with a missing-class error.
Issue : 8
On iOS, VideoSDK.requestPermissions() and VideoSDK.checkPermissions() report the camera or the microphone as not granted, even after the user allows access.
Solution
The iOS build turns camera and microphone permission on only when your app's Info.plist has the NSCameraUsageDescription and NSMicrophoneUsageDescription keys. Add both keys, as shown in Integrate Flutter SDK. If you added them after your first iOS build, delete Xcode's DerivedData folder once, so that the next build picks them up.
Got a Question? Ask us on discord

