exception.class.missing ._Unknown_: настоятельно рекомендуется использовать FLAG_IMMUTABLE без PendingIntent в исходном коде

# #android #firebase-cloud-messaging #android-pendingintent #android-api-31

Вопрос:

Недавно я обновил свое приложение до целевого API 31 и заметил сообщение о новом сбое в консоли Google Play, которое для меня не имеет смысла.

Сбой, вызванный, exception.class.missing._Unknown_: Strongly consider using FLAG_IMMUTABLE... для которого есть несколько ответов на SO и в других местах, однако из того, что я прочитал, этот сбой должен быть связан PendingIntent только с использованием.

Отчеты о сбоях имеют смысл в том смысле, что я видел сообщение о сбое только в Android 12 (API 31), поскольку именно здесь было введено явное НЕИЗМЕНЯЕМОЕ или ИЗМЕНЯЕМОЕ требование, но я просмотрел весь свой проект и не могу найти никакого использования PendingIntent .

Время сбоев, похоже, связано с отправленным мной push-уведомлением FCM, которое снова связано с причиной сбоя PendingIntent , но если я не могу найти это в своем источнике, то как я могу явно установить FLAG_IMMUTABLE ?

Мои зависимости от проекта такие, как показано ниже:

 dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.4.0-beta01'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.1'

    // billing for in-app purchases
    implementation 'com.android.billingclient:billing:3.0.2' 

    // For in-app review flow
    implementation 'com.google.android.play:core:1.10.2'

    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:26.1.1')
    implementation 'com.google.firebase:firebase-messaging'

}
 

Комментарии:

1. Точно такая же проблема. Также не используется какое-либо ожидающее намерение. У меня еще не было времени изучить это, хотя

2. Что ж, я рад, что это не только я, но я изо всех сил пытаюсь разобраться, потому что единственное устройство Android 12 8 находится в эмуляторе, и, похоже, оно даже не хочет получать push-уведомления FCM в данный момент, поэтому мне нужно сначала это исправить. Было бы неплохо узнать, что вы найдете, когда у вас появится возможность провести расследование — я боюсь отправлять уведомления в мое приложение в данный момент из-за сбоя.

Ответ №1:

Это известная проблема с Admob, как упоминалось в https://developers.google.com/admob/android/quick-start

androidx.work:work-runtime: 2.1.0, извлеченный из play-services-ads, содержит ошибку при использовании PendingIntent без FLAG_IMMUTABLE или FLAG_MUTABLE и приведет к сбою в приложениях, ориентированных на S .

Решение также упоминается в файле app / build-gradle:

 dependencies {
      implementation 'com.google.android.gms:play-services-ads:20.4.0'
    
      // For apps targeting Android 12, add WorkManager dependency.
      constraints {
        implementation('androidx.work:work-runtime:2.7.0') {
            because '''androidx.work:work-runtime:2.1.0 pulled from play-services-ads
                       has a bug using PendingIntent without FLAG_IMMUTABLE or
                       FLAG_MUTABLE and will fail in apps targeting S .'''
        }
      }
    }
 

Комментарии:

1. Интересно, но мое приложение не использует AdMob, поэтому сбой происходит не оттуда.

2. Я добавил зависимости из моего build.gradle к вопросу. Интересно, имеет ли что-то еще, что я использую, ту же проблему, что и код AdMob….

3. Можно попробовать пометить раздел ограничений в разделе зависимости: ограничения { реализация (‘androidx.work:work-runtime:2.7.0’) { потому что «‘androidx.work:work-runtime: 2.1.0, извлеченный из play-services-ads, содержит ошибку при использовании PendingIntent без FLAG_IMMUTABLE или FLAG_MUTABLE и приведет к сбою в таргетинге приложенийS .»‘ } }

4. Можно попробовать * добавить 🙂

5. Я надеюсь попробовать это, но тестирование является проблемой. Мне нужно выяснить, почему мой эмулятор Android 12 не получает уведомлений, а затем воспроизвести проблему там (наряду с созданием категории тестовых уведомлений, чтобы не влиять на реальных пользователей)… Сложно проверить, исправляет ли это, когда я не могу воспроизвести в своем тестовом AVD.