升级到支持 AndroidX 的 Nativescript 6 后 Google 地图在 Android 中停止工作

After upgrading to Nativescript 6 with AndroidX support Google map stopped working in 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...

我在 "application" 标签内的 AndroidManifest.xml 中有密钥,如 "nativescript-google-maps-sdk"

手册中所述
<?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。

删除这一行

project.ext {
    googlePlayServicesVersion = "+"
}

使用以下代码添加名为 before-plugins.gradle 的新文件

android {  
  project.ext {
    googlePlayServicesVersion = "15.+"
  }
}

迁移到 NativeScript 6 后,AndroidManifest.xml 文件保留在之前的位置 - 在 ./App_Resources/Android/。 将其移动到 ./App_Resources/Android/src/main/ 解决了问题。