Answering my own question in case it helps anyway: I created a class that wraps a native adm instance (RTCAudioDevice), and exposes methods for the initialization of the native adm as well as invoking functions on it. I then had to modify RTCPeerConnectionFactory to take in a reference to an instance of RTCAudioDevice. In this way, the client is now able to call ADM functions on the underlying native adm. Note that the native ADM needs to be created with the same task queue factory, and ON the same worker thread, that the RTCPeerConnectionFactory is associated with.