Fixed data tracks failing to load in apps minified with R8 - #1023
Merged
davidliu merged 1 commit intoSep 16, 2026
Merged
Conversation
The data track bindings call Rust through JNA. libjnidispatch resolves JNA's classes and fields by name, and JNA reads the bindings' Structure and Callback subclasses reflectively, but neither JNA nor livekit-uniffi-android ships keep rules, so R8 renamed or stripped them and the native library failed to load. Added the rules from JNA's FAQ to the consumer rules.
adrian-niculescu
requested review from
MaxHeimbrock,
davidliu and
xianshijing-lk
as code owners
September 16, 2026 10:46
🦋 Changeset detectedLatest commit: 0b09bea The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
davidliu
approved these changes
Sep 16, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In an app built with R8 minification, data tracks never become available:
publishDataTrackfails with "Data tracks are unavailable: the native library failed to load", and remote data tracks are never discovered. The log showsUnsatisfiedLinkError: Can't obtain peer field ID for class com.sun.jna.Pointeron the first join.The data track bindings in livekit-uniffi-android call Rust through JNA. libjnidispatch resolves JNA's classes and fields by name, and JNA reads the bindings'
StructureandCallbacksubclasses reflectively. Neither JNA's AAR nor livekit-uniffi-android ships keep rules (the latter'sconsumer-rules.prois empty), so R8 renames or strips them. This adds the rules from JNA's FAQ to the SDK's consumer rules. They could also live in livekit-uniffi-android'sconsumer-rules.pro.Tested with a minified release app that depends on the SDK and creates a
RemoteDataTrackManager, on an Android 17 emulator: without the rules it fails with the error above, with them the manager is created and calls into the native library go through.