致命异常:java.lang.NoSuchMethodError没有接口方法build()。没有接口方法build()Landroid / app / Notification

时间:2016-12-20 12:52:32

标签: android crash nosuchmethoderror crashlytics-android

我注意到有关生产的奇怪崩溃报告。我试过查找它,但我没有在源代码中找到任何东西。对我来说,看起来这些设备的供应商只是修改了SDK中的内容。

但它发生在支持库中。那么这怎么可能发生呢?

堆栈跟踪:

Fatal Exception: java.lang.NoSuchMethodError: No interface method build()Landroid/app/Notification; in class Landroid/support/v4/app/NotificationBuilderWithBuilderAccessor; or its super classes (declaration of 'android.support.v4.app.NotificationBuilderWithBuilderAccessor' appears in /data/app/com.myapp-1/base.apk)
   at android.support.v4.app.NotificationCompat$BuilderExtender.build(NotificationCompat.java:469)
   at android.support.v4.app.NotificationCompat$NotificationCompatImplApi21.build(NotificationCompat.java:768)
   at android.support.v4.app.NotificationCompat$Builder.build(NotificationCompat.java:1559)
   at com.myapp.NotificationListener$MyNotification.updateText(MyNotification.java:106)

代码发生的地方:

Builder mBuiler = new NotificationCompat.Builder(mContext);

...

private Notification updateText(String title, String message) {
        return mBuidler
                .setContentTitle(title)
                .setContentText(message)
                .setStyle(new BigTextStyle(mBuidler)
                        .bigText(message))
                .build();
}

主要在以下设备上重现:

  • 三星SM-G925F
  • Samsung SM-G935F
  • 三星GT-I9300
  • 部分联想设备
  • Solarin手机(无论是什么)

操作系统:

  • Android 6 - 95%
  • Android 4 - 3%
  • Android 5 - 2%

我有数百万用户,其中只有少数用户正在崩溃。

2 个答案:

答案 0 :(得分:1)

如果您更新了Android SDK但仍使用属于旧版本的support-v4文件,则会发生此错误。 您可以检查build.gradle(如果您使用的是android工作室),看看是否根据您最新的SDK更新设置了app-compact库或support-v4库。 此外,您的某个Gradle依赖项文件可能使用较早版本的support-v4

如果您使用的是eclipse或其中包含support-v4.jar的其他环境,请将其替换为SDK文件夹中的最新版本。

答案 1 :(得分:-1)

请使用以下代码:

NotificationCompat.Builder mBuidler = new NotificationCompat.Builder(this);

您的退货方式:

private NotificationCompat.Builder updateText(String title, String message) {
    return mBuidler
            .setContentTitle(title)
            .setContentText(message)
            .setStyle(new NotificationCompat.BigTextStyle().bigText(message))
            .build();
}