升级到支持 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/
解决了问题。
在升级到 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/
解决了问题。