mapView.onCreate 在 api 级别 26 的cordova android 应用程序中工作正常,但在 api 级别 28 时崩溃

Posted

技术标签:

【中文标题】mapView.onCreate 在 api 级别 26 的cordova android 应用程序中工作正常,但在 api 级别 28 时崩溃【英文标题】:mapView.onCreate works fine in cordova android app with api level 26, but crashes with api level 28 【发布时间】:2021-05-12 22:19:16 【问题描述】:

我有一个使用 mapkit 插件的 7 岁的 Cordova android 应用程序。该插件将mainView 拆分为webViewmapView。随着时间的推移,我们添加了功能,并且构建到 API 级别 26 就很好,并且应用程序正在运行。现在 Google 要求至少将 API 级别 28 设为targetSdkVersion。所以我在cordova项目的config.xml(当前使用cordova 7.1)中唯一改变的是android-targetSdkVersion到28。构建cordova build --release android工作得很好,但是当我在模拟器或电话上运行应用程序时( Android 版本 9),应用程序崩溃。但是使用 API 级别 26 构建,应用程序在两者上都可以正常运行。

插件使用com.google.android.gms.maps.MapView。相关代码在MapKit.java文件的showMap函数中。当我注释掉mapView.onCreate(null) 行时,应用程序不会崩溃,但似乎不再有谷歌地图了。

为什么mapView.onCreate(null) 适用于 API 级别 26,但不适用于 API 级别 28?需要更改哪些内容才能让 Google 地图在 API 级别 28 中运行?

【问题讨论】:

【参考方案1】:

在build.gradle中你需要添加这个来支持android 6.0以上的apache

使用图书馆'org.apache.http.legacy'

在 Android Manifest 文件中声明以支持 9.0 以上版本

 <uses-library android:name="org.apache.http.legacy" android:required="false"/>

【讨论】:

我将 添加到了 Android Manifest 文件中,现在它又可以工作了,非常感谢。虽然不必更改 build.gradle(并且不知道在哪里添加“useLibrary ...”)。怎么会知道呢,太好了,再次感谢。 如果我的回答对您有帮助,请将其标记为正确

以上是关于mapView.onCreate 在 api 级别 26 的cordova android 应用程序中工作正常,但在 api 级别 28 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何定位多个 API 级别?

在 Windows 上选择 Google API(API 级别 17 或任何其他 API 级别)时,Android 模拟器未加载

Hystrix 断路器实现在 Zuul API 网关级别或 REST API 服务级别

Chromebook 可以在哪些 API 级别上运行?

无法在 Android Studio 上更改 API 级别

我无法在 api 级别 15 进行硬件加速