我的代码实现了onComplete
interface 的方法com.google.android.gms.tasks.OnCompleteListener
。并被com.google.firebase.messaging.FirebaseMessaging.getInstance().getToken().addOnCompleteListener()
. 但是在 Proguard 之后,这个onComplete
方法已经被完全删除了,并且运行时java.lang.AbstractMethodError
崩溃了。我已经尝试了许多“-keep class”的组合,但没有运气!请帮忙,谢谢!
proguard之前的原始代码:
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.messaging.FirebaseMessaging;
public class MyClass {
static public void testToken() {
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
String token = task.isSuccessful() ? task.getResult() : null;
System.out.println("Token received:" + token);
}
});
}
}
在 proguard-project.txt 中:
-keep public class com.google.android.gms.tasks.* { *; }
-keep public class com.google.firebase.messaging.* { *; }
-dontwarn com.google.android.gms.tasks.**
-dontwarn com.google.firebase.messaging.**
在proguard之后:
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.firebase.messaging.FirebaseMessaging;
public class MyClass {
public static void testToken() {
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
});
}
}
它已被删除,而不是重命名。它得到了运行时异常!
16942 E AndroidRuntime: FATAL EXCEPTION: main
16942 E AndroidRuntime: Process: com.example.sample, PID: 16942
16942 E AndroidRuntime: java.lang.AbstractMethodError: abstract method "void com.google.android.gms.tasks.OnCompleteListener.onComplete(com.google.android.gms.tasks.Task)"
16942 E AndroidRuntime: at com.google.android.gms.tasks.zzj.run(Unknown Source)
16942 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
16942 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
16942 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
16942 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
16942 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
16942 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
16942 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
788 W ActivityManager: Force finishing activity com.example.sample/.MainActivity