【问题标题】:Unable to instantiate receiver com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver无法实例化接收器 com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver
【发布时间】:2019-09-08 21:56:20
【问题描述】:

我最近在 Google Play 上更新了我的应用程序并看到崩溃,错误消息是这样的:

Unable to instantiate receiver com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver"

更新只是改变了广告的频率,没有别的。我正在使用 firebase-core 和 firebase-ads。 仅当从 Play 商店安装应用程序而不是通过 adb 或在本地设备上安装 APK 时才会发生崩溃 - 崩溃似乎也只发生在第一次打开时。 目前,我已从我的应用中删除了 firebase-core 和 firebase-ads,并正在等待应用在商店中更新。

更新:删除 firebase-core 和 firebase-ads 似乎已经解决了这个问题。虽然,我仍然希望在我的应用中使用 firebase。

谢谢。

【问题讨论】:

  • 使用 apk 分析器工具(Android Studio 有一个)探索你最终的 *.apk,看看它是否真的包含错过的类。
  • 你是否使用 Proguard 混淆了你的代码?
  • 我没有在我的项目中使用 firebase。但问题存在。有其他解决方案吗?谢谢

标签: android firebase


【解决方案1】:

Google FireBase 依赖于客户端设备上安装的 Google Play 服务。

您需要确保用户在其设备上安装了最新的 Google Play 服务,并在需要时提示他更新和/或安装: https://developers.google.com/android/guides/setup#ensure_devices_have_the_google_play_services_apk

还有一个快速的代码 sn-p 可以做到这一点: Android app requires Google Play Service Update - Open button instead of Update

【讨论】:

  • 在我的测试设备上,我安装了最新的 Google Play 服务,但应用仍然崩溃。
  • 我有最新版本的 Google Play 服务,但错误仍然存​​在。
【解决方案2】:

将此添加到您的 ProGuard 文件中:

-dontwarn com.google.android.gms.**
-keep class com.google.android.gms.** { *; }

-dontwarn com.google.firebase.**
-keep class com.google.firebase.** { *; }

取决于您用于广告的包装。

【讨论】:

    【解决方案3】:

    如果您的应用包含 Firebase Analytics。您需要在 AndroidManifest.xml 中声明 BroadcastReceiver 并启用:

    <manifest>
       <application>
         <!-- ... -->
    
         <receiver
             android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver"
             android:permission="android.permission.INSTALL_PACKAGES"
             android:enabled="true">
             <intent-filter>
                 <action android:name="com.android.vending.INSTALL_REFERRER"/>
             </intent-filter>
         </receiver>
    
         <!-- ... -->
       </application>
     </manifest>
    

    它在 Google API 中说: https://developers.google.com/android/reference/com/google/android/gms/measurement/AppMeasurementInstallReferrerReceiver,我这样做解决了我的问题

    【讨论】:

      【解决方案4】:
      Broadcast of Intent { act=com.android.vending.INSTALL_REFERRER flg=0x10 pkg=com.company.appname cmp=com.company.appname/com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver (has extras) }
      

      我的应用还是出现上述错误,我在虚拟机android API 26和28上使用测试没问题

      com.company.appname是名称已更改

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多