首页 > 解决方案 > 升级到支持 AndroidX 的 Nativescript 6 后,谷歌地图在 Android 中停止工作

问题描述

在升级到 Nativescript 6 之前,一切正常。之后,在没有对配置进行任何更改的情况下,Android 在加载 MapView 时开始抛出异常:

ERROR Error: 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
JS:     com.google.maps.api.android.lib6.drd.p.b(:com.google.android.gms.dynamite_mapsdynamite@18385084@18.3.85 (100700-262677519):22)
JS:     com.google.maps.api.android.lib6.auth.d.a(:com.google.android.gms.dynamite_mapsdynamite@18385084@18.3.85 (100700-262677519):10)
JS:     com.google.maps.api.android.lib6.impl.d.a(:com.google.android.gms.dynamite_mapsdynamite@18385084@18.3.85 (100700-262677519):41)
JS:     com.google.android.gms.maps.internal.CreatorImpl.a(:com.google.android.gms.dynamite_mapsdynamite@18385084@18.3.85 (100700-262677519):61)
JS:     com.google.android.gms.maps.internal.CreatorImpl.newMapViewDelegate(:com.google.android.gms.dynamite_mapsdynamite@18385084@18.3.85 (100700-262677519):32)
JS:     com.google.android.gms.maps.internal.h.a(:com.google.android.gms.dynamite_mapsdynamite@18385084@18.3.85 (100700...

如“nativescript-google-maps-sdk”手册中所述,我在“应用程序”标签内有 AndroidManifest.xml 中的密钥

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="__PACKAGE__"
    android:versionCode="200000"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionName="2.0.0">

    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"/>

    <uses-sdk
        android:minSdkVersion="22"
        android:targetSdkVersion="28"/>

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


    <application
        android:name="Blahaha"
        android:launchMode="singleInstance"
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        tools:replace="android:supportsRtl">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/nativescript_google_maps_api_key"/>
    </application>
</manifest>

还尝试将密钥直接写入元数据标签:

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIza**********************"/>

我的 app.gradle 是:

android {  
  defaultConfig {  
    generatedDensities = []
    applicationId = "com.app.app" 
    renderscriptTargetApi 25
    renderscriptSupportModeEnabled true 
  }  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
} 

project.ext {
    googlePlayServicesVersion = "+"
}

dependencies {
    def googlePlayServicesVersion = project.googlePlayServicesVersion
    compile "com.google.android.gms:play-services-location:$googlePlayServicesVersion"
}

package.json 中的插件版本:

"nativescript-google-maps-sdk": "^2.7.0"

我的项目是基于 Angular 的。

标签: androidgoogle-mapsnativescriptandroidxnativescript-angular

解决方案


迁移到 NativeScript 6 后,AndroidManifest.xml 文件保持在原来的位置 - 在./App_Resources/Android/. 移动它以./App_Resources/Android/src/main/解决问题。


推荐阅读