У меня есть проблема в среде выполнения android / java, возникающая в реактивном проекте.Я не думаю, что response-native имеет какое-либо отношение к проблеме, но может быть полезным для понимания кода или ошибок.Я получаю сообщение об ошибке ниже:
java.lang.RuntimeException: не удалось вызвать RNFIRMessaging.subscribeToTopic
, который выходит из реактивной среды.Метод try-catch в методе не улавливает ошибку, но код выполняется вплоть до момента, когда вызывается FirebaseMessaging.getInstance().subscribeToTopic(topic);
.
Это внутренняя ошибка, которая является реальной причиной:
... Причина: java.lang.NoSuchMethodError: Нет виртуального метода subscribeToTopic (Ljava / lang / String;) Lcom / google / android / gms / tasks / Task;в классе Lcom / google / firebase / messaging / FirebaseMessaging;или его суперклассы (объявление 'com.google.firebase.messaging.FirebaseMessaging' появляется в ...
Этот код соответствует RNFIRMessaging.subscribeToTopic
:
public class FIRMessagingModule extends ReactContextBaseJavaModule implements LifecycleEventListener, ActivityEventListener {
...
@Override
public String getName() {
return "RNFIRMessaging";
}
...
public void subscribeToTopic(String topic) {
try {
Log.w("MYFCM", "Trying to call subscribeToTopic");
FirebaseMessaging x = FirebaseMessaging.getInstance();
if (x == null)
Log.w("MYFCM", "hasinstance?: NO");
else {
Log.w("MYFCM", "hasinstance?: YES");
// use reflection to print the methods
Class c = x.getClass();
for (java.lang.reflect.Method method : c.getDeclaredMethods()) {
Log.w("MYFCM", "methods: " + method.getName());
}
}
FirebaseMessaging.getInstance().subscribeToTopic(topic);
} catch(Exception ex) {
Log.e("MYFCM", ex.getMessage());
}
}
...
}
Это приводит к следующему выводу журнала из adb logcat
. Обратите внимание, как, по-видимому, рефлексия считает, что существует метод subscribeToTopic
.
05-29 12:21:46.760 8188 8261 W MYFCM : Trying to call subscribeToTopic
05-29 12:21:46.760 8188 8261 W MYFCM : Trying hasinstance?: YES
05-29 12:21:46.760 8188 8261 W MYFCM : methods: getInstance
05-29 12:21:46.760 8188 8261 W MYFCM : methods: isAutoInitEnabled
05-29 12:21:46.760 8188 8261 W MYFCM : methods: send
05-29 12:21:46.760 8188 8261 W MYFCM : methods: setAutoInitEnabled
05-29 12:21:46.760 8188 8261 W MYFCM : methods: subscribeToTopic
05-29 12:21:46.760 8188 8261 W MYFCM : methods: unsubscribeFromTopic
05-29 12:21:46.761 8188 8261 E unknown:ReactNative: Exception in native call
05-29 12:21:46.761 8188 8261 E unknown:ReactNative: java.lang.RuntimeException: Could not invoke RNFIRMessaging.subscribeToTopic
Я подозреваю, что мои файлы gradle могут находиться в области видимости этой проблемы:
/ android / build.gradle:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.1'
}
...
}
ext {
targetSdkVersion = 25
compileSdkVersion = 25
buildToolsVersion = "27.0.3"
googlePlayServicesVersion = "15.0.2"
firebaseVersion = "15.0.2"
supportLibVersion = "25.4.0"
reactNativeVersion = "0.53.3"
}
/ android / app / build.gradle:
dependencies {
...
implementation("com.google.firebase:firebase-core:$firebaseVersion") { force = true }
implementation("com.google.firebase:firebase-messaging:$firebaseVersion") { force = true }
implementation("com.android.support:exifinterface:$supportLibVersion") { force = true }
implementation("com.google.android.gms:play-services-vision:$googlePlayServicesVersion") { force = true }
implementation ("com.google.android.gms:play-services-gcm:$googlePlayServicesVersion") { force = true }
...
}
...
apply plugin: "com.google.gms.google-services"
Если это имеет значение, я использую response-native-fcm . Приведенный выше фрагмент кода представляет собой измененный код из этого хранилища.
Предыдущее исследование:
- Не думаю, этот вопрос применимо, поскольку
force = true
должно предотвращать плавание вокруг множества копий базы огня. - Мне не нравится Этот вопрос применим, так как это бесконечно повторяется (даже если я сдуваювсе и заново клонируем проект)
- В некоторых похожих вопросах упоминается proguard.Ард отключен (
minifyEnabled false
)
Как я могу решить эту проблему?