【问题标题】:App from APK crashes when map trying to initialize地图尝试初始化时来自 APK 的应用程序崩溃
【发布时间】:2018-03-14 18:47:21
【问题描述】:

当我通过 Android Studio 运行应用程序时,它运行良好。但是当我从 apk 版本运行它或调试它时,它会在地图初始化时崩溃,并出现问题:

Ensure that the "Google Maps Android API v2" is enabled.

Ensure that the following Android Key exists:

API Key: AIzaSyBGDr2AfW0_cH_qhU-EnwCBFir-BKtfgQc

Android Application (<cert_fingerprint>;<package_name>): null;

    FATAL EXCEPTION: main Process: com.techacademy.demomaps, PID: 1406 
                                            java.lang.NullPointerException
                                                                            at android.os.Parcel.readException(Parcel.java:1478)
                                                                            at android.os.Parcel.readException(Parcel.java:1426)
                                                                            at com.google.android.gms.location.internal.zzg$zza$zza.zza(Unknown Source)
                                                                            at com.google.android.gms.location.internal.zzi.zza(Unknown Source)
                                                                            at com.google.android.gms.location.internal.zzj.zza(Unknown Source)
                                                                            at com.google.android.gms.location.internal.zzd$1.zza(Unknown Source)
                                                                            at com.google.android.gms.location.internal.zzd$1.zza(Unknown Source)
                                                                            at com.google.android.gms.common.api.zza$zza.zzb(Unknown Source)
                                                                            at com.google.android.gms.common.api.zzd.zza(Unknown Source)
                                                                            at com.google.android.gms.common.api.zzd.zzb(Unknown Source)
                                                                            at com.google.android.gms.common.api.zzg.zzb(Unknown Source)
                                                                            at com.google.android.gms.location.internal.zzd.requestLocationUpdates(Unknown Source)
                                                                            at com.techacademy.demomaps.MapsActivity.onConnected(MapsActivity.java:392)
                                                                            at com.google.android.gms.common.internal.zzj.zzg(Unknown Source)
                                                                            at com.google.android.gms.common.api.zze.zzmH(Unknown Source)
                                                                            at com.google.android.gms.common.api.zze.onConnected(Unknown Source)
                                                                            at com.google.android.gms.common.api.zzg$2.onConnected(Unknown Source)
                                                                            at com.google.android.gms.common.internal.zzi$zzg.zznO(Unknown Source)
                                                                            at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
                                                                            at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
                                                                            at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
                                                                            at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                            at android.os.Looper.loop(Looper.java:136)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5590)
                                                                            at java.lang.reflect.Method.invokeNative(Native Method)
                                                                            at java.lang.reflect.Method.invoke(Method.java:515)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
                                                                            at dalvik.system.NativeStart.main(Native Method)

但在其他设备上 APK 运行良好

启动应用时,Google Play Market 也会停止工作

【问题讨论】:

  • 所以在“真实手机”上它会崩溃,但在模拟器中可以正常工作吗?
  • @rogerdpack 我在真正的平板电脑、真正的手机和少数模拟器上尝试过,apk 只在平板电脑上崩溃
  • 平板有 GPS 吗?

标签: android-studio apk google-maps-api-2


【解决方案1】:

感谢 Google 的支持,什么对我有用:

我遇到了几乎相同的问题,除了以下行:

Android Application (<cert_fingerprint>;<package_name>): null;

我可以在null;之后看到我的应用程序包名

对我来说问题是一样的,它只是在我的测试设备上不起作用,但它在其他任何地方都有效,包括模拟器。我的测试设备正在运行 KitKat(API 级别 19)。

所以要检查的是:

  1. API key 的值,通常在字符串资源文件中,实际上在'release'字符串资源文件中。由于这些不同的文件分别用于调试和发布 apk 构建。

  2. 根据不工作的设备,确保minSdkVersion 为 19 或更早版本。

在此之后,并与 Google 支持人员联系后,我们意识到 de 应用程序不会崩溃,并且地图会以调试模式显示,但是由于另一个原因,我会在这行代码上再次崩溃,因为我正在发出 https 请求:

ufferedReader(InputStreamReader(inputStream)).use {

所以,显然这是我真正的问题。正如来自 Google 支持的 Adam 所说:

“我怀疑它与操作系统的版本有关;并且由于特定的 SSL 错误,它似乎在这里被照亮了。”

“默认情况下,TLS v1.2 直到 5.0 才在 Android 上启用(可能是因为它还不存在);尽管由于安全补丁更新,在此之前的设备通常能够启用它. 除非您在代码中指定强制使用 TLS1.2,否则 SSL 协议将不匹配,请求将失败。”

他向我指出了这个回应:

http://stackoverflow.com/a/33567745/3202633

我遵循它并且能够解决我的问题!据我了解,此响应建议在自定义 SSLSocketFactory 类中启用此 API 级别的 TLS1.2,该类受支持,但默认情况下未启用。而且我认为运行地图通信需要这个安全协议,并且在调试模式下它的处理方式不同。

我希望这对您或遇到这种奇怪事情的任何人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多