私はFCM
統合に取り組んでいますが、Java.lang.ClassNotFoundException: Didn't find class "service.MyFirebaseMessagingService" on path: DexPathList[[Zip file "/data/app/com.rk.servicepractise-2/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
を取得しています
検索しましたが、まだ適切な解決策が得られませんでした。以下のコードを確認して、どこが間違っているのか教えてください。
classes
ファイルとmanifest
ファイルをgradle
で確認してください。この問題を解決するのを手伝ってください。
FirebaseInstanceIdServiceクラスを拡張するMyFirebaseInstanceIDService
である私の最初のクラス
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
//Getting registration token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
//Displaying token on logcat
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
private void sendRegistrationToServer(String token) {
//You can implement this method to store the token on your server
//Not required for current project
}
}
そして、次のようなFcm
クラスを拡張するFirebaseMessagingService
のもう1つのクラス:-
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//Displaying data in log
//It is optional
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
//Calling method to generate notification
sendNotification(remoteMessage.getNotification().getBody());
}
//This method is only generating Push notification
//It is same as we did in earlier posts
private void sendNotification(String messageBody) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Firebase Push Notification")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
}
以下は、このFcm
のマニフェストファイルエントリです。
<application>
.
.
.
.
<service
Android:name="com.rk.servicepractise.service.MyFirebaseMessagingService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
Android:name="com.rk.servicepractise.service.MyFirebaseInstanceIDService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
</application>
そして、私が次のように使用しているgradle
Module:app:-
apply plugin: 'com.Android.application'
Android {
.
.
.
.
.
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.Android.support:design:23.1.1'
compile 'com.google.firebase:firebase-messaging:9.8.0'
}
apply plugin: 'com.google.gms.google-services'
build.gradle敵のProject:ProjectName
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.5.0'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
そして、以下は私が得ているExceptionです:-
Java.lang.RuntimeException: Unable to instantiate service service.MyFirebaseInstanceIDService: Java.lang.ClassNotFoundException: Didn't find class "service.MyFirebaseInstanceIDService" on path: DexPathList[[Zip file "/data/app/com.rk.servicepractise-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
at Android.app.ActivityThread.handleCreateService(ActivityThread.Java:2779)
at Android.app.ActivityThread.access$1900(ActivityThread.Java:154)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1404)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5292)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:904)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:699)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "service.MyFirebaseInstanceIDService" on path: DexPathList[[Zip file "/data/app/com.rk.servicepractise-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
at Android.app.ActivityThread.handleCreateService(ActivityThread.Java:2776)
at Android.app.ActivityThread.access$1900(ActivityThread.Java:154)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1404)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5292)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:904)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:699)
Suppressed: Java.lang.ClassNotFoundException: service.MyFirebaseInstanceIDService
at Java.lang.Class.classForName(Native Method)
at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504)
[〜#〜]編集済み[〜#〜]同じ問題で立ち往生するたびにこのリンクをたどってください@Marcin Orlowski...リンク:- ここをクリック
Service
ファイルのMainfest
の前にドット(。)を追加するだけです。
言い換えれば、以下はトリックを行います:
<service Android:name=".service.MyFirebaseMessagingService">
その価値については、FirebaseMessagingServiceリスナークラスをルートパッケージフォルダーに移動することで、この問題を解決しました。 Android:name = "。fcm.FCMListenerService"を使用していましたが、デバイスが通知を受信するたびに、上記のようにクラッシュし続けました。それをルートパッケージフォルダに移動すると、動作を開始しました。つまり、Android:name = "。FCMListenerService"です。
更新:サービスをfcmフォルダーに戻しましたが、引き続き機能するため、これは答えではありません。しかし、それは物事を生き生きとさせるために何かをしたので、それは一見の価値があるかもしれません(私はこの問題と数時間戦っていました)。