アプリのビルドを作成しようとするたびにこのエラーが発生する理由がわかりません。多くの解決策を試してみましたが、これを解決できませんでした。プラグインが問題を引き起こしているかどうか、または私の問題があるかどうかわかりませんコードまたはfirebaseまたはfirebase接続。ノードモジュールを削除してnpm installを実行し、削除して再度追加しましたAndroidプラットフォームですが、それでもこのエラーが発生します。
import com.google.firebase.iid.FirebaseInstanceIdService;
^
symbol: class FirebaseInstanceIdService
location: package com.google.firebase.iid
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePluginInstanceIDService.Java:9: error: cannot find symbol
public class FirebasePluginInstanceIDService extends FirebaseInstanceIdService {
^
symbol: class FirebaseInstanceIdService
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePlugin.Java:508: error: method getByteArray in class FirebaseRemoteConfig cannot be applied to given types;
: FirebaseRemoteConfig.getInstance().getByteArray(key, namespace);
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePlugin.Java:525: error: method getValue in class
FirebaseRemoteConfig cannot be applied to given types;
: FirebaseRemoteConfig.getInstance().getValue(key, namespace);
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePlugin.Java:579: error: no suitable method found
for setDefaults(Map<String,Object>,String)
FirebaseRemoteConfig.getInstance().setDefaults(defaultsToMap(defaults), namespace);
^
method FirebaseRemoteConfig.setDefaults(Map<String,Object>) is not applicable
(actual and formal argument lists differ in length)
method FirebaseRemoteConfig.setDefaults(int) is not applicable
(actual and formal argument lists differ in length)
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePluginInstanceIDService.Java:18: error: method does not override or implement a method from a supertype
@Override
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\io\card\cordova\sdk\CardIOCordovaPlugin.Java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
6 errors
:app:compileDebugJavaWithJavac FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
27 actionable tasks: 1 executed, 26 up-to-date
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
* Get more help at https://help.gradle.org
BUILD FAILED in 54s
cmd: Command failed with exit code 1 Error output:
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePluginInstanceIDService.Java:6: error: cannot find symbol
import com.google.firebase.iid.FirebaseInstanceIdService;
^
symbol: class FirebaseInstanceIdService
location: package com.google.firebase.iid
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePluginInstanceIDService.Java:9: error: cannot find symbol
public class FirebasePluginInstanceIDService extends FirebaseInstanceIdService {
^
symbol: class FirebaseInstanceIdService
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePlugin.Java:508: error: method getByteArray in class FirebaseRemoteConfig cannot be applied to given types;
: FirebaseRemoteConfig.getInstance().getByteArray(key, namespace);
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePlugin.Java:525: error: method getValue in class
FirebaseRemoteConfig cannot be applied to given types;
: FirebaseRemoteConfig.getInstance().getValue(key, namespace);
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePlugin.Java:579: error: no suitable method found
for setDefaults(Map<String,Object>,String)
FirebaseRemoteConfig.getInstance().setDefaults(defaultsToMap(defaults), namespace);
^
method FirebaseRemoteConfig.setDefaults(Map<String,Object>) is not applicable
(actual and formal argument lists differ in length)
method FirebaseRemoteConfig.setDefaults(int) is not applicable
(actual and formal argument lists differ in length)
C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\org\Apache\cordova\firebase\FirebasePluginInstanceIDService.Java:18: error: method does not override or implement a method from a supertype
@Override
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: C:\Users\user\Downloads\mosque\platforms\Android\app\src\main\Java\io\card\cordova\sdk\CardIOCordovaPlugin.Java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
6 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
* Get more help at https://help.gradle.org
BUILD FAILED in 54s
[ERROR] An error occurred while running subprocess cordova.
cordova build Android exited with exit code 1.
はい、減価償却されています。修正は非常に簡単で、コードを移動するだけです...
FirebaseInstanceIdService
サブクラスのonTokenRefresh()
から
FirebaseMessagingService
サブクラスのonNewToken()
に
減価償却に関する情報: https://firebase.google.com/support/release-notes/Android#update_-_april_02_2019
古いバージョンのfirebaseを使用して、この小さなコードを変更することをお勧めします。おそらく、AndroidX [ https://developer.Android.com/jetpack/androidx/migrate] に移行している間に移行することをお勧めします。
これは、4月5日にFirebaseが更新されたためです。ここで https://firebase.google.com/support/release-notes/Android#update_-_april_02_2019 96、最後に機能していたバージョンを見つけて調整しました俺の project.properties
それに応じて次のようにします。
cordova.system.library.4=com.google.firebase:firebase-core:16.0.8
cordova.system.library.5=com.google.firebase:firebase-messaging:17.5.0
cordova.system.library.6=com.google.firebase:firebase-config:16.4.1
cordova.system.library.7=com.google.firebase:firebase-perf:16.2.4
ここでは、すべての依存関係が+ではなく特定のバージョン(Update-April 02、2019)にロックされています。これにより、最新バージョンが取得され、ビルドが壊れます。処理する。
これで正常にビルドできます!それが役に立てば幸い!
project.properties
はplatforms/Android/project.propertiesにあります
サーバーテストの後、私の解決策は、cordova-plugin-firebasexをcordova-plugin-firebasexに変更することでした。 https://github.com/dpa99c/cordova-plugin-firebase#migrating-from-cordova-plugin-firebase
rm -Rf platforms/Android
cordova plugin rm cordova-plugin-firebase
rm -Rf plugins/ node_modules/
npm install
cordova plugin add cordova-plugin-firebasex
cordova platform add Android
これがお役に立てば幸いです。
https://github.com/dpa99c/cordova-plugin-firebase#androidx
このプラグインは、Androidサポートライブラリの後継であるAndroidX(Jetpack)を使用するように移行されました。これは、CordovaプロジェクトのAndroidプラットフォームでAndroidXを有効にするcordova-plugin-androidxへの依存関係を追加することで実装されます。
これは、2019年6月17日のFirebaseおよびPlay ServicesライブラリのメジャーリリースがAndroidXに移行されたためです。
したがって、レガシーAndroidサポートライブラリに依存するプラグインがプロジェクトに含まれている場合は、cordova-plugin-androidx-adapterをプロジェクトに追加する必要があります。このプラグインは、プラグインコードをAndroidサポートライブラリから同等のAndroidXに動的に移行します。
この問題はAndroidXをサポートする主要なFirebaseリリースが原因で発生します
ソリューション:
削除Androidプラットフォーム(私はこのステップに従いましたが、私が知らない可能性がある回避策があるはずです)-cordova platform rm Android
古いFirebaseプラグインを削除-cordova plugin rm cordova-plugin-firebase
新しいFirebaseプラグインを追加-cordova plugin add cordova-plugin-firebasex
もう一度プラットフォームを追加-cordova platform add Android
これでビルドは成功します。
OK。これはgradleエラーです。これは4月のFirebaseの更新によるもので、FirebaseInstanceIdService
はサポートが終了しており、多くの人々がこの問題に直面しています。
FirebaseInstanceIdServiceのリファレンスドキュメントを確認してください
このクラスは廃止されました。
FirebaseMessagingServiceのonNewTokenのオーバーライドを支持します。それが実装されたら、このサービスは安全に削除できます。
この問題がReact Nativeフレームワークで発生した場合.2つの解決策があります:
以下のファイルでFirebaseバージョンを変更します:Android\app\build.gradle
...
//implementation 'com.google.firebase:firebase-core'
//implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-messaging:17.6.0'
...
そしてAndroid\gradle.properties
ファイルの最後に追加
firebaseCoreVersion=16.0.8
firebaseMessagingVersion=17.6.0
変化する \node_modules\react-native-fcm\Android\src\main\Java\com\evollu\react\fcm\InstanceIdService.Java
ファイルを以下に記入してください。
package com.evollu.react.fcm;
import Android.content.Intent;
import Android.os.Bundle;
import Android.os.Handler;
import Android.os.Looper;
import Android.support.v4.content.LocalBroadcastManager;
import Android.util.Log;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.google.firebase.iid.FirebaseInstanceId;
//import com.google.firebase.iid.FirebaseInstanceIdService; //Commented FirebaseInstanceIdService
import com.google.firebase.messaging.FirebaseMessagingService; //ADD FirebaseMessagingService
public class InstanceIdService extends FirebaseMessagingService {
private static final String TAG = "InstanceIdService";
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. This call is initiated by the
* InstanceID provider.
*/
// [START refresh_token]
@Override
public void onNewToken(String token) { //Added onNewToken method
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// Broadcast refreshed token
Intent i = new Intent("com.evollu.react.fcm.FCMRefreshToken");
Bundle bundle = new Bundle();
bundle.putString("token", refreshedToken);
i.putExtras(bundle);
final Intent message = i;
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
// Construct and load our normal React JS code bundle
ReactInstanceManager mReactInstanceManager = ((ReactApplication) getApplication()).getReactNativeHost().getReactInstanceManager();
ReactContext context = mReactInstanceManager.getCurrentReactContext();
// If it's constructed, send a notification
if (context != null) {
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(message);
} else {
// Otherwise wait for construction, then send the notification
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext context) {
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(message);
}
});
if (!mReactInstanceManager.hasStartedCreatingInitialContext()) {
// Construct it in the background
mReactInstanceManager.createReactContextInBackground();
}
}
}
});
}
}