Я подготовил предварительное понимание этой проблемы.
Во-первых, мы должны взглянуть на исходный код Google WebRT C:
public interface Observer {
@CalledByNative("Observer")
void onSignalingChange(PeerConnection.SignalingState var1);
@CalledByNative("Observer")
void onIceConnectionChange(PeerConnection.IceConnectionState var1);
@CalledByNative("Observer")
void onIceConnectionReceivingChange(boolean var1);
@CalledByNative("Observer")
void onIceGatheringChange(PeerConnection.IceGatheringState var1);
@CalledByNative("Observer")
void onIceCandidate(IceCandidate var1);
@CalledByNative("Observer")
void onIceCandidatesRemoved(IceCandidate[] var1);
@CalledByNative("Observer")
void onAddStream(MediaStream var1);
@CalledByNative("Observer")
void onRemoveStream(MediaStream var1);
@CalledByNative("Observer")
void onDataChannel(DataChannel var1);
@CalledByNative("Observer")
void onRenegotiationNeeded();
@CalledByNative("Observer")
void onAddTrack(RtpReceiver var1, MediaStream[] var2);
@CalledByNative("Observer")
default void onTrack(RtpTransceiver transceiver) {
}
}
Если вы заметили 'onTrack '- единственный метод в interface
, который имеет реализацию метода по умолчанию. У него есть "{}" после вместо ";". Эта функция, называемая «методами по умолчанию», была добавлена к Java интерфейсам в Java 8.
Теперь мы получаем ошибку: «AbstractMethodError», вероятно, из-за того, что код JNI не Android 8 знает и ожидает, что клиентский код реализует все методы интерфейса ...
Сначала я решил эту проблему и восстановил рабочие вызовы WebRT C в своем приложении, добавив реализацию метода:
private class Peer implements SdpObserver, PeerConnection.Observer {
...
@Override
public void onAddStream(MediaStream mediaStream) {}
@Override
public void onTrack(RtpTransceiver transceiver) {}
}
Тем не менее, я думаю, что реальное решение состоит в том, чтобы гарантировать, что весь код в проекте использует Java 1.8:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Если кто-то сможет пролить больше света на то, почему это происходит, я был бы признателен.