Android Studio中Google地图API密钥缺失致应用崩溃求助
解决Google地图API密钥缺失导致的应用崩溃
问题描述
首次在Android Studio中开发简单地图显示功能,应用持续崩溃。调试日志明确提示API密钥未找到,需检查AndroidManifest.xml的<application>元素配置。
原始清单文件代码
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.tensorflow.lite.examples.detection"> <uses-sdk /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <application android:allowBackup="true" android:icon="@drawable/blind" android:label="@string/app_name" android:roundIcon="@drawable/blind" android:supportsRtl="true" android:theme="@style/AppTheme.ObjectDetection"> <activity android:name=".Navigation.MapsActivity" android:exported="true"/> <activity android:name=".Navigation.GestureDetect" android:exported="true"/> <activity android:name=".Navigation.Navigation" android:exported="true"/> <activity android:name=".Reminder.NotificationMessage" android:exported="true" /> <activity android:name=".Home" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".Navigation.RebootReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver> </application> </manifest>
调试报错日志
E/AndroidRuntime: FATAL EXCEPTION: main Process: org.tensorflow.lite.examples.detection, PID: 11755 java.lang.RuntimeException: Unable to start activity ComponentInfo{org.tensorflow.lite.examples.detection/org.tensorflow.lite.examples.detection.Navigation.MapsActivity}: android.view.InflateException: Binary XML file line #75: Binary XML file line #75: Error inflating class fragment at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:528) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:910) Caused by: android.view.InflateException: Binary XML file line #75: Binary XML file line #75: Error inflating class fragment Caused by: android.view.InflateException: Binary XML file line #75: Error inflating class fragment Caused by: java.lang.RuntimeException: API key not found. Check that <meta-data android:name="com.google.android.geo.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml at com.google.maps.api.android.lib6.drd.p.a(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):6) at com.google.maps.api.android.lib6.auth.f.i(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):1) at com.google.maps.api.android.lib6.impl.l.a(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):24) at com.google.android.gms.maps.internal.CreatorImpl.b(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):7) at com.google.android.gms.maps.internal.CreatorImpl.logInitialization(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):3) at com.google.android.gms.maps.internal.g.ba(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):5) at eu.onTransact(:com.google.android.gms.dynamite_mapsdynamite@222413050@22.24.13 (040406-0):4) at android.os.Binder.transact(Binder.java:627) at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@18.1.0:2) at com.google.android.gms.maps.internal.zze.zzl(com.google.android.gms:play-services-maps@@18.1.0:4) at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.1.0:12) at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.1.0:1) at com.google.android.gms.maps.zzav.zzc(com.google.android.gms:play-services-maps@@ at com.google.android.gms.dynamic.DeferredLifecycleHelper.onInflate(com.google.android.gms:play-services-base@@18.0.1:1) at com.google.android.gms.maps.SupportMapFragment.onInflate(com.google.android.gms:play-services-maps@@18.1.0:9) at androidx.fragment.app.Fragment.onInflate(Fragment.java:1561) at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:106) at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135) at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:356) at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:335) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:737) E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:870) at android.app.Activity.setContentView(Activity.java:2758) at org.tensorflow.lite.examples.detection.Navigation.MapsActivity.onCreate(MapsActivity.java:273) at android.app.Activity.performCreate(Activity.java:7227) at android.app.Activity.performCreate(Activity.java:7218) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
解决方案
问题根源是AndroidManifest.xml的<application>标签内缺少Google地图API密钥的配置项。按以下步骤修改:
- 在
<application>标签内部添加<meta-data>元素,配置你的Google地图API密钥:
<meta-data android:name="com.google.android.geo.API_KEY" android:value="你的实际API密钥"/>
- 修改后的完整清单文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.tensorflow.lite.examples.detection"> <uses-sdk /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <application android:allowBackup="true" android:icon="@drawable/blind" android:label="@string/app_name" android:roundIcon="@drawable/blind" android:supportsRtl="true" android:theme="@style/AppTheme.ObjectDetection"> <!-- 添加Google地图API密钥配置 --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="你的实际API密钥"/> <activity android:name=".Navigation.MapsActivity" android:exported="true"/> <activity android:name=".Navigation.GestureDetect" android:exported="true"/> <activity android:name=".Navigation.Navigation" android:exported="true"/> <activity android:name=".Reminder.NotificationMessage" android:exported="true" /> <activity android:name=".Home" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".Navigation.RebootReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver> </application> </manifest>
- 注意事项:
- 确保替换
android:value中的内容为你申请的合法地图API密钥 - 确认API密钥已启用Google Maps Android SDK服务
- 检查应用的SHA-1指纹和包名是否与API密钥的配置一致
内容的提问来源于stack exchange,提问作者Rishi Ff
相关产品推荐
相关产品推荐

